1.10. 启用 sidecar 注入

将包含您的服务的命名空间添加到网格后,下一步是在应用程序的 Deployment 资源中启用自动 sidecar 注入功能。您必须为每个部署启用自动 sidecar 注入。

如果您已安装 Bookinfo 示例应用程序,则会部署应用程序,并作为安装过程的一部分注入 sidecar。如果您使用自己的项目和服务,请在 OpenShift Container Platform 上部署应用程序。

如需更多信息,请参阅 OpenShift Container Platform 文档,了解 Deployment 和 DeploymentConfig 对象

注意

通过初始容器启动的流量(在 pod 中应用程序容器之前运行的专用容器)默认无法在服务网格外传输。任何需要在网格外建立网络流量连接的操作初始容器执行都会失败。

有关将初始容器连接到服务的更多信息,请参阅 注入 Service Mesh sidecar 的 pod 中的 CrashLoopBackOff 中的红帽知识库解决方案 initContainer

1.10.1. 先决条件

1.10.2. 启用自动 sidecar 注入

在部署应用程序时,您必须通过将 spec.template.metadata.annotations 中的 spec.template.metadata.annotations 中的注解 sidecar.istio.io/inject 配置为 true 来选择 注入。选择确保 sidecar 注入不会影响 OpenShift Container Platform 的其他功能,如 OpenShift Container Platform 生态系统中的多个框架使用的 builder pod。

先决条件

  • 识别作为服务网格一部分的命名空间,以及需要自动 sidecar 注入的部署。

流程

  1. 要查找部署,请使用 oc get 命令。

    $ oc get deployment -n <namespace>

    例如,若要查看 info 命名空间中 'ratings-v1' 微服务的部署文件,请使用以下命令以 YAML 格式查看资源:

    oc get deployment -n info ratings-v1 -o yaml
  2. 在编辑器中打开应用程序的部署配置 YAML 文件。
  3. 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:
          annotations:
            sidecar.istio.io/inject: 'true'

  4. 保存部署配置文件。
  5. 将文件添加回包含应用程序的项目。

    $ oc apply -n <namespace> -f deployment.yaml

    在本例中,info 是包含 ratings-v1 应用程序和 deployment-ratings-v1.yaml 的项目的名称,这是您编辑的文件。

    $ oc apply -n info -f deployment-ratings-v1.yaml
  6. 若要验证资源上传成功,请运行以下命令:

    $ oc get deployment -n <namespace> <deploymentName> -o yaml

    例如,

    $ oc get deployment -n info ratings-v1 -o yaml

1.10.3. 验证 sidecar 注入

Kiali 控制台提供了多种方式来验证应用程序、服务和工作负载是否有 sidecar 代理。

图 1.3. 缺少 sidecar badge

Graph 页面显示一个节点徽标,它显示了以下图形中的 Missing Sidecar

  • 应用程序图
  • 版本的应用程序图
  • 工作负载图

图 1.4. 缺少 sidecar 图标

缺少 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 仪表板,其中包含 ClustersListenersRoutesBootstrapConfigMetrics 的子选项卡。

有关启用 Envoy 访问日志的详情,请参考故障排除部分

有关查看 Envoy 日志的详情,请参考 Kiali 控制台中的日志

1.10.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 将覆盖或删除这些标签或注解的资源。

1.10.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。

1.10.6. 后续步骤

为您的环境配置 Red Hat OpenShift Service Mesh 功能。