×

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

如果已安装 Bookinfo 示例应用程序,则该应用程序已部署,并且 sidecar 已作为安装过程的一部分注入。如果使用的是您自己的项目和服务,请在 Red Hat OpenShift Service on AWS 上部署您的应用程序。

默认情况下,由 Init Containers(在 Pod 中的应用程序容器之前运行的专用容器)启动的流量无法离开服务网格。Init Containers 执行的任何需要在网格外建立网络流量连接的操作都会失败。

有关将 Init Containers 连接到服务的更多信息,请参阅 Red Hat 知识库解决方案 注入 Service Mesh sidecar 的 Pod 上的 initContainer 处于 CrashLoopBackOff 状态

先决条件

启用自动 sidecar 注射

部署应用程序时,必须通过在 deployment 对象的 spec.template.metadata.labels 中将标签 sidecar.istio.io/inject 配置为 true 来选择加入注入。选择加入可确保 sidecar 注入不会干扰 Red Hat OpenShift Service on AWS 的其他功能,例如 Red Hat OpenShift Service on AWS 生态系统中众多框架使用的构建器 Pod。

先决条件
  • 确定属于服务网格的命名空间以及需要自动 sidecar 注射的部署。

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

    $ oc get deployment -n <namespace>

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

    oc get deployment -n bookinfo ratings-v1 -o yaml
  2. 在编辑器中打开应用程序的 Deployment YAML 文件。

  3. spec.template.metadata.labels.sidecar.istio/inject 添加到您的 Deployment YAML 文件,并将 sidecar.istio.io/inject 设置为 true,如下例所示。

    bookinfo deployment-ratings-v1.yaml 文件中的示例代码段
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      namespace: bookinfo
      labels:
        app: ratings
        version: v1
    spec:
      template:
        metadata:
          labels:
            sidecar.istio.io/inject: 'true'

    启用自动 sidecar 注射时使用 annotations 参数已弃用,已替换为使用 labels 参数。

  4. 保存 Deployment YAML 文件。

  5. 将文件添加回包含您的应用程序的项目。

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

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

    $ oc apply -n bookinfo -f deployment-ratings-v1.yaml
  6. 要验证资源是否已成功上传,请运行以下命令。

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

    例如:

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

验证 sidecar 注射

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

Missing Sidecar badge
图 1. 缺少 sidecar 徽章

图表页面显示一个节点徽章,指示以下图表上缺少 Sidecar

  • 应用程序图表

  • 版本化应用程序图表

  • 工作负载图表

Missing Sidecar icon
图 2. 缺少 sidecar 图标

应用程序页面在详细信息列中显示缺少 Sidecar图标,用于命名空间中任何没有 sidecar 的应用程序。

工作负载页面在详细信息列中显示缺少 Sidecar图标,用于命名空间中任何没有 sidecar 的应用程序。

服务页面在详细信息列中显示缺少 Sidecar图标,用于命名空间中任何没有 sidecar 的应用程序。当服务存在多个版本时,可以使用服务详细信息页面查看缺少 Sidecar图标。

工作负载详细信息页面有一个特殊的统一日志选项卡,允许您查看和关联应用程序和代理日志。您可以查看 Envoy 日志作为验证应用程序工作负载的 sidecar 注入的另一种方法。

工作负载详细信息页面还为任何是 Envoy 代理或已注入 Envoy 代理的工作负载提供一个Envoy选项卡。此选项卡显示一个内置的 Envoy 仪表板,其中包括集群侦听器路由引导配置指标子选项卡。

有关启用Envoy访问日志的信息,请参阅故障排除部分。

有关查看Envoy日志的信息,请参阅在Kiali控制台中查看日志

通过注解设置代理环境变量

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覆盖或删除。

更新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。

后续步骤

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