OpenShift Service Mesh 3.0 is a Technology Preview feature only
Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. This documentation is a work in progress and might not be complete or fully tested.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
- 对您要包含在网格中的其他工作负载重复此操作。