CN2 组件
CN2 架构由执行网络配置平面和网络控制平面功能的 Pod 以及执行网络数据平面功能的 Pod 组成。
-
网络配置平面是指使 CN2 能够管理其资源并与 Kubernetes 控制平面的其余部分进行交互的功能。
-
网络控制平面代表了 CN2 的全功能 SDN 功能。它使用 BGP 与其他控制器通信,并使用 XMPP 与工作器节点上的分布式数据平面组件通信。
-
网络数据平面是指每个节点上的数据包传输和接收功能,尤其是在工作负载所在的工作节点上。
执行配置和控制平面功能的 Pod 驻留在 Kubernetes 控制平面节点上。执行数据平面功能的 Pod 驻留在 Kubernetes 控制平面节点和 Kubernetes 工作节点上。
表 1 描述了 CN2 的主要组件。根据配置,可能还有其他组件(未显示)执行辅助功能,如证书管理和状态监控。
Pod 名称, | 其中 | 描述 | |
---|---|---|---|
配置平面1 | Contrail-K8S-APISERVER | 控制平面节点 | 此容器是一个聚合的 API 服务器,是管理所有 Contrail 资源的入口点。它在常规的 kube-apiserver 中注册为 APIService。常规的 kube-apiserver 将所有与网络相关的请求转发到 contrail-k8s-apiserver 进行处理。 每个 Kubernetes 控制平面节点都有一个 contrail-k8s-apiserver pod。 |
Contrail-k8s-controller | 控制平面节点 | 此 Pod 执行 Kubernetes 控制环路功能来协调网络资源。它会持续监视网络资源,以确保资源的实际状态与其预期状态匹配。 每个 Kubernetes 控制平面节点都有一个 contrail-k8s 控制器 Pod。 |
|
contrail-k8s-kubemanager | 控制平面节点 | 此 Pod 是 Kubernetes 资源和 Contrail 资源之间的接口。它会监视 kube-apiserver 对常规 Kubernetes 资源(如服务和命名空间)的更改,并对影响网络资源的任何更改采取行动。 在单集群部署中,每个 Kubernetes 控制平面节点都有一个 contrail-k8s-kubemanager pod。 在多集群部署中,每个分布式工作负载集群都有一个额外的 contrail-k8s-kubemanager pod。 |
|
控制平面1 | 凝结尾迹控制 | 控制平面节点 | 此 Pod 将配置传递给工作节点,并执行路由学习和分发。它会监视 kube-apiserver 是否有任何影响网络控制平面的内容,然后根据需要与其 BGP 对等方和/或 vRouter 代理(通过 XMPP)进行通信。 每个 Kubernetes 控制平面节点都有一个 contrail 控制 Pod。 |
数据平面 | contrail-vrouter-nodes | 工作器节点 | 此容器包含虚拟路由器代理和虚拟路由器本身。 虚拟路由器代理在与 Contrail 控制器交互时代表本地虚拟路由器执行操作。每个节点有一个代理。代理使用两个 Contrail 控制器建立 XMPP 会话,以执行以下功能:
虚拟路由器为位于同一位置的 Pod 和工作负载提供数据包发送和接收功能。它提供 CNI 插件功能。 |
contrail-vrouter-masters | 控制平面节点 | 此容器提供与 contrail-vrouter-nodes 容器相同的功能,但驻留在控制平面节点上。 | |
1组成网络配置平面和网络控制平面的组件统称为 Contrail 控制器。 |
图 1 显示了 Kubernetes 群集上下文中的这些组件。
为清楚起见并减少混乱,这些图未显示具有 Contrail 控制器的节点上的数据平面 Pod。
在上游 Kubernetes 或 Rancher RKE2 上运行时,Contrail 控制器默认将所有 CN2 集群数据存储在 Kubernetes etcd 主数据库中。在 OpenShift 上运行时,Contrail 控制器会将所有 CN2 集群数据存储在其自己的 Contrail etcd 数据库中。
kube-apiserver 是集群的 Kubernetes REST API 调用的入口点。它将所有网络请求定向到 contrail-k8s-apiserver,这是 Contrail API 调用的入口点。contrail-k8s-apiserver 将传入的网络请求转换为对相应 CN2 对象的 REST API 调用。在某些情况下,这些调用可能会导致 Contrail 控制器向一个或多个工作器节点上的 vRouter 代理发送 XMPP 消息,或者向其他控制平面节点或外部路由器发送 BGP 消息(未显示)。这些 XMPP 和 BGP 消息在常规 Kubernetes 节点到节点通信之外发送。
contrail-k8s-kubemanager(集群)组件仅存在于多集群部署中。有关不同类型的部署的详细信息,请参阅部署模型。
图 2 显示了具有多个 Contrail 控制器的群集。这些控制器驻留在控制平面节点上。Kubernetes 组件使用 REST 相互通信。Contrail 控制器使用 iBGP 在常规 Kubernetes REST 接口之外相互交换路由。为实现冗余,工作节点上的 vRouter 代理始终与两个 Contrail 控制器建立 XMPP 通信。