10. CNI 插件
Linkerd
的数据平面的工作原理是透明地将所有 TCP
流量路由到每个网格化 Pod
和从每个 网格化 Pod
到其代理。
(请参阅架构文档。)这允许 Linkerd
在应用程序不知情的情况下进行操作。
默认情况下,此重新路由是使用 Init Container 完成的,
该容器在 pod
启动时使用 iptables
为 pod
安装路由规则。
但是,这需要 CAP_NET_ADMIN
功能;并且在某些集群中,此功能未授予 pod
。
为了解决这个问题,Linkerd
可以选择在 CNI 插件
中而不是在 Init Container
中运行这些 iptables
规则。这避免了对 CAP_NET_ADMIN
功能的需要。
安装
使用 Linkerd CNI
插件需要先在集群上成功安装 linkerd-cni
DaemonSet
,
然后再安装 Linkerd
控制平面。
使用 CLI
要安装 linkerd-cni
DaemonSet,请运行:
linkerd install-cni | kubectl apply -f -
一旦 DaemonSet
启动并运行,网格化的 pod
不应再使用 linkerd-init
Init Container
。
为此,请在安装控制平面时使用 --linkerd-cni-enabled
标志:
linkerd install --linkerd-cni-enabled | kubectl apply -f -
使用此选项将在 linkerd-config
ConfigMap 中设置一个 cniEnabled
标志。
代理注入将读取此字段并省略 linkerd-init
初始化容器。
使用 Helm
首先确保您的 Helm
本地缓存已更新:
helm repo update
helm search linkerd2-cni
安装 CNI DaemonSet:
# install the CNI plugin first
helm install linkerd2-cni linkerd2/linkerd2-cni
# ensure the plugin is installed and ready
linkerd check --pre --linkerd-cni-enabled
此时,您已准备好在启用 CNI
的情况下安装 Linkerd
。
按照使用 Helm 安装 Linkerd说明进行操作。
附加配置
linkerd install-cni
命令包括可用于自定义安装的附加标志。
有关更多信息,请参阅 linkerd install-cni --help
。
请注意,许多标志类似于运行 linkerd inject
时可用于配置代理的标志。
如果您在运行 linkerd install-cni
时更改了默认值,
则需要确保在运行 linkerd inject
时进行相应的更改。
最重要的标志是:
--dest-cni-net-dir
: 这是CNI
配置所在节点上的目录。默认为:/etc/cni/net.d
。--dest-cni-bin-dir
: 这是CNI
插件二进制文件所在节点上的目录。它默认为:/opt/cni/bin
。--cni-log-level
: 将此设置为debug
将允许更详细的日志记录。为了查看CNI
插件日志,您必须能够看到kubelet
日志。 一种方法是登录节点并使用journalctl -t kubelet
。字符串linkerd-cni:
可以用作搜索来查找插件日志输出。
升级 CNI 插件
由于 CNI
插件基本上是无状态的,因此不需要单独的 upgrade
命令。
如果您使用 CLI
升级 CNI
插件,您可以执行以下操作:
linkerd install-cni | kubectl apply --prune -l linkerd.io/cni-resource=true -f -