网络插件
Kubernetes 1.30 支持使用 容器网络接口 (CNI) 插件进行集群网络连接。您必须使用与您的集群兼容并且满足您需求的 CNI 插件。在更广泛的 Kubernetes 生态系统中,可以使用不同的插件(开源和闭源)。
需要使用 CNI 插件来实现 Kubernetes 网络模型。
您必须使用与 v0.4.0 或更高版本的 CNI 规范兼容的 CNI 插件。Kubernetes 项目建议使用与 v1.0.0 CNI 规范兼容的插件(插件可以与多个规范版本兼容)。
安装
在网络环境中,容器运行时是节点上的一个守护进程,配置为为 kubelet 提供 CRI 服务。特别是,必须将容器运行时配置为加载实现 Kubernetes 网络模型所需的 CNI 插件。
注意
在 Kubernetes 1.24 之前,还可以使用 cni-bin-dir
和 network-plugin
命令行参数由 kubelet 管理 CNI 插件。这些命令行参数在 Kubernetes 1.24 中被移除,CNI 的管理不再属于 kubelet 的范围。
如果您在移除 dockershim 后遇到问题,请参阅 CNI 插件相关错误的故障排除。
有关容器运行时如何管理 CNI 插件的具体信息,请参阅该容器运行时的文档,例如
有关如何安装和管理 CNI 插件的具体信息,请参阅该插件或 网络提供商 的文档。
网络插件要求
环回 CNI
除了安装在节点上用于实现 Kubernetes 网络模型的 CNI 插件之外,Kubernetes 还要求容器运行时提供环回接口 lo
,该接口用于每个沙箱(Pod 沙箱、虚拟机沙箱等)。实现环回接口可以通过重复使用 CNI 环回插件 或开发您自己的代码来实现(请参阅 CRI-O 中的此示例)。
支持 hostPort
CNI 网络插件支持 hostPort
。您可以使用 CNI 插件团队提供的官方 portmap 插件,也可以使用您自己的具有端口映射功能的插件。
如果要启用 hostPort
支持,必须在 cni-conf-dir
中指定 portMappings 功能
。例如
{
"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 插件相关错误的故障排除