×

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

如果已安装 Bookinfo 示例应用程序,则该应用程序已部署,并且 sidecar 在安装过程中已注入。如果使用的是您自己的项目和服务,请在 OpenShift Dedicated 上部署您的应用程序。

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

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

先决条件

启用自动 sidecar 注入

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

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

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

    $ oc get deployment -n <namespace>

    例如,要查看 bookinfo 命名空间中 'ratings-v1' 微服务的 Deployment YAML 文件,请使用以下命令以 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 功能。