1.5. Red Hat OpenShift Service Mesh

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

注意

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

注意

从 Red Hat OpenShift Service Mesh 1.0 开始,多租户 control plane 安装是默认配置。

注意

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

1.5.1. 先决条件

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

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

1.5.2. 安装 Elasticsearch Operator

默认 Jaeger 部署使用内存存储,这可以使那些评估 Jaeger 、演示或者在测试环境中使用 Jaeger 的用户快速地进行安装。如果要在生产环境中使用 Jaeger,则必须安装持久性存储选项,即 Elasticsearch。

先决条件

  • 访问 OpenShift Container Platform Web 控制台。
  • 具有 cluster-admin 角色的帐户。
警告

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

注意

如果您已安装 Elasticsearch Operator 作为 OpenShift 集群日志记录的一部分,则不需要再次安装 Elasticsearch Operator。Jaeger Operator 将使用已安装的 Elasticsearch Operator 创建 Elasticsearch 实例。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。
  2. 进入 OperatorsOperatorHub
  3. 在过滤器框中键入 Elasticsearch 以找到 Elasticsearch Operator。
  4. 点由红帽提供的 Elasticsearch Operator 来显示有关 Operator 的信息。
  5. 点击 Install
  6. Install Operator 页面中,选择 A specific namespace on the cluster 选项,然后从菜单中选择 openshift-operators-redhat

    注意

    Elasticsearch 安装指南指出,您必须为 Red Hat OpenShift Service Mesh 指定 Elasticsearch operator 的 openshift-operators-redhat 命名空间。

  7. 选择与 OpenShift Container Platform 安装匹配的更新频道。例如,如果您要在 OpenShift Container Platform 版本 4.6 上安装,请选择 4.6 更新频道。
  8. 选择 Automatic 批准策略。

    注意

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

  9. 点击 Install
  10. Installed Operators 页面中,选择 openshift-operators-redhat 项目。等待 Elasticsearch Operator 的状态显示为 "InstallSucceeded" 后再继续进行操作。

1.5.3. 安装 Jaeger Operator

要安装 Jaeger,您需要使用 OperatorHub 来安装 Jaeger Operator。

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

先决条件

  • 访问 OpenShift Container Platform Web 控制台。
  • 具有 cluster-admin 角色的帐户。
  • 如果需要持久性存储,则必须在安装 Jaeger Operator 前安装 Elasticsearch Operator。
警告

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

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。
  2. 进入 OperatorsOperatorHub
  3. 在过滤器框中键入 Jaeger 来找到 Jaeger Operator。
  4. 点由红帽提供的 Jaeger Operator 来显示有关 Operator 的信息。
  5. 点击 Install
  6. Install Operator 页面中,选择 All namespaces on the cluster(default)。这会在默认的 openshift-operators 项目中安装 Operator ,并使其可以被集群中的所有项目使用。
  7. 选择 stable 更新频道。这可在发布新版本时自动更新 Jaeger。如果您选择维护频道,例如 1.17-stable,则会在支持周期内接收程序错误修复和安全补丁。

    • 选择一个批准策略您可以选择 AutomaticManual 更新。如果选择自动更新某个已安装的 Operator,则当相应 Operator 有可用的新版本时,Operator Lifecycle Manager(OLM)将自动升级该 Operator 的运行实例,而无需人为干预。如果选择手动更新,则当有新版 Operator 可用时,OLM 会创建更新请求。作为集群管理员,您必须手动批准该更新请求,才可将 Operator 更新至新版本。

      注意

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

  8. 点击 Install
  9. Subscription Overview 页面中,选择 openshift-operators 项目。等待 Jaeger Operator 的状态显示为 "InstallSucceeded" 后再继续进行操作。。

1.5.4. 安装 Kiali Operator

必须为 Red Hat OpenShift Service Mesh Operator 安装 Kiali Operator 以安装 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. Install Operator 页面中,选择 All namespaces on the cluster(default)。这会在默认的 openshift-operators 项目中安装 Operator ,并使其可以被集群中的所有项目使用。
  7. 选择 stable 更新频道。
  8. 选择 Automatic 批准策略。

    注意

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

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

1.5.5. 安装 Red Hat OpenShift Service Mesh Operator

先决条件

  • 访问 OpenShift Container Platform Web 控制台。
  • 必须安装 Elasticsearch Operator。
  • 必须安装 Jaeger Operator。
  • 必须安装 Kiali Operator。

流程

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

    注意

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

  9. 点击 Install
  10. Installed Operators 页会显示 Red Hat OpenShift Service Mesh Operator 的安装进度。

1.5.6. 部署 Red Hat OpenShift Service Mesh control plane

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

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

1.5.6.1. 从 Web 控制台部署 control plane

按照以下步骤,使用 Web 控制台部署 Red Hat OpenShift Service Mesh 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 资源。

1.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 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

    当 READY 列为 true 时,安装已成功完成。

    NAME           READY
    basic-install   True
  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 模板

1.5.7. 创建 Red Hat OpenShift Service Mesh member roll

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

您必须在 ServiceMeshControlPlane 所在的同一个项目中创建一个名为 defaultServiceMeshMemberRoll 资源。

注意

只有在 Service Mesh control plane 安装成功时才会更新成员项目。

1.5.7.1. 从 Web 控制台创建 member roll

按照此流程,使用 Web 控制台将一个或多个项目添加到 Service Mesh member roll 中。

先决条件

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

流程

  1. 如果您还没有网格的项目,或者您从头开始,请创建一个项目。它必须与 istio-system不同。

    1. 浏览至 HomeProject
    2. Name 字段中输入一个名称。
    3. 点击 Create
  2. 登陆到 OpenShift Container Platform Web 控制台。
  3. 导航到 OperatorsInstalled Operators
  4. Project 菜单,然后从列表中选择部署了 ServiceMeshControlPlane 的项目,如 istio-system
  5. 点 Red Hat OpenShift Service Mesh Operator。
  6. All Instances 标签。
  7. Create New,然后选择 Create Istio Service Mesh Member Roll

    注意

    Operator 完成复制资源的过程需要一定的时间,因此您可能需要刷新屏幕才能看到 Create Istio Service Mesh Member Roll 按钮。

  8. Create Service Mesh Member Roll 页面中,修改 YAML 以添加项目作为成员。您可以添加多个项目,但每个项目只能属于一个 ServiceMeshMemberRoll 资源。
  9. Create 保存 Service Mesh Member Roll。

1.5.7.2. 通过 CLI 创建 member roll

按照此流程,从命令行将项目添加到 ServiceMeshMemberRoll

先决条件

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

流程

  1. 登录 OpenShift Container Platform CLI。

    $ oc login
  2. ServiceMeshControlPlane 资源所在的同一个项目中创建 ServiceMeshMemberRoll 资源,在本例中为 istio-system。资源必须被命名为 default

    $ oc create -n istio-system -f 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
  3. 修改默认 YAML 以添加您的项目作为 members。您可以添加多个项目,但每个项目只能属于一个 ServiceMeshMemberRoll 资源。

1.5.7.3. 创建 Red Hat OpenShift Service Mesh 成员

ServiceMeshMember 资源可由服务网格用户创建,即使这些用户没有权限直接将成员添加到 ServiceMeshMemberRoll 中。虽然项目管理员被自动授予在其项目中创建 ServiceMeshMember 资源的权限,但它们不能将其指向任何 ServiceMeshControlPlane,直到服务网格管理员显式授予服务网格访问权限。管理员可以通过授予 mesh-user 用户角色来授予用户对网格的访问权限,例如:

$ oc policy add-role-to-user -n <control-plane-namespace> --role-namespace <control-plane-namespace> mesh-user <user-name>.

管理员可修改 control plane 项目中的 mesh user 角色绑定,以指定授予访问权限的用户和组。ServiceMeshMember 会把项目添加到它所指代的 control plane 项目中的 ServiceMeshMemberRoll

apiVersion: maistra.io/v1
kind: ServiceMeshMember
metadata:
  name: default
spec:
  controlPlaneRef:
    namespace: control-plane-namespace
    name: minimal-install

mesh-users 角色绑定在管理员创建 ServiceMeshControlPlane 资源后自动创建。管理员可使用以下命令为用户添加角色。

$ oc policy add-role-to-user

管理员也可以在创建 ServiceMeshControlPlane 资源前创建 mesh-user 角色绑定。例如,管理员可以在与 ServiceMeshControlPlane 资源相同的 oc apply 操作中创建它。

本例为 alice添加一个角色绑定:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: control-plane-namespace
  name: mesh-users
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: mesh-user
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: alice

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

按照此流程,使用 Web 控制台修改现有 Service Mesh ServiceMeshMemberRoll 资源。

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

1.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

1.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 资源。

    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

1.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 文档。

1.5.9.1. 更新应用程序 pod

如果您在安装 Operators 时选择了 Automatic 批准策略 ,那么 Operator 会自动更新 control plane ,但不会更新您的应用程序。现有的应用程序将仍是网格的一部分并可以正常工作。应用程序管理员必须重启应用程序来升级 sidecar。

如果您的部署使用了自动 sidecar 注入功能,则可以通过添加或修改注解来更新部署中的 pod 模板。运行以下命令来重新部署 pod:

$ oc patch deployment/<deployment> -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt": "'`date -Iseconds`'"}}}}}'

如果您的部署没有使用自动 sidecar 注入功能,则必须通过修改在部署或 pod 中指定的 sidecar 容器镜像来手动更新 sidecar。

1.5.10. 后续步骤