网络插件
Kubernetes(版本 1.3 到最新的 1.35,以及未来版本)允许您使用 容器网络接口 (CNI) 插件进行集群网络。您必须使用与您的集群兼容且满足您需求的 CNI 插件。更广泛的 Kubernetes 生态系统中提供了各种插件(开源和闭源)。
CNI 插件需要实现 Kubernetes 网络模型。
您必须使用与 CNI 规范的 v0.4.0 或更高版本兼容的 CNI 插件。Kubernetes 项目建议使用与 v1.0.0 CNI 规范兼容的插件(插件可以与多个规范版本兼容)。
安装
在网络上下文中,容器运行时是配置为为 kubelet 提供 CRI 服务的节点上的守护程序。特别是,容器运行时必须配置为加载实现 Kubernetes 网络模型所需的 CNI 插件。
说明
在 Kubernetes 1.24 之前,CNI 插件也可以由 kubelet 使用 cni-bin-dir 和 network-plugin 命令行参数进行管理。这些命令行参数已在 Kubernetes 1.24 中删除,CNI 的管理不再属于 kubelet 的范围。
如果您在删除 dockershim 后遇到问题,请参阅 故障排除 CNI 插件相关错误。
有关容器运行时如何管理 CNI 插件的具体信息,请参阅该容器运行时的文档,例如
有关如何安装和管理 CNI 插件的具体信息,请参阅该插件的文档或 网络提供商。
网络插件要求
Loopback CNI
除了安装在节点上的 CNI 插件以实现 Kubernetes 网络模型之外,Kubernetes 还要求容器运行时为每个沙箱(pod 沙箱、vm 沙箱等)提供环回接口 lo。可以通过重用 CNI loopback 插件 或通过开发您自己的代码来实现此目的(请参阅 CRI-O 的此示例)。
支持 hostPort
CNI 网络插件支持 hostPort。您可以使用 CNI 插件团队提供的官方 portmap 插件,或使用具有端口映射功能的您自己的插件。
如果您想启用 hostPort 支持,则必须在您的 cni-conf-dir 中指定 portMappings capability。例如
{
"name": "k8s-pod-network",
"cniVersion": "0.4.0",
"plugins": [
{
"type": "calico",
"log_level": "info",
"datastore_type": "kubernetes",
"nodename": "127.0.0.1",
"ipam": {
"type": "host-local",
"subnet": "usePodCidr"
},
"policy": {
"type": "k8s"
},
"kubernetes": {
"kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true},
"externalSetMarkChain": "KUBE-MARK-MASQ"
}
]
}
支持流量整形
实验特性
CNI 网络插件还支持 pod 入站和出站流量整形。您可以使用 CNI 插件团队提供的官方 bandwidth 插件,或使用具有带宽控制功能的您自己的插件。
如果您想启用流量整形支持,则必须将 bandwidth 插件添加到您的 CNI 配置文件(默认 /etc/cni/net.d),并确保该二进制文件包含在您的 CNI bin 目录中(默认 /opt/cni/bin)。
{
"name": "k8s-pod-network",
"cniVersion": "0.4.0",
"plugins": [
{
"type": "calico",
"log_level": "info",
"datastore_type": "kubernetes",
"nodename": "127.0.0.1",
"ipam": {
"type": "host-local",
"subnet": "usePodCidr"
},
"policy": {
"type": "k8s"
},
"kubernetes": {
"kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
}
},
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
}
]
}
现在您可以将 kubernetes.io/ingress-bandwidth 和 kubernetes.io/egress-bandwidth 注解添加到您的 Pod。例如
apiVersion: v1
kind: Pod
metadata:
annotations:
kubernetes.io/ingress-bandwidth: 1M
kubernetes.io/egress-bandwidth: 1M
...
接下来
- 了解更多关于 集群网络
- 了解更多关于 网络策略
- 了解关于 故障排除 CNI 插件相关错误