主要观点:
- CNI 是云原生计算基金会采用的规范和库组合,用于将容器运行时与网络实现解耦,解决了容器网络不一致的问题。
- CNI 插件需实现 ADD 和 DEL 函数,ADD 函数在容器/ pod 启动时执行网络设置任务,如创建 veth 对、移动接口到容器网络命名空间、分配 IP 等;DEL 函数在容器/ pod 停止时删除主机侧 veth 接口。
- 通过示例展示了如何创建简单的自定义 CNI 插件,包括在 Go 项目中编写插件代码、构建插件二进制文件、在 KIND 集群中安装和配置插件、创建 Pod 并验证插件的 IP 分配功能等。
关键信息:
- CNI 之前容器网络不一致,不同运行时有不同的网络解决方案,Kubernetes 增长后需要标准化网络设置方式。
- CNI 插件实现的 ADD 函数步骤:获取环境变量、生成临时接口名、创建 veth 对、移动接口到容器网络命名空间、重命名接口、启动主机和容器接口、分配 IP 地址。
- CNI 插件实现的 DEL 函数步骤:获取容器接口的 iflink、获取主机网络接口、匹配并删除主机侧 veth 接口。
- 在 KIND 集群中创建 CNI 相关目录,复制插件二进制文件和网络配置文件,设置文件权限,创建 Pod 并验证插件功能。
重要细节:
- CNI 规范版本在配置文件中指定,name 字段用于 Kubernetes 调用插件时的网络名称,type 字段指定运行时调用的二进制文件,ip 字段用于分配给 pod 的 IP 地址。
- 在 KIND 集群创建过程中会安装 CNI,为避免与默认的 KIND CNI 插件冲突,可删除其配置文件。
- 通过各种命令获取容器信息、查看接口和 IP 地址、检查日志等方式来验证 CNI 插件的工作情况。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。