Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

CN2 组件

CN2 架构由执行网络配置平面和网络控制平面功能的 Pod 以及执行网络数据平面功能的 Pod 组成。

  • 网络配置平面是指使 CN2 能够管理其资源并与 Kubernetes 控制平面的其余部分进行交互的功能。

  • 网络控制平面代表了 CN2 的全功能 SDN 功能。它使用 BGP 与其他控制器通信,并使用 XMPP 与工作节点上的分布式数据平面组件进行通信。

  • 网络数据平面是指每个节点上的数据包传输和接收功能,尤其是在工作负载驻留的工作节点上。

执行配置和控制平面功能的 Pod 驻留在 Kubernetes 控制平面节点上。执行数据平面功能的 Pod 驻留在 Kubernetes 控制平面节点和 Kubernetes 工作节点上。

表 1 描述了 CN2 的主要组件。根据配置的不同,可能还有其他组件(未显示)执行证书管理和状态监控等辅助功能。

表 1:CN2 组件
Pod 名称 ,其中 说明
配置平面1 contrail-k8s-apiserver 控制平面节点

此 Pod 是一个聚合的 API 服务器,是管理所有 Contrail 资源的入口点。它在常规 kube-apiserver 中注册为 APIService。常规的 kube-apiserver 会将所有与网络相关的请求转发到 contrail-k8s-apiserver 进行处理。

每个 Kubernetes 控制平面节点都有一个 contrail-k8s-apiserver Pod。

Contrail-K8s 控制器 控制平面节点

此 Pod 执行 Kubernetes 控制环路功能来协调网络资源。它会持续监控网络资源,确保资源的实际状态与其预期状态匹配。

每个 Kubernetes 控制平面节点都有一个 contrail-k8s-controller pod。

contrail-k8s-kubemanager 控制平面节点

此 Pod 是 Kubernetes 资源与 Contrail 资源之间的接口。它监视 kube-apiserver 对常规 Kubernetes 资源(例如服务和命名空间)的更改,并对影响网络资源的任何更改采取行动。

在单群集部署中,每个 Kubernetes 控制平面节点有一个 contrail-k8s-kubemanager Pod。

在多群集部署中,每个分布式工作负载群集还有一个 contrail-k8s-kubemanager 群集。

控制平面1 Contrail 控制 控制平面节点

该 Pod 将配置传递给工作节点并执行路由学习和分配。它监视 kube-apiserver 以查找影响网络控制平面的任何内容,然后根据需要与其 BGP 对等方和/或 vRouter 代理(通过 XMPP)进行通信。

每个 Kubernetes 控制平面节点都有一个 Contrail 控制 Pod。

数据平面 Contrail vRouter 节点 工作节点

此容器包含 vRouter 代理和 vRouter 本身。

vRouter 代理在与 Contrail 控制器交互时代表本地 vRouter 执行作。每个节点有一个代理。代理会使用两个 Contrail 控制器建立 XMPP 会话,以执行以下功能:

  • 将控制平面中的配置转换为 vRouter 可理解的对象
  • 与用于管理路由的控制平面接口
  • 从数据平面收集和导出统计信息

vRouter 为主机代管的 Pod 和工作负载提供数据包发送和接收功能。它提供 CNI 插件功能。

Contrail-vRouter-Masters 控制平面节点 此容器提供与 contrail-vrouter-nodes 容器相同的功能,但驻留在控制平面节点上。

1组成网络配置平面和网络控制平面的组件统称为 Contrail 控制器。

图 1 显示了这些组件在 Kubernetes 群集的上下文中。

为清楚起见并减少混乱,这些图未显示带有 Contrail 控制器的节点上的数据平面 Pod。

图 1:CN2 组件 Integration of Kubernetes with Juniper Contrail Networking, showing interaction between Kubernetes and Contrail components within a Kubernetes cluster.

在上游 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 相互通信。在常规 Kubernetes REST 接口之外,Contrail 控制器使用 iBGP 相互交换路由。为实现冗余,工作节点上的 vRouter 代理始终与两个 Contrail 控制器建立 XMPP 通信。

图 2:多个 Contrail 控制器 Kubernetes cluster architecture with Juniper Contrail: Control Plane Nodes with Contrail Controllers; Worker Nodes with Contrail vRouters; arrows for REST, BGP, and XMPP communication.