2.3. 启用 sidecar 注入


要演示配置 sidecar 注入的不同方法,以下流程使用 Bookinfo 应用程序。

先决条件

  • 已安装 Red Hat OpenShift Service Mesh Operator,创建一个 Istio 资源,Operator 已部署 Istio。
  • 您已创建了 IstioCNI 资源,Operator 已部署必要的 IstioCNI pod。
  • 您已创建了作为网格一部分的命名空间,它们可以被 Istio control plane 发现。
  • 可选: 您已部署了要包含在网格中的工作负载。在以下示例中,Bookinfo 已部署到 info 命名空间中,但没有配置 sidecar 注入(第 5 步)。

2.3.1. 使用命名空间标签启用 sidecar 注入

在本例中,一个命名空间中的所有工作负载都收到 sidecar 代理注入,当网格中大多数工作负载应该包括尽力时。

流程

  1. 使用以下命令验证 Istio control plane 的修订名称:

    $ oc get istiorevisions

    您应该看到类似以下示例的输出:

    输出示例

    NAME      TYPE    READY   STATUS    IN USE   VERSION   AGE
    default   Local   True    Healthy   False    v1.23.0   4m57s

    由于修订名称为 default,因此您可以在不引用确切的修订名称的情况下使用默认注入标签。

  2. 使用以下命令,验证在所需命名空间中运行的工作负载是否显示 1/1 容器为 READY。这确认 pod 在没有 sidecar 的情况下运行。

    $ oc get pods -n info

    您应该看到类似以下示例的输出:

    输出示例

    NAME                             READY   STATUS    RESTARTS   AGE
    details-v1-65cfcf56f9-gm6v7      1/1     Running   0          4m55s
    productpage-v1-d5789fdfb-8x6bk   1/1     Running   0          4m53s
    ratings-v1-7c9bd4b87f-6v7hg      1/1     Running   0          4m55s
    reviews-v1-6584ddcf65-6wqtw      1/1     Running   0          4m54s
    reviews-v2-6f85cb9b7c-w9l8s      1/1     Running   0          4m54s
    reviews-v3-6f5b775685-mg5n6      1/1     Running   0          4m54s

  3. 要将注入标签应用到 info 命名空间,请在 CLI 中运行以下命令:

    $ oc label namespace info istio-injection=enabled
    namespace/info labeled
  4. 为确保应用 sidecar 注入,请重新部署 info 命名空间中的现有工作负载。使用以下命令对所有工作负载执行滚动更新:

    $ oc -n info rollout restart deployments

验证

  1. 运行以下命令,检查新 pod 是否显示 2/2 容器为 READY 来验证推出部署:

    $ oc get pods -n info

    您应该看到类似以下示例的输出:

    输出示例

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-7745f84ff-bpf8f        2/2     Running   0          55s
    productpage-v1-54f48db985-gd5q9   2/2     Running   0          55s
    ratings-v1-5d645c985f-xsw7p       2/2     Running   0          55s
    reviews-v1-bd5f54b8c-zns4v        2/2     Running   0          55s
    reviews-v2-5d7b9dbf97-wbpjr       2/2     Running   0          55s
    reviews-v3-5fccc48c8c-bjktn       2/2     Running   0          55sz

2.3.2. 从网格中排除工作负载

您可以从为所有工作负载启用注入的命名空间中的 sidecar 注入中排除特定的工作负载。

注意

这个示例仅用于演示目的。info 应用程序需要所有工作负载作为网格的一部分,才能正常工作。

流程

  1. 在编辑器中打开应用程序的 Deployment 资源。在本例中,排除 ratings-v1 服务。
  2. 修改 Deployment 资源的 spec.template.metadata.labels 部分,使其包含标签 sidecar.istio.io/inject: false 来禁用 sidecar 注入。

    kind: Deployment
    apiVersion: apps/v1
    metadata:
    name: ratings-v1
    namespace: info
    labels:
      app: ratings
      version: v1
    spec:
      template:
        metadata:
          labels:
            sidecar.istio.io/inject: 'false'
    注意

    Deployment 的顶层 labels 部分添加标签不会影响 sidecar 注入。

    更新部署会触发推出部署,创建一个带有更新的 pod 的新 ReplicaSet。

验证

  1. 运行以下命令,验证更新的 pod 不包含 sidecar 容器,并将 1/1 容器显示为 Running

    $ oc get pods -n info

    您应该看到类似以下示例的输出:

    输出示例

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-6bc7b69776-7f6wz       2/2     Running   0          29m
    productpage-v1-54f48db985-gd5q9   2/2     Running   0          29m
    ratings-v1-5d645c985f-xsw7p       1/1     Running   0          7s
    reviews-v1-bd5f54b8c-zns4v        2/2     Running   0          29m
    reviews-v2-5d7b9dbf97-wbpjr       2/2     Running   0          29m
    reviews-v3-5fccc48c8c-bjktn       2/2     Running   0          29m

2.3.3. 使用 pod 标签启用 sidecar 注入

这个方法允许您包括单个工作负载进行 sidecar 注入,而不是将其应用到命名空间中的所有工作负载,这适用于只有几个工作负载作为服务网格的一部分的情况。本例还演示了在 sidecar 注入中使用修订标签,其中 Istio 资源使用名称 my-mesh 创建。当多个 Istio control plane 存在于同一集群中或基于修订的 control plane 升级过程中时,需要一个唯一的 Istio 资源名称。

流程

  1. 运行以下命令,验证 Istio control plane 的修订名称:

    $ oc get istiorevisions

    您应该看到类似以下示例的输出:

    输出示例

    NAME      TYPE    READY   STATUS    IN USE   VERSION   AGE
    my-mesh   Local   True    Healthy   False    v1.23.0   47s

    由于修订名称为 my-mesh,因此请使用修订标签 istio.io/rev=my-mesh 启用 sidecar 注入。

  2. 运行以下命令,验证工作负载已经运行 1/1 容器为 READY,表明 pod 正在运行而没有 sidecar:

    $ oc get pods -n info

    您应该看到类似以下示例的输出:

    输出示例

    NAME                             READY   STATUS    RESTARTS   AGE
    details-v1-65cfcf56f9-gm6v7      1/1     Running   0          4m55s
    productpage-v1-d5789fdfb-8x6bk   1/1     Running   0          4m53s
    ratings-v1-7c9bd4b87f-6v7hg      1/1     Running   0          4m55s
    reviews-v1-6584ddcf65-6wqtw      1/1     Running   0          4m54s
    reviews-v2-6f85cb9b7c-w9l8s      1/1     Running   0          4m54s
    reviews-v3-6f5b775685-mg5n6      1/1     Running   0          4m54s

  3. 在编辑器中打开应用程序的 Deployment 资源。在本例中,更新 ratings-v1 服务。
  4. 更新 Deploymentspec.template.metadata.labels 部分,使其包含适当的 pod 注入或修订标签。在本例中,istio.io/rev: my-mesh:

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

    Deployment 的顶层 'labels 部分添加标签 不会影响 sidecar 注入。

    更新部署会触发推出部署,使用更新的 pod 创建新 ReplicaSet。

验证

  1. 验证 ratings-v1 pod 现在显示 2/2 容器 READY,表示 sidecar 已成功注入:

    $ oc get pods -n info

    您应该看到类似以下示例的输出:

    输出示例

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-559cd49f6c-b89hw       1/1     Running   0          42m
    productpage-v1-5f48cdcb85-8ppz5   1/1     Running   0          42m
    ratings-v1-848bf79888-krdch       2/2     Running   0          9s
    reviews-v1-6b7444ffbd-7m5wp       1/1     Running   0          42m
    reviews-v2-67876d7b7-9nmw5        1/1     Running   0          42m
    reviews-v3-84b55b667c-x5t8s       1/1     Running   0          42m

  2. 对您要包含在网格中的其他工作负载重复此操作。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.