9. 自动代理注入

namespace 或任何 workload(例如 deploymentspod)上存在 linkerd.io/inject: enabled 注释时, Linkerd 会自动将数据平面代理添加到 Pod。这称为“代理注入”

有关如何在实践中使用此功能的演练,请参阅添加你的服务

细节

代理注入作为 Kubernetes 准入 webhook 实现。 这意味着代理会添加到 Kubernetes 集群本身内的 pod 中,而不管 pod 是由 kubectlCI/CD 系统还是任何其他系统创建的。

对于每个 pod,注入两个容器:

  1. linkerd-init,一个 Kubernetes Init Container, 它配置 iptables 以通过代理自动转发所有传入和传出的 TCP 流量。(请注意,如果 Linkerd CNI 插件已启用,则此容器不存在。)
  2. linkerd-proxy,Linkerd 数据平面 代理本身。

请注意,简单地将 annotation 添加到具有预先存在的 pod 的资源不会自动注入这些 pod。 您将需要更新 pod(例如使用 kubectl rollout restart 等)以便注入它们。 这是因为 Kubernetes 在需要更新底层资源之前不会调用 webhook

覆盖注入

通过添加 linkerd.io/inject: disabled annotation, 可以为 poddeployment 禁用自动注入,否则将为其启用。

手动注入

linkerd inject CLI 命令是一个文本转换, 默认情况下,它只是将 inject annotation 添加到给定的 Kubernetes 清单。

或者,这个命令也可以使用 --manual 标志在客户端执行完全注入。 这是 Linked2.4 之前的默认行为; 但是,向集群侧注入数据可以更容易地确保 数据平面始终存在并正确配置,而不管 pod 是如何部署的。

有关更多信息,请参阅linkerd inject reference