启用 Sidecar 注入

以下操作步骤使用 Bookinfo 应用程序演示配置 sidecar 注入的各种方法。

目录

前提条件

  • 已安装 Alauda Service Mesh v2 Operator,已创建 Istio 资源,且 Operator 已成功部署 Istio。
  • 已创建 IstioCNI 资源,Operator 已部署所需的 IstioCNI pods。
  • 计划加入网格的命名空间已创建,并且 Istio 控制平面能够发现它们。
  • 可选:计划加入网格的工作负载已部署。以下示例中,Bookinfo 应用部署在 bookinfo 命名空间,但尚未配置 sidecar 注入(如步骤 2 所述)。详情请参见“部署 Bookinfo 应用”。

使用命名空间标签启用 Sidecar 注入

此方法会向指定命名空间内的所有工作负载注入 sidecar 代理。当该命名空间中大多数工作负载都需要加入网格时,这是理想的做法。

操作步骤

  1. 使用以下命令检查 Istio 控制平面的 revision 名称:

    kubectl get istiorevisions

    你应看到类似如下示例的输出:

    示例输出

    NAME      NAMESPACE      PROFILE   READY   STATUS    IN USE   VERSION   AGE
    default   istio-system             True    Healthy   False    v1.26.3   2m

    由于 revision 名称为 default,可以使用标准注入标签,无需指定具体 revision。

  2. 通过运行以下命令确认目标命名空间中现有工作负载显示 1/1 就绪容器,验证 pods 当前运行且未注入 sidecar。

    kubectl get pods -n bookinfo

    你应看到类似如下示例的输出:

    示例输出

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-c66556f6d-6zldd        1/1     Running   0          3m42s
    productpage-v1-5f568ff46d-kx7nn   1/1     Running   0          3m42s
    ratings-v1-74bcfcb96d-jp4xk       1/1     Running   0          3m42s
    reviews-v1-549bfb5f44-sv2n9       1/1     Running   0          3m42s
    reviews-v2-6486bc9868-56h7n       1/1     Running   0          3m42s
    reviews-v3-6c66dc6cdd-vmczd       1/1     Running   0          3m42s
  3. 通过执行以下命令为 bookinfo 命名空间添加注入标签:

    kubectl label namespace bookinfo istio-injection=enabled

    示例输出

    namespace/bookinfo labeled
  4. 为应用 sidecar 注入,重新部署 bookinfo 命名空间中的工作负载。使用以下命令对所有 Deployment 进行滚动更新:

    kubectl -n bookinfo rollout restart deployments

验证

  1. 通过检查新 pods 显示 2/2 就绪容器,确认 sidecar 注入成功。使用以下命令:

    kubectl get pods -n bookinfo

    你应看到类似如下示例的输出:

    示例输出

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-85c7fcfd5b-hftlt       2/2     Running   0          31s
    productpage-v1-775ffc67d8-482s6   2/2     Running   0          31s
    ratings-v1-6c79fdf684-d7jmn       2/2     Running   0          31s
    reviews-v1-685fb87cb6-rch6v       2/2     Running   0          31s
    reviews-v2-76c4659bc6-vjcd8       2/2     Running   0          31s
    reviews-v3-f7b4c8678-zdnm7        2/2     Running   0          31s

从网格中排除某个工作负载

即使为整个命名空间启用了注入,也可以阻止特定工作负载进行 sidecar 注入。

NOTE

此示例仅作演示。要使 Bookinfo 应用正常工作,其所有工作负载必须加入网格。

操作步骤

  1. 编辑应用的 Deployment 资源。此处示例排除 ratings-v1 服务。

    kubectl -n bookinfo edit deployments ratings-v1
  2. Deploymentspec.template.metadata.labels 部分添加标签 sidecar.istio.io/inject: "false",以禁用 sidecar 注入。

    kind: Deployment
    apiVersion: apps/v1
    metadata:
    name: ratings-v1
    namespace: bookinfo
    labels:
      app: ratings
      version: v1
    spec:
      template:
        metadata:
          labels:
            sidecar.istio.io/inject: "false"
    NOTE

    如果将该标签添加到 Deployment 的顶层 labels 部分,sidecar 注入过程不会受到影响。

    更新部署后,将触发滚动更新,创建包含修改后 pod 的新 ReplicaSet。

验证

  1. 通过执行以下命令确认更新后的 pod 不包含 sidecar 容器,且显示 1/1 运行中容器:

    kubectl get pods -n bookinfo

    你应看到类似如下示例的输出:

    示例输出

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-85c7fcfd5b-hftlt       2/2     Running   0          4m7s
    productpage-v1-775ffc67d8-482s6   2/2     Running   0          4m7s
    ratings-v1-7988b9b7f4-7hdwm       1/1     Running   0          16s
    reviews-v1-685fb87cb6-rch6v       2/2     Running   0          4m7s
    reviews-v2-76c4659bc6-vjcd8       2/2     Running   0          4m7s
    reviews-v3-f7b4c8678-zdnm7        2/2     Running   0          4m7s

使用 Pod 标签启用 Sidecar 注入

此方法允许选择单个工作负载进行 sidecar 注入,而不是为整个命名空间启用。适用于仅需少量工作负载加入服务网格的场景。示例中还展示了如何使用 revision 标签进行 sidecar 注入,假设 Istio 资源名为 my-mesh。当集群中存在多个 Istio 控制平面或基于 revision 的控制平面升级时,需使用不同的 Istio 资源名称。

操作步骤

  1. 运行以下命令检查 Istio 控制平面的 revision 名称:

    kubectl get istiorevisions

    你应看到类似如下示例的输出:

    示例输出

    NAME      NAMESPACE      PROFILE   READY   STATUS    IN USE   VERSION   AGE
    my-mesh   istio-system             True    Healthy   False    v1.26.3   22s

    由于 revision 名称为 my-mesh,必须使用标签 istio.io/rev=my-mesh 来激活 sidecar 注入。

  2. 通过检查 pods 显示 1/1 就绪容器,确认现有 pods 运行且未注入 sidecar。使用以下命令:

    kubectl get pods -n bookinfo

    你应看到类似如下示例的输出:

    示例输出

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-85c7fcfd5b-8kzrc       1/1     Running   0          74s
    productpage-v1-775ffc67d8-rtbxj   1/1     Running   0          74s
    ratings-v1-6c79fdf684-ntzdr       1/1     Running   0          74s
    reviews-v1-685fb87cb6-l9fvr       1/1     Running   0          74s
    reviews-v2-76c4659bc6-7gt2l       1/1     Running   0          74s
    reviews-v3-f7b4c8678-lw59c        1/1     Running   0          74s
  3. 编辑应用的 Deployment 资源。此处示例修改 ratings-v1 服务。

    kubectl -n bookinfo edit deployments ratings-v1
  4. Deploymentspec.template.metadata.labels 部分添加所需的 pod 注入或 revision 标签,此处为 istio.io/rev: my-mesh

    kind: Deployment
    apiVersion: apps/v1
    metadata:
    name: ratings-v1
    namespace: bookinfo
    labels:
      app: ratings
      version: v1
    spec:
      template:
        metadata:
          labels:
            istio.io/rev: my-mesh
    NOTE

    将标签放在 Deployment 资源的顶层 labels 部分不会影响 sidecar 注入。

    更新部署后,将触发滚动更新,创建包含修改后 pod 的新 ReplicaSet。

验证

  1. 通过确认只有 ratings-v1 pod 显示 2/2 就绪容器,验证 sidecar 注入成功。运行以下命令:

    kubectl get pods -n bookinfo

    你应看到类似如下示例的输出:

    示例输出

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-85c7fcfd5b-8kzrc       1/1     Running   0          2m29s
    productpage-v1-775ffc67d8-rtbxj   1/1     Running   0          2m29s
    ratings-v1-86d864565d-g8sqw       2/2     Running   0          17s
    reviews-v1-685fb87cb6-l9fvr       1/1     Running   0          2m29s
    reviews-v2-76c4659bc6-7gt2l       1/1     Running   0          2m29s
    reviews-v3-f7b4c8678-lw59c        1/1     Running   0          2m29s
  2. 对其他需要加入网格的工作负载重复相同步骤。