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

集群以标准的 Kubernetes 方式运行,kube-apiserver 是集群的 REST API 入口点。kube-apiserver 将所有网络请求定向到 contrail-k8s-apiserver,后者将它们转换为对相应 CN2 对象的 REST API 调用。在某些情况下,这些调用可能会导致 Contrail 控制器向其他工作器节点上的 vRouter 代理发送 XMPP 消息,或者向其他 Contrail 控制器节点或外部路由器发送 BGP 消息(未显示)。Contrail 控制器在常规 Kubernetes 群集通信之外发送这些 XMPP 和 BGP 消息。
contrail-k8s-kubemanager(集群)组件仅存在于多集群部署中。有关不同类型的部署的详细信息,请参阅 部署模型。
Contrail 控制器将所有 CN2 集群数据存储在 Contrail etcd 中,与主 Amazon EKS etcd 存储分开。
图 2 显示了具有多个 Contrail 控制器的群集。和以前一样,Kubernetes 组件使用 REST(未显示)相互通信,Contrail 控制器使用 XMPP 与 vRouter 通信。为实现冗余,每个虚拟路由器都与两个 Contrail 控制器建立 XMPP 通信。此外,Contrail 控制器使用 iBGP 相互交换路由。这样,如果任何 Contrail 控制器出现故障,其他 Contrail 控制器将获得足够的信息来保持网络控制平面的运行。
