自动代理注入
当 namespace
或任何 workload
(例如 deployments
或 pod
)上存在 linkerd.io/inject: enabled
注释时,Linkerd
会自动将数据平面代理添加到 Pod
。这称为 “代理注入”。
有关如何在实践中使用此功能的演练,请参阅添加你的服务。
代理注入也是代理配置发生的地方。虽然很少需要,但您可以通过在注入之前在资源级别设置额外的
Kubernetes annotations
来配置代理设置。查看代理配置选项的完整列表。
细节
代理注入作为 Kubernetes 准入 webhook 实现。这意味着代理会添加到 Kubernetes
集群本身内的 pod
中,而不管 pod
是由 kubectl
、CI/CD
系统还是任何其他系统创建的。
对于每个 pod
,注入两个容器:
linkerd-init
,一个Kubernetes
Init Container,它配置iptables
以通过代理自动转发所有传入和传出的TCP
流量。(请注意,如果 Linkerd CNI 插件已启用,则此容器不存在。)linkerd-proxy
,Linkerd 数据平面 代理本身。
请注意,简单地将 annotation
添加到具有预先存在的 pod
的资源不会自动注入这些 pod
。您将需要更新 pod
(例如使用 kubectl rollout restart
等)以便注入它们。
这是因为 Kubernetes
在需要更新底层资源之前不会调用 webhook
。
覆盖注入
通过添加 linkerd.io/inject: disabled
annotation
,可以为 pod
或 deployment
禁用自动注入,否则将为其启用。
手动注入
linkerd inject
CLI
命令是一个文本转换,默认情况下,它只是将 inject
annotation 添加到给定的 Kubernetes
清单。
或者,这个命令也可以使用 --manual
标志在客户端执行完全注入。这是 Linked2.4
之前的默认行为;但是,向集群侧注入数据可以更容易地确保数据平面始终存在并正确配置,而不管 pod
是如何部署的。
有关更多信息,请参阅linkerd inject
reference。