当前位置:网站首页>Kubernetes CNI 插件之Fabric
Kubernetes CNI 插件之Fabric
2022-07-04 09:32:00 【男孩李】
CNI(Container Networking Interface)是容器运行时和网络实现之间的接口。它允许不同的项目,如 Tungsten Fabric,提供 CNI 插件的实现,并使用它们来管理 Kubernetes 集群中的网络。在这篇博文中,您将学习如何使用 Tungsten Fabric 作为 Kubernetes CNI 插件来确保容器和裸机之间的网络连接。您还将看到一个使用 TF CNI 插件将 Kubernetes 集群嵌套部署到 OpenStack VM 中的示例。
CNI 接口本身非常简单。它必须实现的最重要的操作是 ADD 和 DEL。顾名思义,ADD 的作用是将容器添加到网络中,而 DEL 的作用是将容器从网络中删除。就这样。但是这些功能执行了吗?
首先要做的事情:kubelet 是在集群中的每个节点上运行的 Kubernetes 守护程序。当用户创建一个新的 Pod 时,Kubernetes API 服务器会命令一个运行在该 Pod 被调度的节点上的 kubelet 来创建 Pod。然后 kubelet 将为 pod 创建一个网络命名空间,并通过运行所谓的“暂停”容器来分配它。该容器的作用之一是维护网络命名空间,该命名空间将在 pod 中的所有容器之间共享。这就是为什么 pod 内的容器可以使用环回接口相互“对话”的原因。然后,对于 pod 中定义的每个容器,kubelet 都会调用 CNI 插件。
但是它怎么知道如何使用每个插件呢?首先,它在预定义的目录( 默认为 /etc/cni/net.d )中查找 CNI 配置文件。当使用 Tungsten Fabric 时,kubelet 会找到这样的文件:
{
"cniVersion": "0.3.1",
"contrail" : {
"cluster-name" : "<CLUSTER-NAME>",
"meta-plugin" : "<CNI-META-PLUGIN>",
"vrouter-ip" : "<VROUTER-IP>",
"vrouter-port" : <VROUTER-PORT>,
"config-dir" : "/var/lib/contrail/ports/vm",
"poll-timeout" : <POLL-TIMEOUT>,
"poll-retries" : <POLL-RETRIES>,
"log-file" : "/var/log/contrail/cni/opencontrail.log",
"log-level" : "<LOG-LEVEL>"
},
"name": "contrail-k8s-cni",
"type": "contrail-k8s-cni"
}该文件和其他参数一起指定了 CNI 插件的名称和 vRouter 代理的 IP (vrouter-ip) 和端口 (vrouter-port)。通过查看这个文件,kubelet 知道它应该使用名为“contrail-k8s-cni”的 CNI 插件二进制文件。它在预定义的目录( 默认为 /opt/cni/bin )中查找它,当它想要创建一个新容器时,使用通过环境变量传递的命令 ADD 以及其他参数(例如:pod 网络的路径)执行它命名空间、容器 ID 和容器网络接口名称。Contrail-k8s-cni 二进制文件(您可以 在此处找到其源代码)将读取这些参数并向 vRouter 代理发送适当的请求。

图 1. 使用 Kubernetes 进行 Tungsten Fabric 计算
vRouter Agent 的工作是为容器创建实际的接口。但是它怎么知道如何配置一个接口呢?正如您在上图中所见,它从 Tungsten Fabric Control 获取所有这些信息。那么,Tungsten Fabric Control 是如何知道所有 pod、它们的命名空间等的呢?这就是 Tungsten Fabric Kube Manager(您可以 在此处找到它的源代码)的用武之地。它是一项单独的服务,与其他 Tungsten Fabric SDN 控制器组件一起启动。可以在下图的左下角看到。

Kubemanager 的作用是监听 Kubernetes API 服务器事件,例如:pod 创建、命名空间创建、服务创建、删除。它监听这些事件,处理它们,然后在 Tungsten Fabric Config API 中创建、修改或删除适当的对象。然后,Tungsten Fabric Control 将找到这些对象并将有关它们的信息提供给 vRouter 代理。然后 vRouter 代理最终可以为容器创建正确配置的接口。这就是 Tungsten Fabric 可以作为 Kubernetes CNI 插件工作的方式。
由于 Tungsten Fabric 和 Kubernetes 是集成的,基于容器的工作负载可以与虚拟机或裸机服务器工作负载相结合。此外,这些环境之间的连接规则都可以在一个地方进行管理。
Tungsten Fabric 嵌套部署
从网络的角度来看,虚拟机和容器对于 Tungsten Fabric 来说几乎是一回事,因此将它们结合起来的部署是可能的。此外,除了 Kubernetes,Tungsten Fabric 还可以与 OpenStack 集成。多亏了这一点,这两个平台可以结合起来。假设我们已经使用 Tungsten Fabric 部署了 OpenStack,但我们想使用容器部署一些工作负载。使用 Tungsten Fabric,我们可以创建所谓的嵌套部署——OpenStack 计算虚拟机,其上部署了 Kubernetes 集群,Tungsten Fabric 作为 CNI 插件。
不需要部署所有 Tungsten 组件,因为它们中的大多数已经在运行并控制 OpenStack 网络。但是,在嵌套 Kubernetes 集群中的一个节点上,最好是 Kubernetes 主节点,我们必须启动 Tungsten Fabric Kube Manager(如上所述)。它将连接到嵌套集群中的 Kubernetes API 服务器和使用 OpenStack 部署的 Tungsten Fabric Config Api 服务器。
最后,Tungsten Fabric CNI 插件及其配置文件必须存在于每个嵌套的 Kubernetes 计算节点上。请注意,Tungsten Fabric vRouter 和 vRouter Agent 都不需要部署在嵌套的 Kubernetes 节点上,因为这些组件已经在 OpenStack 计算节点上运行,并且 Tungsten Fabric CNI 插件可以直接向它们发送请求。

图 3. OpenStack 上的 Kubernetes 与 Tungsten Fabric 网络 (放大)
与 Tungsten Fabric 集成的 Kubernetes 集群的嵌套部署是开始部署基于容器的工作负载的一种简单方法,特别是对于一直使用 OpenStack 管理其虚拟机的企业而言。网络管理员可以使用他们的 Tungsten Fabric 专业知识,而不必掌握新的工具和概念。
翻译链接:Tungsten Fabric as a Kubernetes CNI plugin - Tungsten Fabric
边栏推荐
- 如何编写单元测试用例
- MySQL transaction mvcc principle
- [on February 11, 2022, the latest and most fully available script library collection of the whole network, a total of 23]
- ASP. Net to access directory files outside the project website
- GoLand environment variable configuration
- 自动化的优点有哪些?
- Jianzhi offer 09 realizes queue with two stacks
- Launpad | Basics
- Rules for using init in golang
- China electronic grade sulfur trioxide Market Forecast and investment strategy report (2022 Edition)
猜你喜欢

2022-2028 research and trend analysis report on the global edible essence industry

2022-2028 global small batch batch batch furnace industry research and trend analysis report

After unplugging the network cable, does the original TCP connection still exist?

How do microservices aggregate API documents? This wave of show~

【LeetCode 42】501. Mode in binary search tree

Solve the problem of "Chinese garbled MySQL fields"

Dede plug-in (multi-function integration)

How should PMP learning ideas be realized?

Jianzhi offer 09 realizes queue with two stacks

Markdown syntax
随机推荐
PHP is used to add, modify and delete movie information, which is divided into foreground management and background management. Foreground users can browse information and post messages, and backgroun
2022-2028 global industry research and trend analysis report on anterior segment and fundus OTC detectors
Launchpad x | mode
Research Report on the development trend and Prospect of global and Chinese zinc antimonide market Ⓚ 2022 ~ 2027
lolcat
《网络是怎么样连接的》读书笔记 - FTTH
Write a jison parser from scratch (2/10): learn the correct posture of the parser generator parser generator
[on February 11, 2022, the latest and most fully available script library collection of the whole network, a total of 23]
Global and Chinese market of bipolar generators 2022-2028: Research Report on technology, participants, trends, market size and share
《网络是怎么样连接的》读书笔记 - Tcp/IP连接(二)
2022-2028 global elastic strain sensor industry research and trend analysis report
Luogu deep foundation part 1 Introduction to language Chapter 4 loop structure programming (2022.02.14)
165 webmaster online toolbox website source code / hare online tool system v2.2.7 Chinese version
LeetCode 74. Search 2D matrix
2022-2028 global intelligent interactive tablet industry research and trend analysis report
Reload CUDA and cudnn (for tensorflow and pytorch) [personal sorting summary]
What is permission? What is a role? What are users?
DR6018-CP01-wifi6-Qualcomm-IPQ6010-IPQ6018-FAMILY-2T2R-2.5G-ETH-port-CP01-802-11AX-MU-MIMO-OFDMA
Pueue data migration from '0.4.0' to '0.5.0' versions
Mantis creates users without password options