Kubernetes Network Plugins

对于 K8s 系统来说,预留了多个可拓展点,我们就先来看看 CNI 网络拓展点。
How it works
在 CNI 的中定义关于 k8s 对于网络部分的可拓展性定义。
在 plugin.go 中展示了插件的加载逻辑。
而比较重要的是我们的插件是如何真正的工作的,这部分的逻辑显然 k8s 需要和我们自己所构建的 cni 进行通讯,那我们先来看看模板函数
1 | func (plugin *cniNetworkPlugin) SetUpPod(namespace string, name string, id kubecontainer.ContainerID, annotations, options map[string]string) error { |
而我们知道了,对于 k8s 本身来说,我们只是需要调用 插件 的 addToNetwork,而这层的封装是单独放置于 containernetworking-cni 之中的。在分析之前,我们在最初的 k8s 的文档中有涉及到,我们使用 CNI 至少需要
- bin: CNI 的二进制文件
- conf: CNI 的配置文件
而这里的 plugin 在逻辑上也只是 bin 的一层封装。
1 | func (c *CNIConfig) addNetwork(ctx context.Context, name, cniVersion string, net *NetworkConfig, prevResult types.Result, rt *RuntimeConf) (types.Result, error) { |
而本质上,当系统创建了一个新 POD 的时候,k8s 就会通过 Exec 去执行这个 Bin 文件,将上下文对象作为参数传入
