×

关于ServiceMeshControlPlane

控制平面包括Istiod、入口和出口网关以及其他组件,例如Kiali和Jaeger。控制平面必须部署在与服务网格运算符和数据平面应用程序和服务不同的命名空间中。您可以使用OpenShift Container Platform Web控制台或使用oc客户端工具的命令行部署ServiceMeshControlPlane(SMCP)的基本安装。

此基本安装是根据默认的OpenShift Container Platform设置配置的,并非设计用于生产环境。使用此默认安装来验证您的安装,然后为您的环境配置您的ServiceMeshControlPlane设置。

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

从Web控制台部署服务网格控制平面

您可以使用Web控制台部署基本ServiceMeshControlPlane。在此示例中,istio-system是服务网格控制平面项目的名称。

先决条件
  • 必须安装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. 导航到主页项目

    2. 点击创建项目

    3. 名称字段中,输入istio-systemServiceMeshControlPlane资源必须安装在与微服务和 Operators 分开的项目中。

      这些步骤使用istio-system作为示例,但您可以将 Service Mesh 控制平面部署到任何项目中,只要它与包含您服务的项目分开即可。

    4. 点击创建

  3. 导航到Operators已安装的 Operators

  4. 点击 Red Hat OpenShift Service Mesh Operator,然后点击Istio Service Mesh 控制平面

  5. Istio Service Mesh 控制平面选项卡上,点击创建 ServiceMeshControlPlane

    1. 接受默认的 Service Mesh 控制平面版本,以利用产品最新版本中提供的功能。控制平面的版本决定了可用的功能,而与 Operator 的版本无关。

    2. 点击创建

    Operator 会根据您的配置参数创建 Pod、服务和 Service Mesh 控制平面组件。您可以在稍后时间配置ServiceMeshControlPlane设置。

验证
  • 要验证控制平面是否已正确安装,请点击Istio Service Mesh 控制平面选项卡。

    1. 点击新控制平面的名称。

    2. 点击资源选项卡以查看 Operator 创建和配置的 Red Hat OpenShift Service Mesh 控制平面资源。

使用 CLI 部署 Service Mesh 控制平面

您可以从命令行部署基本的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 控制平面的版本决定了可用的功能,而与 Operator 的版本无关。

    示例版本 2.6 istio-installation.yaml
    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      version: v2.6
      tracing:
        type: None
        sampling: 10000
      addons:
        kiali:
          enabled: true
          name: kiali
        grafana:
          enabled: true
  3. 运行以下命令来部署 Service Mesh 控制平面,其中<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
    kiali-6476c7656c-x5msp                 1/1     Running   0          43m
    prometheus-58954b8d6b-m5std            2/2     Running   0          66m

使用 CLI 验证您的 SMCP 安装

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

  1. 先决条件

    • 必须安装Red Hat OpenShift Service Mesh Operator。

    • 访问 OpenShift CLI (oc)。

    • 您已以`cluster-admin`身份登录到 OpenShift Container Platform。

步骤
  1. 运行以下命令以验证 Service Mesh 控制平面安装,其中istio-system是您安装 Service Mesh 控制平面的命名空间。

    $ oc get smcp -n istio-system

    STATUS列为ComponentsReady时,安装已成功完成。

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

关于控制平面组件和基础设施节点

基础设施节点提供了一种隔离基础设施工作负载的方法,主要有两个目的

  • 防止因订阅数量而产生账单费用

  • 分离基础设施工作负载的维护和管理

您可以将部分或全部 Service Mesh 控制平面组件配置为在基础设施节点上运行。

使用 Web 控制台将所有控制平面组件配置为在基础设施节点上运行

如果 Service Mesh 控制平面部署的所有组件都将在基础设施节点上运行,则执行此任务。这些已部署的组件包括 Istiod、Ingress Gateway 和 Egress Gateway,以及可选的应用程序,例如 Prometheus、Grafana 和分布式跟踪。

如果控制平面将在工作节点上运行,请跳过此任务。

先决条件
  • 您已安装 Red Hat OpenShift Service Mesh Operator。

  • 您已以`cluster-admin`身份登录到 OpenShift Container Platform。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 导航到Operators已安装的 Operators

  3. 点击 Red Hat OpenShift Service Mesh Operator,然后点击Istio Service Mesh 控制平面

  4. 点击控制平面资源的名称。例如,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. 点击保存

  8. 点击重新加载

使用 Web 控制台将单个控制平面组件配置为在基础设施节点上运行

如果 Service Mesh 控制平面部署的单个组件将在基础设施节点上运行,则执行此任务。这些已部署的组件包括 Istiod、Ingress Gateway 和 Egress Gateway。

如果控制平面将在工作节点上运行,请跳过此任务。

先决条件
  • 您已安装 Red Hat OpenShift Service Mesh Operator。

  • 您已以`cluster-admin`身份登录到 OpenShift Container Platform。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 导航到Operators已安装的 Operators

  3. 点击 Red Hat OpenShift Service Mesh Operator,然后点击Istio Service Mesh 控制平面

  4. 点击控制平面资源的名称。例如,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: (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 确保网关 Pod 仅调度到基础设施节点上
    2 确保基础设施节点接受 Pod 以进行执行。
  8. 点击保存

  9. 点击重新加载

使用 CLI 将所有控制平面组件配置为在基础设施节点上运行

如果 Service Mesh 控制平面部署的所有组件都将在基础设施节点上运行,则执行此任务。这些已部署的组件包括 Istiod、Ingress Gateway 和 Egress Gateway,以及可选的应用程序,例如 Prometheus、Grafana 和分布式跟踪。

如果控制平面将在工作节点上运行,请跳过此任务。

先决条件
  • 您已安装 Red Hat OpenShift Service Mesh Operator。

  • 您已以`cluster-admin`身份登录到 OpenShift Container Platform。

步骤
  1. ServiceMeshControlPlane资源打开为 YAML 文件

    $ oc -n istio-system edit smcp <name> (1)
    1 <name>表示ServiceMeshControlPlane资源的名称。
  2. 要在基础设施节点上运行ServiceMeshControlPlane部署的所有 Service Mesh 组件,请将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 确保 SMCP Pod 仅调度到基础设施节点上。
    2 确保基础设施节点接受 Pod。

使用 CLI 将单个控制平面组件配置为在基础设施节点上运行

如果 Service Mesh 控制平面部署的单个组件将在基础设施节点上运行,则执行此任务。这些已部署的组件包括 Istiod、Ingress Gateway 和 Egress Gateway。

如果控制平面将在工作节点上运行,请跳过此任务。

先决条件
  • 您已安装 Red Hat OpenShift Service Mesh Operator。

  • 您已以`cluster-admin`身份登录到 OpenShift Container Platform。

步骤
  1. ServiceMeshControlPlane资源打开为 YAML 文件。

    $ oc -n istio-system edit smcp <name> (1)
    1 <name>表示ServiceMeshControlPlane资源的名称。
  2. 要在基础设施节点上运行 Istiod 组件,请将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。
  3. 要在基础设施节点上运行 Ingress 和 Egress 网关,请将nodeSelectortolerations字段添加到ServiceMeshControlPlane资源中的spec.gateways.ingress.runtime.pod规范和spec.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: (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 确保网关 Pod 仅调度到基础设施节点上
    2 确保基础设施节点接受 Pod。

验证 Service Mesh 控制平面是否正在基础设施节点上运行

步骤
  • 确认与 Istiod、Ingress Gateway 和 Egress Gateway Pod 关联的节点是基础设施节点

    $ oc -n istio-system get pods -owide

关于控制平面和集群范围部署

集群范围部署包含一个服务网格控制平面,用于监控整个集群的资源。监控整个集群的资源与 Istio 功能非常相似,因为控制平面使用单个查询跨越所有命名空间来监控 Istio 和 Kubernetes 资源。因此,集群范围部署减少了发送到 API 服务器的请求数量。

您可以使用 OpenShift Container Platform Web 控制台或 CLI 配置用于集群范围部署的服务网格控制平面。

使用 Web 控制台配置用于集群范围部署的控制平面

您可以使用 OpenShift Container Platform Web 控制台配置用于集群范围部署的ServiceMeshControlPlane资源。在此示例中,istio-system 是服务网格控制平面项目的名称。

先决条件
  • 已安装 Red Hat OpenShift Service Mesh Operator。

  • 您已以`cluster-admin`身份登录到 OpenShift Container Platform。

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

    1. 导航到主页项目

    2. 点击创建项目

    3. 名称字段中,输入istio-systemServiceMeshControlPlane资源必须安装在与微服务和 Operators 分开的项目中。

      这些步骤使用istio-system作为示例。您可以将服务网格控制平面部署到任何项目,只要它与包含您服务的项目分开即可。

    4. 点击创建

  2. 导航到Operators已安装的 Operators

  3. 点击 Red Hat OpenShift Service Mesh Operator,然后点击Istio Service Mesh 控制平面

  4. Istio Service Mesh 控制平面选项卡上,点击创建 ServiceMeshControlPlane

  5. 单击**YAML 视图**。服务网格控制平面的版本决定了可用功能,而与 Operator 的版本无关。

  6. 修改 YAML 文件的spec.mode字段以指定ClusterWide

    示例版本 2.6 istio-installation.yaml
    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      version: v2.6
      mode: ClusterWide
  7. 单击**创建**。Operator 将根据您的配置参数创建 pod、服务和服务网格控制平面组件。如果作为默认配置的一部分不存在ServiceMeshMemberRoll,则 Operator 也会创建它。

验证
  • 要验证控制平面是否正确安装

    1. 单击**Istio 服务网格控制平面**选项卡。

    2. 单击新的ServiceMeshControlPlane对象的名称。

    3. 单击**资源**选项卡以查看 Operator 创建和配置的 Red Hat OpenShift Service Mesh 控制平面资源。

使用 CLI 配置用于集群范围部署的控制平面

您可以使用 CLI 配置用于集群范围部署的ServiceMeshControlPlane资源。在此示例中,istio-system 是服务网格控制平面命名空间的名称。

先决条件
  • 已安装 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.6 istio-installation.yaml
    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      version: v2.6
      mode: ClusterWide
  3. 运行以下命令以部署服务网格控制平面

    $ 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

自定义集群范围网格的成员角色

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

或者,您可以在部署ServiceMeshControlPlane资源之前创建ServiceMeshMemberRoll资源。当您创建ServiceMeshControlPlane资源时,服务网格 Operator 将不会修改ServiceMeshMemberRoll

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

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

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

使用 Kiali 验证您的 SMCP 安装

您可以使用 Kiali 控制台验证您的服务网格安装。Kiali 控制台提供了多种方法来验证您的服务网格组件是否已正确部署和配置。

  1. 先决条件

    • 必须安装Red Hat OpenShift Service Mesh Operator。

    • 访问 OpenShift CLI (oc)。

    • 您已以`cluster-admin`身份登录到 OpenShift Container Platform。

步骤
  1. 在 OpenShift Container Platform Web 控制台中,导航到**网络**→**路由**。

  2. 在**路由**页面上,从**命名空间**菜单中选择服务网格控制平面项目,例如istio-system

    **位置**列显示每个路由的链接地址。

  3. 如有必要,请使用过滤器查找 Kiali 控制台的路由。单击路由**位置**以启动控制台。

  4. 单击**使用 OpenShift 登录**。

    首次登录 Kiali 控制台时,您将看到**概述**页面,该页面显示服务网格中您有权查看的所有命名空间。当**概述**页面上显示多个命名空间时,Kiali 会首先显示存在健康或验证问题的命名空间。

    Kiali Overview page showing istio-system
    图 1. Kiali 概述页面

    每个命名空间的图块显示标签数量、**Istio 配置**健康状况、数量和**应用程序**健康状况以及命名空间的**流量**。如果您正在验证控制台安装并且尚未将命名空间添加到网格中,则可能除了istio-system之外没有任何数据显示。

  5. Kiali 有四个专门用于安装服务网格控制平面的命名空间的仪表板。要查看这些仪表板,请单击控制平面命名空间(例如istio-system)图块上的选项菜单kebab,然后选择以下选项之一

    • Istio 网格仪表板

    • Istio 控制平面仪表板

    • Istio 性能仪表板

    • Istio Wasm 扩展仪表板

      Istio Control Plane Dashboard showing data for bookinfo sample project
      图 2. Grafana Istio 控制平面仪表板

      Kiali 还安装了两个额外的 Grafana 仪表板,可从 Grafana**主页**访问

    • Istio 工作负载仪表板

    • Istio 服务仪表板

  6. 要查看服务网格控制平面节点,请单击**图形**页面,从菜单中选择您安装ServiceMeshControlPlane的**命名空间**,例如istio-system

    1. 如有必要,请单击**显示空闲节点**。

    2. 要了解有关**图形**页面的更多信息,请单击**图形教程**链接。

    3. 要查看网格拓扑,请从**命名空间**菜单中的服务网格成员角色中选择一个或多个其他命名空间。

  7. 要查看istio-system命名空间中的应用程序列表,请单击**应用程序**页面。Kiali 将显示应用程序的健康状况。

    1. 将鼠标悬停在信息图标上,即可查看详细信息列中注明的任何附加信息。

  8. 要查看istio-system命名空间中的工作负载列表,请点击工作负载页面。Kiali将显示工作负载的健康状况。

    1. 将鼠标悬停在信息图标上,即可查看详细信息列中注明的任何附加信息。

  9. 要查看istio-system命名空间中的服务列表,请点击服务页面。Kiali将显示服务和配置的健康状况。

    1. 将鼠标悬停在信息图标上,即可查看详细信息列中注明的任何附加信息。

  10. 要查看istio-system命名空间中Istio配置对象的列表,请点击Istio配置页面。Kiali将显示配置的健康状况。

    1. 如果存在配置错误,请点击该行,Kiali将打开包含突出显示错误的配置文件。

其他资源

Red Hat OpenShift Service Mesh支持集群内多个独立的控制平面。您可以使用ServiceMeshControlPlane配置文件创建可重用的配置。更多信息,请参见 创建控制平面配置文件

后续步骤