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
文件,将上下文对象作为参数传入