2.5. 安装 Service Mesh

警告

查看不再支持的 Red Hat OpenShift Service Mesh 发行版本的文档。

Service Mesh 版本 1.0 和 1.1 control plane 不再被支持。有关升级服务网格 control plane 的详情,请参阅 升级 Service Mesh

有关特定 Red Hat OpenShift Service Mesh 发行版本的支持状态的信息,请参阅产品生命周期页面

安装 Service Mesh 包括安装 OpenShift Elasticsearch 、Jaeger 、Kiali 和 Service Mesh Operators,创建和管理一个ServiceMeshControlPlane 资源 以部署 control plane,创建一个ServiceMeshMemberRoll 资源以指定与 Service Mesh 关联的命名空间。

注意

在默认情况下,Mixer 的策略强制功能被禁用。您必须启用它才能运行策略任务。有关启用 Mixer 策略强制执行的步骤,请参阅更新 Mixer 策略强制执行。

注意

多租户 control plane 安装是默认配置。

注意

Service Mesh 文档使用 istio-system 作为示例项目,但您可以将服务网格部署到任何项目中。

2.5.1. 前提条件

Service Mesh 安装过程使用 OperatorHubopenshift-operators 项目内安装 ServiceMeshControlPlane 自定义资源。Red Hat OpenShift Service Mesh 定义并监控与部署、更新和删除 control plane 相关的 ServiceMeshControlPlane

从 Red Hat OpenShift Service Mesh 1.1.18.2 开始,您必须安装 OpenShift Elasticsearch Operator、Jaeger Operator 和 Kiali Operator,然后才能安装 control plane。

2.5.2. 安装 OpenShift Elasticsearch Operator

默认的 Red Hat OpenShift distributed tracing 平台(Jaeger)部署使用内存存储,因为它旨在为评估 Red Hat OpenShift distributed tracing 平台、提供演示或在测试环境中使用 Red Hat OpenShift distributed tracing 平台(Jaeger)的用户快速安装。如果您计划在生产环境中使用 Red Hat OpenShift distributed tracing 平台 (Jaeger),则必须安装并配置持久性存储选项,即 Elasticsearch。

先决条件

  • 访问 OpenShift Container Platform web 控制台。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
警告

不要安装 Operators 的 Community 版本。不支持社区 Operator。

注意

如果您已经安装了 OpenShift Elasticsearch Operator 作为 OpenShift Logging 的一部分,则不需要再次安装 OpenShift Elasticsearch Operator。Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 使用已安装的 OpenShift Elasticsearch Operator 创建 Elasticsearch 实例。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
  2. 导航至 OperatorsOperatorHub
  3. 在过滤器框中键入 Elasticsearch 以找到 OpenShift Elasticsearch Operator。
  4. 点由红帽提供的 OpenShift Elasticsearch Operator 来显示有关 Operator 的信息。
  5. 点击 Install
  6. Install Operator 页中,选择 stable Update Channel。这可在发布新版本时自动更新您的 Operator。
  7. 接受默认的 All namespaces on the cluster (default)。这会在默认的 openshift-operators-redhat 项目中安装 Operator,并使 Operator 可供集群中的所有项目使用。

    注意

    Elasticsearch 安装需要 OpenShift Elasticsearch Operator 的 openshift-operators-redhat 命名空间。其他 Red Hat OpenShift distributed tracing Platform Operator 安装在 openshift-operators 命名空间中。

  8. 接受默认的 Automatic 批准策略。默认情况下,当这个 Operator 的新版本可用时,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需人为干预。如果选择手动 更新,则当有新版 Operator 可用时,OLM 会创建更新请求。作为集群管理员,您必须手动批准该更新请求,才可将 Operator 更新至新版本。

    注意

    Manual 批准策略需要具有适当凭证的用户批准 Operator 的安装和订阅过程。

  9. 点击 Install
  10. Installed Operators 页面中,选择 openshift-operators-redhat 项目。等待 OpenShift Elasticsearch Operator 的 InstallSucceeded 状态再继续。

2.5.3. 安装 Red Hat OpenShift distributed tracing Platform Operator

您可以通过 OperatorHub 安装 Red Hat OpenShift distributed tracing Platform Operator。

默认情况下,Operator 安装在 openshift-operators 项目中。

先决条件

  • 访问 OpenShift Container Platform web 控制台。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
  • 如果需要持久性存储,则必须在安装 Red Hat OpenShift distributed tracing Platform Operator 前安装 OpenShift Elasticsearch Operator。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
  2. 进入 OperatorsOperatorHub
  3. 通过在搜索字段中输入分布式追踪平台来搜索 Red Hat OpenShift distributed tracing Platform Operator。
  4. 选择 Red Hat OpenShift distributed tracing platform Operator,它由红帽提供,显示 Operator 的信息。
  5. Install
  6. 对于 Install Operator 页面中的 Update 频道,在发布新版本时,选择 stable 来自动更新 Operator。
  7. 接受默认的 All namespaces on the cluster (default)。这会在默认的 openshift-operators 项目中安装 Operator ,并使其可以被集群中的所有项目使用。
  8. 接受默认的 Automatic 批准策略。

    注意

    如果您接受此默认值,Operator Lifecycle Manager (OLM) 会在有新版 Operator 可用时自动升级此 Operator 的运行实例。

    如果选择手动更新,OLM 会在有新版 Operator 可用时创建一个更新请求。要将 Operator 更新至新版本,必须以集群管理员身份手动批准更新请求。Manual 批准策略要求集群管理员手动批准 Operator 安装和订阅。

  9. Install
  10. 导航到 OperatorsInstalled Operators
  11. Installed Operators 页面中,选择 openshift-operators 项目。等待 Red Hat OpenShift distributed tracing Platform Operator 的 Succeeded 状态继续。

2.5.4. 安装 Kiali Operator

您必须为 Red Hat OpenShift Service Mesh Operator 安装 Kiali Operator 来安装 Service Mesh control plane。

警告

不要安装 Operators 的 Community 版本。不支持社区 Operator。

先决条件

  • 访问 OpenShift Container Platform Web 控制台。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 进入 OperatorsOperatorHub
  3. 在过滤器框中键入 Kiali 来查找 Kiali Operator。
  4. 点由红帽提供的 Kiali Operator 来显示有关 Operator 的信息。
  5. Install
  6. Operator 安装页面中,选择 stable Update Channel。
  7. 选择 All namespaces on the cluster(默认)。这会在默认的 openshift-operators 项目中安装 Operator ,并使其可以被集群中的所有项目使用。
  8. 选择 Automatic 批准策略。

    注意

    手动批准策略需要拥有适当凭证的用户批准 Operator 的安装和订阅过程。

  9. Install
  10. Installed Operators 页会显示 Kiali Operator 的安装进度。

2.5.5. 安装 Operator

要安装 Red Hat OpenShift Service Mesh,请按照以下顺序安装 Operator。为每个 Operator 重复上述步骤。

  • OpenShift Elasticsearch
  • Red Hat OpenShift distributed tracing Platform (Jaeger)
  • 红帽提供的 Kiali Operator
  • Red Hat OpenShift Service Mesh
注意

如果您已经安装了 OpenShift Elasticsearch Operator 作为 OpenShift Logging 的一部分,则不需要再次安装 OpenShift Elasticsearch Operator。Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 将使用已安装的 OpenShift Elasticsearch Operator 创建 Elasticsearch 实例。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
  2. 在 OpenShift Container Platform Web 控制台中,点击 OperatorsOperatorHub
  3. 在过滤器框中输入 Operator 名称,再选择 Operator 的 Red Hat 版本。不支持 Operator 的社区版本。
  4. Install
  5. 在每个 Operator 的 Install Operator 页面中,接受默认设置。
  6. Install。等待 Operator 安装完毕,然后为列表中的下一个 Operator 重复这些步骤。

    • OpenShift Elasticsearch Operator 安装在 openshift-operators-redhat 命名空间中,并可用于集群中的所有命名空间。
    • Red Hat OpenShift distributed tracing 平台 (Jaeger) 安装在 openshift-distributed-tracing 命名空间中,可用于集群中的所有命名空间。
    • 红帽提供的 Kiali Operator 安装在 openshift-operators 命名空间中,并可用于集群中的所有命名空间。
    • Red Hat OpenShift Service Mesh Operator 安装在 openshift-operators 命名空间中,并可用于集群中的所有命名空间。

验证

  • 安装完所有四个 Operator 后,点 OperatorsInstalled Operators 来验证是否安装了 Operator。

2.5.6. 部署 Red Hat OpenShift Service Mesh control plane

ServiceMeshControlPlane 资源定义要在安装过程中使用的配置。您可以部署红帽提供的默认配置,或者自定义 ServiceMeshControlPlane 文件以满足您的业务需求。

您可以使用 OpenShift Container Platform web 控制台或使用 oc 客户端工具从命令行部署 Service Mesh control plane。

2.5.6.1. 从 Web 控制台部署 control plane

按照以下步骤,使用 Web 控制台部署 Red Hat OpenShift Service Mesh control plane。在本例中,istio-system 是 control plane 项目的名称。

前提条件

  • 必须安装 Red Hat OpenShift Service Mesh Operator。
  • 查看有关如何自定义 Red Hat OpenShift Service Mesh 安装的说明。
  • 具有 cluster-admin 角色的帐户。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。
  2. 创建一个名为 istio-system 的项目。

    1. 浏览至 HomeProject
    2. 点击 Create Project
    3. Name 字段中输入 istio-system
    4. Create
  3. 导航到 OperatorsInstalled Operators
  4. 如果需要,请在 Project 菜单中选择 istio-system。您可能需要等待一些时间,让 Operator 复制到新项目中。
  5. 点 Red Hat OpenShift Service Mesh Operator。在 Provided APIs 下,Operator 提供了创建两个资源类型的链接:

    • ServiceMeshControlPlane 资源
    • ServiceMeshMemberRoll 资源
  6. Istio Service Mesh Control Plane 下点 Create ServiceMeshControlPlane
  7. Create Service Mesh Control Plane 页面中,根据需要修改默认 ServiceMeshControlPlane 模板的 YAML。

    注意

    如需有关自定义 control plane 的更多信息,请参阅“自定义 Red Hat OpenShift Service Mesh 安装”。对于生产环境,您必须更改默认的 Jaeger 模板。

  8. Create 来创建 control plane。Operator 根据您的配置参数创建 pod、服务和 Service Mesh control plane 组件。
  9. Istio Service Mesh Control Plane 标签页。
  10. 点新的 control plane 的名称。
  11. Resources 标签页来查看由 Operator 创建并配置的 Red Hat OpenShift Service Mesh control plane 资源。

2.5.6.2. 通过 CLI 部署 control plane

按照以下步骤,使用命令行部署 Red Hat OpenShift Service Mesh control plane。

前提条件

  • 必须安装 Red Hat OpenShift Service Mesh Operator。
  • 查看有关如何自定义 Red Hat OpenShift Service Mesh 安装的说明。
  • 具有 cluster-admin 角色的帐户。
  • 访问 OpenShift CLI(oc)。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform CLI。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 创建一个名为 istio-system 的项目。

    $ oc new-project istio-system
  3. 使用“自定义 Red Hat OpenShift Service Mesh 安装”中的示例,创建一个名为 istio-installation.yamlServiceMeshControlPlane 文件。您可以根据需要自定义值来匹配您的用例。对于生产环境,您必须更改默认的 Jaeger 模板。
  4. 运行以下命令来部署 control plane:

    $ oc create -n istio-system -f istio-installation.yaml
  5. 执行以下命令查看 control plane 安装的状态。

    $ oc get smcp -n istio-system

    当 STATUS 列是 ComponentsReady 时,安装成功完成。

    NAME            READY   STATUS            PROFILES      VERSION   AGE
    basic-install   11/11   ComponentsReady   ["default"]   v1.1.18   4m25s
  6. 在安装过程中运行以下命令来监控 Pod 的进度:

    $ oc get pods -n istio-system -w

    您应该看到类似如下的输出:

    输出示例

    NAME                                     READY   STATUS             RESTARTS   AGE
    grafana-7bf5764d9d-2b2f6                 2/2     Running            0          28h
    istio-citadel-576b9c5bbd-z84z4           1/1     Running            0          28h
    istio-egressgateway-5476bc4656-r4zdv     1/1     Running            0          28h
    istio-galley-7d57b47bb7-lqdxv            1/1     Running            0          28h
    istio-ingressgateway-dbb8f7f46-ct6n5     1/1     Running            0          28h
    istio-pilot-546bf69578-ccg5x             2/2     Running            0          28h
    istio-policy-77fd498655-7pvjw            2/2     Running            0          28h
    istio-sidecar-injector-df45bd899-ctxdt   1/1     Running            0          28h
    istio-telemetry-66f697d6d5-cj28l         2/2     Running            0          28h
    jaeger-896945cbc-7lqrr                   2/2     Running            0          11h
    kiali-78d9c5b87c-snjzh                   1/1     Running            0          22h
    prometheus-6dff867c97-gr2n5              2/2     Running            0          28h

对于多租户环境,Red Hat OpenShift Service Mesh 支持集群中有多个独立 control plane。您可以使用 ServiceMeshControlPlane 模板生成可重复使用的配置。如需更多信息,请参阅创建 control plane 模板

2.5.7. 创建 Red Hat OpenShift Service Mesh member roll

ServiceMeshMemberRoll 列出属于 Service Mesh control plane 的项目。只有 ServiceMeshMemberRoll 中列出的项目会受到 control plane 的影响。在将项目添加到特定 control plane 部署的 member roll 之前,项目不属于服务网格。

您必须在 ServiceMeshControlPlane 所在的同一个项目中创建一个名为 defaultServiceMeshMemberRoll 资源,如 istio-system

2.5.7.1. 从 Web 控制台创建 member roll

您可从 web 控制台在 Service Mesh member roll 中添加一个或多个项目。在本例中,istio-system 是 Service Mesh control plane 项目的名称。

前提条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • 要添加到服务网格的现存项目列表。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 如果您还没有网格服务,或者您从头开始,请为您的应用程序创建一个项目。它必须与安装 Service Mesh control plane 的项目不同。

    1. 浏览至 HomeProject
    2. Name 字段中输入一个名称。
    3. Create
  3. 导航到 OperatorsInstalled Operators
  4. Project 菜单,从列表中选择部署 ServiceMeshControlPlane 资源的项目,如 istio-system
  5. 点 Red Hat OpenShift Service Mesh Operator。
  6. Istio Service Mesh Member Roll 选项卡。
  7. Create ServiceMeshMemberRoll
  8. 单击 Members,然后在 Value 字段中输入项目名称。您可以添加任意数量的项目,但一个项目只能属于一个 ServiceMeshMemberRoll 资源。
  9. Create

2.5.7.2. 通过 CLI 创建 member roll

您可以使用命令行将项目添加到 ServiceMeshMemberRoll 中。

前提条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • 要添加到服务网格的项目列表。
  • 访问 OpenShift CLI(oc)。

流程

  1. 登录 OpenShift Container Platform CLI。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 如果您还没有网格服务,或者您从头开始,请为您的应用程序创建一个项目。它必须与安装 Service Mesh control plane 的项目不同。

    $ oc new-project <your-project>
  3. 要添加项目作为成员,请修改以下示例 YAML:您可以添加任意数量的项目,但一个项目只能属于一个 ServiceMeshMemberRoll 资源。在本例中,istio-system 是 Service Mesh control plane 项目的名称。

    servicemeshmemberroll-default.yaml 示例

    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system
    spec:
      members:
        # a list of projects joined into the service mesh
        - your-project-name
        - another-project-name

  4. 运行以下命令,在 istio-system 命名空间中上传并创建 ServiceMeshMemberRoll 资源。

    $ oc create -n istio-system -f servicemeshmemberroll-default.yaml
  5. 运行以下命令,以验证 ServiceMeshMemberRoll 是否已成功创建。

    $ oc get smmr -n istio-system default

    STATUS 列为 Configured 时,安装成功完成。

2.5.8. 为服务网格添加或删除项目

您可以使用 web 控制台从现有 Service Mesh ServiceMeshMemberRoll 资源中添加或删除项目。

  • 您可以添加任意数量的项目,但一个项目只能属于一个 ServiceMeshMemberRoll 资源。
  • 当它对应的 ServiceMeshControlPlane 资源被删除后,ServiceMeshMemberRoll 资源也会被删除。

2.5.8.1. 使用 Web 控制台从 member roll 中添加或删除项目

前提条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • 现有 ServiceMeshMemberRoll 资源
  • 带有 ServiceMeshMemberRoll 资源的项目名称 。
  • 您要为网格添加或删除的项目的名称。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 导航到 OperatorsInstalled Operators
  3. Project 菜单,从列表中选择部署 ServiceMeshControlPlane 资源的项目,如 istio-system
  4. 点 Red Hat OpenShift Service Mesh Operator。
  5. Istio Service Mesh Member Roll 选项卡。
  6. default 链接。
  7. 点 YAML 标签。
  8. 修改 YAML 以添加或删除作为成员的项目。您可以添加任意数量的项目,但一个项目只能属于一个 ServiceMeshMemberRoll 资源。
  9. 点击 Save
  10. Reload

2.5.8.2. 使用 CLI 从 member roll 添加或删除项目

您可以使用命令行修改现有 Service Mesh member roll。

先决条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • 现有 ServiceMeshMemberRoll 资源
  • 带有 ServiceMeshMemberRoll 资源的项目名称 。
  • 您要为网格添加或删除的项目的名称。
  • 访问 OpenShift CLI(oc)。

流程

  1. 登录 OpenShift Container Platform CLI。
  2. 编辑 ServiceMeshMemberRoll 资源。

    $ oc edit smmr -n <controlplane-namespace>
  3. 修改 YAML 以添加或删除作为成员的项目。您可以添加任意数量的项目,但一个项目只能属于一个 ServiceMeshMemberRoll 资源。

    servicemeshmemberroll-default.yaml 示例

    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system #control plane project
    spec:
      members:
        # a list of projects joined into the service mesh
        - your-project-name
        - another-project-name

2.5.9. 手动更新

如果您选择使用手工更新,Operator Lifecycle Manager (OLM) 会控制集群中 Operator 的安装、升级和基于角色的访问控制 (RBAC)。OLM 在 OpenShift Container Platform 中默认运行。OLM 使用 CatalogSource,而 CatalogSources 使用 Operator Registry API 来查询是否有可用的 Operator 及已安装 Operator 是否有升级版本。

  • 如需了解有关 OpenShift Container Platform 如何处理升级的更多信息,请参阅 Operator Lifecycle Manager 文档。

2.5.9.1. 更新 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.5.10. 后续步骤