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 代理注入,当网格中大多数工作负载应该包括尽力时。
流程
使用以下命令验证 Istio control plane 的修订名称:
$ oc get istiorevisions
您应该看到类似以下示例的输出:
输出示例
NAME TYPE READY STATUS IN USE VERSION AGE default Local True Healthy False v1.23.0 4m57s
由于修订名称为 default,因此您可以在不引用确切的修订名称的情况下使用默认注入标签。
使用以下命令,验证在所需命名空间中运行的工作负载是否显示
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
要将注入标签应用到
info
命名空间,请在 CLI 中运行以下命令:$ oc label namespace info istio-injection=enabled namespace/info labeled
为确保应用 sidecar 注入,请重新部署
info
命名空间中的现有工作负载。使用以下命令对所有工作负载执行滚动更新:$ oc -n info rollout restart deployments
验证
运行以下命令,检查新 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 应用程序需要所有工作负载作为网格的一部分,才能正常工作。
流程
-
在编辑器中打开应用程序的
Deployment
资源。在本例中,排除ratings-v1
服务。 修改
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。
验证
运行以下命令,验证更新的 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 资源名称。
流程
运行以下命令,验证 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 注入。运行以下命令,验证工作负载已经运行
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
-
在编辑器中打开应用程序的
Deployment
资源。在本例中,更新ratings-v1
服务。 更新
Deployment
的spec.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。
验证
验证 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
- 对您要包含在网格中的其他工作负载重复此操作。