Anthos Service Mesh 使用 Sidecar 代理来增强网络安全性、可靠性和可观测性。这些功能从应用的主容器中抽象出来,并在作为同一 pod 中单独的容器提供的常见进程外代理 (Sidecar) 中实现。这可提供 Anthos Service Mesh 的功能,而无需重新设计生产应用以参与服务网格。
当 Anthos Service Mesh 检测到为工作负载 pod 配置的命名空间标签时,便会自动进行边车代理注入(自动注入)。该代理会拦截工作负载的所有入站和出站流量,并与 Anthos Service Mesh 通信。
启用自动 Sidecar 注入
虽然可以手动更新 pod 的 Kubernetes 配置,但注入 Sidecar 代理的推荐方法是使用基于网络钩子的自动 Sidecar 注入器。如需启用自动注入功能,您必须向命名空间添加修订版本标签。您添加的标签取决于您是部署了 Anthos Service Mesh Google 管理的控制层面,还是安装了集群内控制层面。Sidecar 注入器 Webhook 会使用修订版本标签将注入的 Sidecar 与特定控制层面修订版本相关联。
如需启用自动注入,请运行以下命令:
集群内
使用以下命令查找
istiod
的修订版本标签:kubectl -n istio-system get pods -l app=istiod --show-labels
输出类似于以下内容:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-198-6-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=5788d57586 istiod-asm-198-6-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=5788d57586
在输出中的
LABELS
列下,记下istiod
修订版本标签的值,该值位于前缀istio.io/rev=
之后。在此示例中,该值为asm-198-6
。将修订版本标签应用于命名空间,并移除 istio-injection 标签(如果存在)。在以下命令中,
NAMESPACE
是您要启用自动注入的命名空间的名称,REVISION
是您在上一步中记下的修订版本标签。kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
您可以忽略输出中的
"istio-injection not found"
消息。这意味着命名空间之前没有istio-injection
标签,对于 Anthos Service Mesh 的新安装或新部署,这是预期现象。如果命名空间同时具有istio-injection
和修订版本标签,自动注入将失败,因此 Anthos Service Mesh 文档中的所有kubectl label
命令都包含移除istio-injection
标签。按照下一部分中的步骤重启受影响的 pod。
由 Google 管理
将以下修订版本标签应用于命名空间,并移除
istio-injection
标签(如果存在)。在以下命令中,将NAMESPACE
替换为要启用自动注入的命名空间的名称:kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-managed --overwrite
您可以忽略输出中的
"istio-injection not found"
消息。这意味着命名空间之前没有istio-injection
标签,对于 Anthos Service Mesh 的新安装或新部署,这是预期现象。如果命名空间同时具有istio-injection
和修订版本标签,自动注入将失败,因此 Anthos Service Mesh 文档中的所有kubectl label
命令都包含移除istio-injection
标签。按照下一部分中的步骤重启受影响的 pod。
重启 pod 以更新 Sidecar 代理
借助自动 Sidecar 注入,您可以通过 pod 重启来更新现有 pod 的 Sidecar:
如何重启 pod 取决于 pod 是否在 Deployment 中创建。
如果您使用了 Deployment,请重启 Deployment,这会重启所有安装了 Sidecar 的 pod:
kubectl rollout restart deployment -n YOUR_NAMESPACE
如果您未使用 Deployment,请删除 Pod,系统会自动重新创建 Pod 及其 Sidecar:
kubectl delete pod -n YOUR_NAMESPACE --all
检查命名空间中的所有 Pod 是否都已注入 Sidecar:
kubectl get pod -n YOUR_NAMESPACE
在上一个命令的以下示例输出中,注意
READY
列表示每个工作负载均有两个容器:主容器和边车代理的容器。NAME READY STATUS RESTARTS AGE YOUR_WORKLOAD 2/2 Running 0 20s ...
后续步骤
详细了解以下内容: