搜索

1.9. 创建 ServiceMeshControlPlane

download PDF

1.9.1. 关于 ServiceMeshControlPlane

control plane 包括 Istiod、Ingress 和 Egress 网关,以及其他组件,如 Kiali 和 Jaeger。control plane 必须部署到与 Service Mesh Operator 和 data plane 应用程序和服务不同的命名空间中。您可以从 OpenShift Container Platform Web 控制台或使用 oc 客户端工具从命令行部署 ServiceMeshControlPlane (SMCP) 的基本安装。

注意

这个基本安装是基于默认的 OpenShift Container Platform 设置配置的,它不适用于生产环境。使用此默认安装来验证安装,然后为您的环境配置 ServiceMeshControlPlane 设置。

注意

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

1.9.1.1. 从 web 控制台部署 Service Mesh control plane

您可以使用 Web 控制台部署基本 ServiceMeshControlPlane。在本例中,istio-system 是 Service Mesh control plane 项目的名称。

前提条件

  • 必须安装 Red Hat OpenShift Service Mesh Operator。
  • cluster-admin 用户身份登录到 OpenShift Container Platform Web 控制台。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
  2. 创建一个名为 istio-system 的项目。

    1. 浏览至 Home Project
    2. 点击 Create Project
    3. Name 字段中输入 istio-systemServiceMeshControlPlane 资源必须安装在独立于您的微服务和 Operator 的项目中。

      这些步骤使用 istio-system 作为示例,但您可以在任何项目中部署 Service Mesh control plane,只要它与包含您的服务的项目分开。

    4. Create
  3. 导航到 Operators Installed Operators
  4. 点 Red Hat OpenShift Service Mesh Operator,然后点 Istio Service Mesh Control Plane
  5. Istio Service Mesh Control Plane 选项卡中,点 Create ServiceMeshControlPlane

    1. 接受默认的 Service Mesh control plane 版本,以利用该产品的最新版本中提供的功能。control plane 的版本决定了与 Operator 版本无关的可用功能。
    2. Create

    Operator 根据您的配置参数创建 pod、服务和 Service Mesh control plane 组件。您可以稍后配置 ServiceMeshControlPlane 设置。

验证

  • 要验证 control plane 是否已正确安装,请点击 Istio Service Mesh Control Plane 标签页。

    1. 点新的 control plane 的名称。
    2. Resources 标签页来查看由 Operator 创建并配置的 Red Hat OpenShift Service Mesh control plane 资源。

1.9.1.2. 使用 CLI 部署 Service Mesh control plane

您可以使用命令行部署基本的 ServiceMeshControlPlane

前提条件

  • 必须安装 Red Hat OpenShift Service Mesh Operator。
  • 访问 OpenShift CLI(oc)。
  • 以'cluster-admin"身份登录到 OpenShift Container Platform。

流程

  1. 创建一个名为 istio-system 的项目。

    $ oc new-project istio-system
  2. 使用以下示例,创建一个名为 istio-installation.yamlServiceMeshControlPlane 文件。Service Mesh control plane 的版本决定了与 Operator 版本无关的可用功能。

    版本 2.5 istio-installation.yaml 示例

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      version: v2.5
      tracing:
        type: Jaeger
        sampling: 10000
      addons:
        jaeger:
          name: jaeger
          install:
            storage:
              type: Memory
        kiali:
          enabled: true
          name: kiali
        grafana:
          enabled: true

  3. 运行以下命令来部署 Service Mesh control plane,其中 <istio_installation.yaml> 包含到您的文件的完整路径。

    $ oc create -n istio-system -f <istio_installation.yaml>
  4. 要观察 pod 部署的进度,请运行以下命令:

    $ oc get pods -n istio-system -w

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

    NAME                                   READY   STATUS    RESTARTS   AGE
    grafana-b4d59bd7-mrgbr                 2/2     Running   0          65m
    istio-egressgateway-678dc97b4c-wrjkp   1/1     Running   0          108s
    istio-ingressgateway-b45c9d54d-4qg6n   1/1     Running   0          108s
    istiod-basic-55d78bbbcd-j5556          1/1     Running   0          108s
    jaeger-67c75bd6dc-jv6k6                2/2     Running   0          65m
    kiali-6476c7656c-x5msp                 1/1     Running   0          43m
    prometheus-58954b8d6b-m5std            2/2     Running   0          66m

1.9.1.3. 使用 CLI 验证 SMCP 安装

您可以从命令行验证 ServiceMeshControlPlane 创建。

  1. 先决条件

    • 必须安装 Red Hat OpenShift Service Mesh Operator。
    • 访问 OpenShift CLI(oc)。
    • 以'cluster-admin"身份登录到 OpenShift Container Platform。

流程

  1. 运行以下命令,以验证 Service Mesh control plane 安装,其中 istio-system 是安装 Service Mesh control plane 的命名空间。

    $ oc get smcp -n istio-system

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

    NAME    READY   STATUS            PROFILES      VERSION   AGE
    basic   10/10   ComponentsReady   ["default"]   2.5.2     66m

1.9.2. 关于 control plane 组件和基础架构节点

基础架构节点提供了一种出于两个主要目的来隔离基础架构工作负载的方法:

  • 要防止发生订阅数量的计费成本
  • 分离基础架构工作负载的维护和管理

您可以将部分或所有 Service Mesh control plane 组件配置为在基础架构节点上运行。

1.9.2.1. 使用 Web 控制台将所有 control plane 组件配置为在基础架构节点上运行

如果 Service Mesh control plane 部署的所有组件都在基础架构节点上运行,请执行此任务。这些部署的组件包括 Istiod、Ingress Gateway 和 Egress 网关,以及 Prometheus、Grafana 和分布式跟踪等可选应用程序。

如果 control plane 将在 worker 节点上运行,请跳过此任务。

前提条件

  • 已安装 Red Hat OpenShift Service Mesh Operator。
  • 以'cluster-admin"身份登录到 OpenShift Container Platform。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 导航到 Operators Installed Operators
  3. 点 Red Hat OpenShift Service Mesh Operator,然后点 Istio Service Mesh Control Plane
  4. 点 control plane 资源的名称。例如,basic
  5. YAML
  6. nodeSelectortolerations 字段添加到 ServiceMeshControlPlane 资源的 spec.runtime.defaults.pod 规格中,如下例所示:

    spec:
      runtime:
        defaults:
          pod:
            nodeSelector: 1
              node-role.kubernetes.io/infra: ""
            tolerations: 2
            - effect: NoSchedule
              key: node-role.kubernetes.io/infra
              value: reserved
            - effect: NoExecute
              key: node-role.kubernetes.io/infra
              value: reserved
    1
    确保 ServiceMeshControlPlane pod 仅调度到基础架构节点上。
    2
    确保基础架构节点接受执行 pod。
  7. Save
  8. Reload

1.9.2.2. 使用 Web 控制台将独立的 control plane 组件配置为在基础架构节点上运行

如果 Service Mesh control plane 部署的独立组件在基础架构节点上运行,请执行此任务。这些部署的组件包括 Istiod、Ingress Gateway 和 Egress Gateway。

如果 control plane 将在 worker 节点上运行,请跳过此任务。

前提条件

  • 已安装 Red Hat OpenShift Service Mesh Operator。
  • 以'cluster-admin"身份登录到 OpenShift Container Platform。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 导航到 Operators Installed Operators
  3. 点 Red Hat OpenShift Service Mesh Operator,然后点 Istio Service Mesh Control Plane
  4. 点 control plane 资源的名称。例如,basic
  5. YAML
  6. nodeSelectortolerations 字段添加到 ServiceMeshControlPlane 资源中的 spec.runtime.components.pilot.pod 规格中,如下例所示:

    spec:
      runtime:
        components:
          pilot:
            pod:
              nodeSelector: 1
                node-role.kubernetes.io/infra: ""
              tolerations: 2
              - effect: NoSchedule
                key: node-role.kubernetes.io/infra
                value: reserved
              - effect: NoExecute
                key: node-role.kubernetes.io/infra
                value: reserved
    1
    确保 Istiod pod 仅调度到基础架构节点上。
    2
    确保基础架构节点接受执行 pod。
  7. nodeSelectortolerations 字段添加到 ServiceMeshControlPlane 资源中的 spec.gateways.ingress.runtime.podspec.gateways.egress.runtime.pod 规格中,如下例所示:

    spec:
      gateways:
        ingress:
          runtime:
            pod:
              nodeSelector: 1
                node-role.kubernetes.io/infra: ""
              tolerations: 2
              - effect: NoSchedule
                key: node-role.kubernetes.io/infra
                value: reserved
              - effect: NoExecute
                key: node-role.kubernetes.io/infra
                value: reserved
        egress:
          runtime:
            pod:
              nodeSelector: 3
                node-role.kubernetes.io/infra: ""
              tolerations: 4
              - effect: NoSchedule
                key: node-role.kubernetes.io/infra
                value: reserved
              - effect: NoExecute
                key: node-role.kubernetes.io/infra
                value: reserved
    1 3
    确保网关 pod 仅调度到基础架构节点上
    2 4
    确保基础架构节点接受执行 pod。
  8. Save
  9. Reload

1.9.2.3. 使用 CLI 将所有 control plane 组件配置为在基础架构节点上运行

如果 Service Mesh control plane 部署的所有组件都在基础架构节点上运行,请执行此任务。这些部署的组件包括 Istiod、Ingress Gateway 和 Egress 网关,以及 Prometheus、Grafana 和分布式跟踪等可选应用程序。

如果 control plane 将在 worker 节点上运行,请跳过此任务。

前提条件

  • 已安装 Red Hat OpenShift Service Mesh Operator。
  • 以'cluster-admin"身份登录到 OpenShift Container Platform。

流程

  1. 以 YAML 文件的形式打开 ServiceMeshControlPlane 资源:

    $ oc -n istio-system edit smcp <name> 1
    1
    <name> 代表 ServiceMeshControlPlane 资源的名称。
  2. 要在基础架构节点上运行 ServiceMeshControlPlane 部署的所有 Service Mesh 组件,请将 nodeSelectortolerations 字段添加到 ServiceMeshControlPlane 资源中的 spec.runtime.defaults.pod spec 中:

    spec:
      runtime:
        defaults:
          pod:
            nodeSelector: 1
              node-role.kubernetes.io/infra: ""
            tolerations: 2
            - effect: NoSchedule
              key: node-role.kubernetes.io/infra
              value: reserved
            - effect: NoExecute
              key: node-role.kubernetes.io/infra
              value: reserved
    1
    确保 SMCP pod 仅调度到基础架构节点上。
    2
    确保基础架构节点接受 pod。

1.9.2.4. 使用 CLI 将各个 control plane 组件配置为在基础架构节点上运行

如果 Service Mesh control plane 部署的独立组件在基础架构节点上运行,请执行此任务。这些部署的组件包括 Istiod、Ingress Gateway 和 Egress Gateway。

如果 control plane 将在 worker 节点上运行,请跳过此任务。

前提条件

  • 已安装 Red Hat OpenShift Service Mesh Operator。
  • 以'cluster-admin"身份登录到 OpenShift Container Platform。

流程

  1. 以 YAML 文件形式打开 ServiceMeshControlPlane 资源。

    $ oc -n istio-system edit smcp <name> 1
    1
    <name> 代表 ServiceMeshControlPlane 资源的名称。
  2. 要在基础架构节点上运行 Istiod 组件,请将 nodeSelectortolerations 字段添加到 ServiceMeshControlPlane 资源中的 spec.runtime.components.pilot.pod spec 中。

    spec:
      runtime:
        components:
          pilot:
            pod:
              nodeSelector: 1
                node-role.kubernetes.io/infra: ""
              tolerations: 2
              - effect: NoSchedule
                key: node-role.kubernetes.io/infra
                value: reserved
              - effect: NoExecute
                key: node-role.kubernetes.io/infra
                value: reserved
    1
    确保 Istiod pod 仅调度到基础架构节点上。
    2
    确保基础架构节点接受 pod。
  3. 要在基础架构节点上运行 Ingress 和 Egress Gateways,请将 nodeSelectortolerations 字段添加到 ServiceMeshControlPlane 资源中的 spec.gateways.ingress.runtime.pod spec 和 spec.gateways.egress.runtime.pod spec 中。

    spec:
      gateways:
        ingress:
          runtime:
            pod:
              nodeSelector: 1
                node-role.kubernetes.io/infra: ""
              tolerations: 2
              - effect: NoSchedule
                key: node-role.kubernetes.io/infra
                value: reserved
              - effect: NoExecute
                key: node-role.kubernetes.io/infra
                value: reserved
        egress:
          runtime:
            pod:
              nodeSelector: 3
                node-role.kubernetes.io/infra: ""
              tolerations: 4
              - effect: NoSchedule
                key: node-role.kubernetes.io/infra
                value: reserved
              - effect: NoExecute
                key: node-role.kubernetes.io/infra
                value: reserved
    1 3
    确保网关 pod 仅调度到基础架构节点上
    2 4
    确保基础架构节点接受 pod。

1.9.2.5. 验证 Service Mesh control plane 在基础架构节点上运行

流程

  • 确认与 Istiod、Ingress Gateway 和 Egress Gateway pod 关联的节点是基础架构节点:

    $ oc -n istio-system get pods -owide

1.9.3. 关于 control plane 和集群范围的部署

集群范围的部署包含一个 Service Mesh Control Plane,它监控整个集群的资源。监控整个集群的资源与 control plane 在所有命名空间中使用单个查询来监控 Istio 和 Kubernetes 资源的 Istio 功能非常相似。因此,集群范围的部署会减少发送到 API 服务器的请求数。

您可以使用 OpenShift Container Platform Web 控制台或 CLI 为集群范围的部署配置 Service Mesh Control Plane。

1.9.3.1. 使用 web 控制台为集群范围的部署配置 control plane

您可以使用 OpenShift Container Platform Web 控制台为集群范围的部署配置 ServiceMeshControlPlane 资源。在本例中,istio-system 是 Service Mesh control plane 项目的名称。

前提条件

  • 安装了 Red Hat OpenShift Service Mesh Operator。
  • 以'cluster-admin"身份登录到 OpenShift Container Platform。

流程

  1. 创建一个名为 istio-system 的项目。

    1. 浏览至 Home Project
    2. 点击 Create Project
    3. Name 字段中输入 istio-systemServiceMeshControlPlane 资源必须安装在独立于您的微服务和 Operator 的项目中。

      这些步骤使用 istio-system 作为示例。只要 Service Mesh control plane 与包含服务的项目分开,就可以将 Service Mesh control plane 部署到任何项目中。

    4. Create
  2. 导航到 Operators Installed Operators
  3. 点 Red Hat OpenShift Service Mesh Operator,然后点 Istio Service Mesh Control Plane
  4. Istio Service Mesh Control Plane 选项卡中,点 Create ServiceMeshControlPlane
  5. YAML 视图。Service Mesh control plane 的版本决定了与 Operator 版本无关的可用功能。
  6. 修改 YAML 文件的 spec.mode 字段,以指定 ClusterWide

    版本 2.5 istio-installation.yaml 示例

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      version: v2.5
      mode: ClusterWide

  7. Create。Operator 根据您的配置参数创建 pod、服务和 Service Mesh control plane 组件。如果 ServiceMeshMemberRoll 不存在,Operator 也会创建 ServiceMeshMemberRoll。

验证

  • 验证 control plane 是否已正确安装:

    1. Istio Service Mesh Control Plane 标签页。
    2. 点新 ServiceMeshControlPlane 对象的名称。
    3. Resources 选项卡,查看 Operator 创建和配置的 Red Hat OpenShift Service Mesh control plane 资源。

1.9.3.2. 使用 CLI 为集群范围的部署配置 control plane

您可以使用 CLI 为集群范围的部署配置 ServiceMeshControlPlane 资源。在本例中,istio-system 是 Service Mesh control plane 命名空间的名称。

前提条件

  • 安装了 Red Hat OpenShift Service Mesh Operator。
  • 您可以访问 OpenShift CLI(oc)。
  • 以'cluster-admin"身份登录到 OpenShift Container Platform。

流程

  1. 创建一个名为 istio-system 的项目。

    $ oc new-project istio-system
  2. 使用以下示例,创建一个名为 istio-installation.yamlServiceMeshControlPlane 文件:

    版本 2.5 istio-installation.yaml 示例

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      version: v2.5
      mode: ClusterWide

  3. 运行以下命令来部署 Service Mesh control plane:

    $ oc create -n istio-system -f <istio_installation.yaml>

    其中:

    <istio_installation.yaml>
    指定文件的完整路径。

验证

  1. 要监控 pod 部署的进度,请运行以下命令:

    $ oc get pods -n istio-system -w

    您应该看到类似以下示例的输出:

    输出示例

    NAME                                   READY   STATUS    RESTARTS   AGE
    grafana-b4d59bd7-mrgbr                 2/2     Running   0          65m
    istio-egressgateway-678dc97b4c-wrjkp   1/1     Running   0          108s
    istio-ingressgateway-b45c9d54d-4qg6n   1/1     Running   0          108s
    istiod-basic-55d78bbbcd-j5556          1/1     Running   0          108s
    jaeger-67c75bd6dc-jv6k6                2/2     Running   0          65m
    kiali-6476c7656c-x5msp                 1/1     Running   0          43m
    prometheus-58954b8d6b-m5std            2/2     Running   0          66m

1.9.3.3. 为集群范围的网格自定义 member roll

在集群范围的模式中,当您创建 ServiceMeshControlPlane 资源时,也会创建 ServiceMeshMemberRoll 资源。您可以在创建 ServiceMeshMemberRoll 资源后修改它。修改资源后,Service Mesh Operator 不再更改它。如果使用 OpenShift Container Platform Web 控制台修改 ServiceMeshMemberRoll 资源,请接受提示来覆盖修改。

另外,您可以在部署 ServiceMeshControlPlane 资源前创建一个 ServiceMeshMemberRoll 资源。在创建 ServiceMeshControlPlane 资源时,Service Mesh Operator 不会修改 ServiceMeshMemberRoll

注意

ServiceMeshMemberRoll 资源名称必须命名为 default,且必须与 ServiceMeshControlPlane 资源在同一项目命名空间中创建。

将命名空间添加到网格的方法有两种。您可以通过在 spec.members 列表中指定名称来添加命名空间,或者将一组命名空间标签选择器配置为根据其标签包含或排除命名空间。

注意

无论您在 ServiceMeshMemberRoll 资源中如何指定成员,您也可以通过在每个命名空间中创建 ServiceMeshMember 资源,将成员添加到网格中。

1.9.4. 使用 Kiali 验证 SMCP 安装

您可以使用 Kiali 控制台验证 Service Mesh 安装。Kiali 控制台提供了一种方式来验证您的 Service Mesh 组件是否已正确部署和配置。

  1. 先决条件

    • 必须安装 Red Hat OpenShift Service Mesh Operator。
    • 访问 OpenShift CLI(oc)。
    • 以'cluster-admin"身份登录到 OpenShift Container Platform。

流程

  1. 在 OpenShift Container Platform web 控制台中进入 Networking Routes
  2. Routes 页面中,从 Namespace 菜单中选择 Service Mesh control plane 项目,如 istio-system

    Location 列显示每个路由的链接地址。

  3. 如果需要,使用过滤器查找 Kiali 控制台的路由。单击路由 位置 以启动控制台。
  4. 单击 Log In With OpenShift

    第一次登录到 Kiali 控制台时,您会看到 Overview 页面,它会显示服务网格中您有权查看的所有命名空间。当 Overview 页中显示多个命名空间,Kiali 会首先显示具有健康或验证问题的命名空间。

    图 1.1. Kiali Overview 页

    Kiali Overview 页显示 istio-system

    每个命名空间的 tile 会显示标签数量、Istio 配置健康、和 应用程序 健康状态的数量,以及命名空间的流量。如果您验证了控制台安装,且命名空间还没有添加到网格中,则可能无法显示 istio-system 以外的任何数据。

  5. Kiali 有四个仪表板,专门用于安装了 Service Mesh control plane 的命名空间。要查看这些仪表板,请点击 control plane 命名空间的标题 kebabOptions 菜单,如 istio-system,然后选择以下选项之一:

    • Istio Mesh Dashboard
    • Istio Control Plane Dashboard
    • Istio Performance Dashboard
    • Istio Wasm Exetension Dashboard

      图 1.2. Grafana Istio Control Plane Dashboard

      Istio Control Plane Dashboard 显示 info 示例项目的数据

      Kiali 还会安装两个额外的 Grafana 仪表板,它们可从 Grafana Home 页面获得:

    • Istio Workload Dashboard
    • Istio Service Dashboard
  6. 要查看 Service Mesh control plane 节点,点 Graph 页面,从菜单中选择安装 ServiceMeshControlPlane命名空间,如 istio-system

    1. 如有必要,请单击 Display idle nodes
    2. 要了解更多有关 Graph 页面的信息,请点击 Graph tour 链接。
    3. 要查看网格拓扑,请从 Namespace 菜单中从 Service Mesh Member Roll 中选择一个或多个附加命名空间。
  7. 要查看 istio-system 命名空间中的应用程序列表,请点击 Applications 页面。Kiali 显示应用程序的健康状况。

    1. 将鼠标指针悬停在信息图标上,以查看 Details 列中记下的任何其他信息。
  8. 要在 istio-system 命名空间中查看工作负载列表,请点击 Workloads 页面。Kiali 显示工作负载的运行状况。

    1. 将鼠标指针悬停在信息图标上,以查看 Details 列中记下的任何其他信息。
  9. 要查看 istio-system 命名空间中的服务列表,点 Services 页面。Kiali 显示服务和配置的健康状态。

    1. 将鼠标指针悬停在信息图标上,以查看 Details 列中记下的任何其他信息。
  10. 要查看 istio-system 命名空间中的 Istio Configuration 对象列表,点 Istio Config 页面。Kiali 显示配置的健康状况。

    1. 如果出现配置错误,点行,Kiali 会打开配置文件并突出显示错误。

1.9.5. 其他资源

Red Hat OpenShift Service Mesh 支持集群中的多个独立 control plane。您可以使用 ServiceMeshControlPlane 配置集创建可重复使用的配置。如需更多信息,请参阅创建 control plane 配置集

1.9.6. 后续步骤

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.