启用 Sidecar 注入

以下操作步骤使用 Bookinfo 应用来说明配置 sidecar 注入的不同方法。

先决条件

  • 已安装 Alauda Service Mesh v2 Operator,已创建 Istio 资源,并且 Operator 已成功部署 Istio。
  • 已创建 IstioCNI 资源,并且 Operator 已部署所需的 IstioCNI pods。
  • 已创建用于 mesh 的命名空间,并且 Istio 控制平面可以发现这些命名空间。
  • 可选:要纳入 mesh 的工作负载已部署。对于后续示例,Bookinfo 应用部署在 bookinfo 命名空间中,但尚未配置 sidecar 注入(如步骤 2 所述)。有关更多详细信息,请参见“部署 Bookinfo 应用”。

使用 Namespace 标签启用 Sidecar 注入

此方法会将 sidecar proxy 注入到给定命名空间中的所有工作负载。对于该命名空间中大多数工作负载都需要加入 mesh 的场景,这是理想的方法。

操作步骤

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

    kubectl get istiorevisions

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

    示例输出

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

    由于 revision 名称是 default,因此可以直接使用标准注入标签,而无需指定具体 revision。

  2. 运行以下命令,确认目标命名空间中现有工作负载显示 1/1 个就绪容器。这可验证这些 pod 当前正在不带 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. 要验证滚动更新,请检查新 pod 是否在 READY 状态下显示 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

将工作负载排除在 Mesh 之外

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

NOTE

此示例仅用于演示。对于 Bookinfo 应用要正常运行,其所有工作负载都必须属于 mesh。

操作步骤

  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 注入。

    当 deployment 更新时,会触发滚动更新,从而创建一个包含已修改 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 注入,而不是为整个命名空间启用注入。此方法最适合仅有少量工作负载需要纳入 service mesh 的场景。示例还展示了如何使用 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.28.6   22s

    由于 revision 名称是 my-mesh,因此必须使用 revision 标签 istio.io/rev=my-mesh 来启用 sidecar 注入。

  2. 通过检查现有 pod 是否在 READY 状态下显示 1/1 个容器,确认这些 pod 运行时未包含 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 注入。

    对 deployment 的此更新会触发滚动更新,从而生成一个包含已更改 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. 按相同流程为你想要加入 mesh 的其他工作负载进行配置。