2.11. 启用 sidecar 注入
将包含您的服务的命名空间添加到网格后,下一步是在应用程序的 Deployment 资源中启用自动 sidecar 注入功能。您必须为每个部署启用自动 sidecar 注入。
如果您已安装 Bookinfo 示例应用程序,则会部署应用程序,并作为安装过程的一部分注入 sidecar。如果您使用自己的项目和服务,请在 OpenShift Container Platform 上部署应用程序。
如需更多信息,请参阅 OpenShift Container Platform 文档,了解部署。
通过初始容器启动的流量(在 pod 中应用程序容器之前运行的专用容器)默认无法在服务网格外传输。任何需要在网格外建立网络流量连接的操作初始容器执行都会失败。
有关将初始容器连接到服务的更多信息,请参阅 注入 Service Mesh sidecar 的 pod 中的 CrashLoopBackOff 中的红帽知识库解决方案 initContainer
2.11.1. 先决条件
- 部署到网格中的服务,如 Bookinfo 示例应用程序。
- 部署资源文件。
2.11.2. 启用自动 sidecar 注入
在部署应用程序时,您必须通过将 deployment
对象中的 spec.template.metadata.labels
中的标签 sidecar.istio.io/inject
配置为 true
来选择注入。选择确保 sidecar 注入不会影响 OpenShift Container Platform 的其他功能,如 OpenShift Container Platform 生态系统中的多个框架使用的 builder pod。
先决条件
- 识别作为服务网格一部分的命名空间,以及需要自动 sidecar 注入的部署。
流程
要查找部署,请使用
oc get
命令。$ oc get deployment -n <namespace>
例如,若要查看
info
命名空间中 'ratings-v1' 微服务的Deployment
YAML 文件,请使用以下命令以 YAML 格式查看资源:oc get deployment -n info ratings-v1 -o yaml
-
在编辑器中打开应用程序的
Deployment
YAML 文件。 将
spec.template.metadata.annotations.sidecar.istio/inject
添加到 Deployment YAML 中,并将sidecar.istio.io/inject
设置为true
,如下例所示。info deployment-ratings-v1.yaml 中的代码片段示例
apiVersion: apps/v1 kind: Deployment metadata: name: ratings-v1 namespace: info labels: app: ratings version: v1 spec: template: metadata: labels: sidecar.istio.io/inject: 'true'
注意在启用自动 sidecar 注入时使用
annotations
参数已被弃用,应使用labels
参数替代。-
保存
Deployment
YAML 文件。 将文件添加回包含应用程序的项目。
$ oc apply -n <namespace> -f deployment.yaml
在本例中,
info
是包含ratings-v1
应用程序和deployment-ratings-v1.yaml
的项目的名称,这是您编辑的文件。$ oc apply -n info -f deployment-ratings-v1.yaml
若要验证资源上传成功,请运行以下命令:
$ oc get deployment -n <namespace> <deploymentName> -o yaml
例如,
$ oc get deployment -n info ratings-v1 -o yaml
2.11.3. 验证 sidecar 注入
Kiali 控制台提供了多种方式来验证应用程序、服务和工作负载是否有 sidecar 代理。
图 2.3. 缺少 sidecar badge
Graph 页面显示一个节点徽标,它显示了以下图形中的 Missing Sidecar :
- 应用程序图
- 版本的应用程序图
- 工作负载图
图 2.4. 缺少 sidecar 图标
Applications 页面在没有 sidecar 的命名空间中任何应用程序的 Details 列中显示一个 Missing Sidecar 图标。
Workloads 页面中为没有 sidecar 的任何应用程序的 Details 列中显示一个 Missing Sidecar 图标。
Services 页面在没有 sidecar 的命名空间中任何应用程序的 Details 列中显示一个 Missing Sidecar 图标。当服务有多个版本时,您可以使用 Service Details 页面查看 Missing Sidecar 图标。
Workload Details 页面有一个特殊的统一 Logs 选项卡,可让您查看和关联应用程序和代理日志。您可以将 Envoy 日志视为验证应用程序工作负载的 sidecar 注入的另一种方式是查看。
Workload Details 页面还具有作为 Envoy 代理或被注入 Envoy 代理的任何工作负载的 Envoy 标签页。此选项卡显示内置的 Envoy 仪表板,其中包含 Clusters、Listeners、Routes、Bootstrap、Config 和 Metrics 的子选项卡。
有关启用 Envoy 访问日志的详情,请参考故障排除部分。
有关查看 Envoy 日志的详情,请参考 Kiali 控制台中的日志
2.11.4. 通过注解设置代理环境变量
Envoy sidecar 代理的配置由 ServiceMeshControlPlane
管理。
您可以通过在 injection-template.yaml
文件中的部署中添加 pod 注解来为应用程序设置 sidecar 代理的环境变量。环境变量注入 sidecar。
injection-template.yaml 示例
apiVersion: apps/v1 kind: Deployment metadata: name: resource spec: replicas: 7 selector: matchLabels: app: resource template: metadata: annotations: sidecar.maistra.io/proxyEnv: "{ \"maistra_test_env\": \"env_value\", \"maistra_test_env_2\": \"env_value_2\" }"
在创建自己的自定义资源时,您绝不应包含 maistra.io/
标签和注解。这些标签和注解表示资源由 Operator 生成和管理。如果您在创建自己的资源时从 Operator 生成的资源复制内容,请不要包含以 maistra.io/
开头的标签或注解。在下一个协调过程中,Operator 将覆盖或删除这些标签或注解的资源。
2.11.5. 更新 sidecar 代理
要更新 sidecar 代理的配置,应用程序管理员必须重启应用程序 pod。
如果您的部署使用了自动 sidecar 注入功能,则可以通过添加或修改注解来更新部署中的 pod 模板。运行以下命令来重新部署 pod:
$ oc patch deployment/<deployment> -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt": "'`date -Iseconds`'"}}}}}'
如果您的部署没有使用自动 sidecar 注入功能,则必须通过修改部署或 pod 中指定的 sidecar 容器镜像来手动更新 sidecar,然后重启 pod。
2.11.6. 后续步骤
为您的环境配置 Red Hat OpenShift Service Mesh 功能。