×

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

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

更多信息,请参见OpenShift Container Platform文档,理解部署

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

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

先决条件

启用自动sidecar注入

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