10.4 Istio CNI插件

对于服务网格Istio中的应用程序pod来说,进出容器的所有流量都需要通过Sidecar代理即istio-proxy容器处理。Istio-cni是一个用于设置pod网络的CNI插件,通过使用这个插件,可以取代当前采用的注入initContainers容器来修改网络配置的方式。现在的istio-init方式中,可通过在pod的netns中配置iptables规则来完成,而且仅限于IPv4。

根据前面的章节介绍,我们知道在当前的Istio设置中,在应用程序pod创建过程中,会创建一个使用NET_ADMIN特权的initContainers容器(即istio-init容器),以及一个Sidecar代理容器(即istio-proxy容器)。这两个容器会一起注入到应用程序容器pod中。Istio CNI插件则是去除了这种在应用程序pod中使用NET_ADMIN特权容器的需要,也就是说通过这个CNI插件,istio-init容器不再需要注入到应用程序容器pod中。

配置进CNI插件链中的每个CNI插件是由容器编排环境按照顺序执行的,对于Kubernetes来说,链中的每个CNI插件是由位于集群每个节点上的kubelet按照一定顺序处理的。Istio CNI插件将处理pod添加操作,并在pod的网络命名空间中创建流量重定向设置。

因为每个节点的kubelet都需要执行Istio CNI插件,所以Istio CNI插件的安装需要在每个节点上配置和部署插件可执行文件。如图10-3所示,istio-node daemonset会在每个节点上安装Istio CNI插件。

图10-3 Istio CNI插件

当Istio CNI插件生效时,Istio用户应用程序的pod将不包含任何initContainers部分。安装Istio CNI插件之后,自动Sidecar注入的配置项conf igmap和istioctl kube-inject模板中将不包含istio-init容器。