2

Istio 学习笔记:Istio CNI 插件

 2 years ago
source link: https://www.servicemesher.com/blog/istio-cni-note/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Istio 学习笔记:Istio CNI 插件 · Service Mesh|服务网格中文社区

2019年4月9日 | 作者 陈鹏 | 1100字 | 阅读大约需要3分钟

当前实现将用户 pod 流量转发到 proxy 的默认方式是使用 privileged 权限的 istio-init 这个 init container 来做的(运行脚本写入 iptables),Istio CNI 插件的主要设计目标是消除这个 privileged 权限的 init container,换成利用 k8s CNI 机制来实现相同功能的替代方案

  • Istio CNI Plugin 不是 istio 提出类似 k8s CNI 的插件扩展机制,而是 k8s CNI 的一个具体实现
  • k8s CNI 插件是一条链,在创建和销毁pod的时候会调用链上所有插件来安装和卸载容器的网络,istio CNI Plugin 即为 CNI 插件的一个实现,相当于在创建销毁pod这些hook点来针对istio的pod做网络配置:写入iptables,让该 pod 所在的 network namespace 的网络流量转发到 proxy 进程
  • 当然也就要求集群启用 CNI,kubelet 启动参数: --network-plugin=cni (该参数只有两个可选项:kubenet, cni
  • 运行一个名为 istio-cni-node 的 daemonset 运行在每个节点,用于安装 istio CNI 插件
  • 该 CNI 插件负责写入 iptables 规则,让用户 pod 所在 netns 的流量都转发到这个 pod 中 proxy 的进程
  • 当启用 istio cni 后,sidecar 的自动注入或istioctl kube-inject将不再注入 initContainers (istio-init)

istio-cni-node 工作流程

  • 复制 Istio CNI 插件二进制程序到CNI的bin目录(即kubelet启动参数--cni-bin-dir指定的路径,默认是/opt/cni/bin
  • 使用istio-cni-node自己的ServiceAccount信息为CNI插件生成kubeconfig,让插件能与apiserver通信(ServiceAccount信息会被自动挂载到/var/run/secrets/kubernetes.io/serviceaccount)
  • 生成CNI插件的配置并将其插入CNI配置插件链末尾(CNI的配置文件路径是kubelet启动参数--cni-conf-dir所指定的目录,默认是/etc/cni/net.d
  • watch CNI 配置(cni-conf-dir),如果检测到被修改就重新改回来
  • watch istio-cni-node 自身的配置(configmap),检测到有修改就重新执行CNI配置生成与下发流程(当前写这篇文章的时候是istio 1.1.1,还没实现此功能)
0 comments

Be the first person to leave a comment!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK