1.6. 自定义 Red Hat OpenShift Service Mesh 安装

您可以通过修改默认的 Service Mesh 自定义资源或者创建新的自定义资源来定制 Red Hat OpenShift Service Mesh。

1.6.1. 先决条件

1.6.2. Red Hat OpenShift Service Mesh 自定义资源

注意

在整个 Service Mesh 文档中,使用 istio-system 项目作为一个示例,您可以根据需要使用其他项目。

自定义资源 允许您在 Red Hat OpenShift Service Mesh 项目或集群中扩展 API。当部署 Service Mesh 时,它会创建一个默认的 ServiceMeshControlPlane,可以修改它来更改项目参数。

Service Mesh operator 可以通过添加 ServiceMeshControlPlane 资源类型来扩展 API,这可让您在项目中创建 ServiceMeshControlPlane 对象。通过创建一个 ServiceMeshControlPlane 对象,指示 Operator 将一个 Service Mesh control plane 安装到项目中,并使用在 ServiceMeshControlPlane 中设置的参数。

这个示例 ServiceMeshControlPlane 定义包含所有支持的参数,并部署基于 Red Hat Enterprise Linux(RHEL)的 Red Hat OpenShift Service Mesh 1.1.15 镜像。

重要

3scale Istio 适配器在自定义资源文件中被部署并配置。它还需要一个可以正常工作的 3scale 帐户(SaaSOn-Premises)。

istio-installation.yaml 的示例

apiVersion: maistra.io/v1
kind: ServiceMeshControlPlane
metadata:
  name: basic-install
spec:

  istio:
    global:
      proxy:
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 128Mi

    gateways:
      istio-egressgateway:
        autoscaleEnabled: false
      istio-ingressgateway:
        autoscaleEnabled: false
        ior_enabled: false

    mixer:
      policy:
        autoscaleEnabled: false

      telemetry:
        autoscaleEnabled: false
        resources:
          requests:
            cpu: 100m
            memory: 1G
          limits:
            cpu: 500m
            memory: 4G

    pilot:
      autoscaleEnabled: false
      traceSampling: 100

    kiali:
      enabled: true

    grafana:
      enabled: true

    tracing:
      enabled: true
      jaeger:
        template: all-in-one

1.6.3. ServiceMeshControlPlane 参数

以下示例演示了使用 ServiceMeshControlPlane 参数,并提供了有关支持参数的附加信息。

重要

您可以根据 OpenShift 集群的配置,使用这些参数为 Red Hat OpenShift Service Mesh 配置资源,其中包括 CPU 、内存和 pod 的数量。根据当前集群配置中的可用资源配置这些参数。

1.6.3.1. Istio 全局示例

下面是一个示例,它演示了ServiceMeshControlPlane 的 Istio 全局参数,以及可用参数和值的信息。

注意

为了使 3scale Istio 时配器可以正常工作,disablePolicyChecks 必须为 false

全局参数示例

  istio:
    global:
      tag: 1.1.0
      hub: registry.redhat.io/openshift-service-mesh/
      proxy:
        resources:
          requests:
            cpu: 10m
            memory: 128Mi
          limits:
      mtls:
        enabled: false
      disablePolicyChecks: true
      policyCheckFailOpen: false
      imagePullSecrets:
        - MyPullSecret

表 1.3. 全局参数

参数描述默认值

disablePolicyChecks

启用/禁用策略检查。

true/false

true

policyCheckFailOpen

指定在 Mixer 策略服务无法访问时,是否允许流量传递给 Envoy sidecar。

true/false

false

tag

Operator 用来抓取 Istio 镜像的 tag。

有效的容器镜像 tag。

1.1.0

hub

Operator 用来抓取 Istio 镜像的中心。

有效的镜像仓库。

maistra/ or registry.redhat.io/openshift-service-mesh/

mtls

控制是否默认在服务间启用/禁用传输层安全 (mTLS) 。

true/false

false

imagePullSecrets

如果对提供 Istio 镜像的 registry 的访问是安全的,在这里列出一个 imagePullSecret

redhat-registry-pullSecret 或 quay-pullSecret

这些参数专用于全局参数的代理子集。

表 1.4. 代理参数

类型参数描述默认值

Requests

cpu

为 Envoy proxy 要求的 CPU 资源量。

基于环境配置的 CPU 资源,以 cores 或 millicores 为单位(例如,200m 、0.5 、1)指定。

10m

 

memory

Envoy proxy 内存量请求

可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),基于您的环境配置。

128Mi

Limits

cpu

为 Envoy proxy 请求的最大 CPU 资源量。

基于环境配置的 CPU 资源,以 cores 或 millicores 为单位(例如,200m 、0.5 、1)指定。

2000m

 

memory

Envoy proxy 允许使用的最大内存数量。

可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),根据您的环境配置而定。

1024Mi

1.6.3.2. Istio 网关配置

下面是一个示例,它演示了 ServiceMeshControlPlane 的 Istio 网关参数 以及相关的信息。

网关参数示例

  gateways:
       istio-egressgateway:
         autoscaleEnabled: false
         autoscaleMin: 1
         autoscaleMax: 5
       istio-ingressgateway:
         autoscaleEnabled: false
         autoscaleMin: 1
         autoscaleMax: 5
         ior_enabled: true

表 1.5. Istio 网关参数

类型参数描述默认值

istio-egressgateway

autoscaleEnabled

启用/禁用自动扩展。

true/false

true

 

autoscaleMin

根据 autoscaleEnabled,为出站网关部署的最少的 pod 数量。

基于环境配置的可分配 pods 的有效数量。

1

 

autoscaleMax

根据 autoscaleEnabled 设置,为出站网关部署的最大 pod 数量 。

基于环境配置的可分配 pods 的有效数量。

5

istio-ingressgateway

autoscaleEnabled

启用/禁用自动扩展。

true/false

true

 

autoscaleMin

根据 autoscaleEnabled,为入站网关部署的最少的 pod 数量。

基于环境配置的可分配 pods 的有效数量。

1

 

autoscaleMax

根据 autoscaleEnabled,为入站网关部署的最大的 pod 数量。

基于环境配置的可分配 pods 的有效数量。

5

 

ior_enabled

控制是否启用自动路由创建。

true/false

false

1.6.3.3. 自动路由创建

Istio 网关的 OpenShift 路由在 Red Hat OpenShift Service Mesh 中被自动管理。每次在 service mesh 中创建、更新或删除 Istio 网关时,都会自动创建、更新或删除 OpenShift 路由。

1.6.3.3.1. 启用自动路由创建

名为 Istio OpenShift Routing (IOR) 的 Red Hat OpenShift Service Mesh control plane 组件可以用来同步网关路由。作为 control plane 部署的一部分启用 IOR。

如果网关包含一个 TLS 部分,则 OpenShift Route 将被配置为支持 TLS。

  1. ServiceMeshControlPlane 资源中添加 ior_enabled 参数,并将其设置为 true。例如,请查看以下资源片断:
spec:
  istio:
    gateways:
     istio-egressgateway:
       autoscaleEnabled: false
       autoscaleMin: 1
       autoscaleMax: 5
     istio-ingressgateway:
       autoscaleEnabled: false
       autoscaleMin: 1
       autoscaleMax: 5
       ior_enabled: true
1.6.3.3.2. 子域

Red Hat OpenShift Service Mesh 使用子域创建路由,但必须配置 OpenShift Container Platform 才能启用它。子域,如 *.domain.com,被支持,但不是默认支持。

如果创建了以下网关:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: gateway1
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - www.bookinfo.com
    - bookinfo.example.com

然后,会自动创建以下 OpenShift 路由。您可以使用以下命令来检查是否创建了路由:

$ oc -n <your-control-plane-namespace> get routes

预期输出

NAME           HOST/PORT             PATH  SERVICES               PORT  TERMINATION   WILDCARD
gateway1-lvlfn bookinfo.example.com        istio-ingressgateway   <all>               None
gateway1-scqhv www.bookinfo.com            istio-ingressgateway   <all>               None

如果删除了网关,Red Hat OpenShift Service Mesh 会删除路由。但是,手动创建的路由都不会被 Red Hat OpenShift Service Mesh 修改。

集群管理员可以参阅 使用通配符路由 来获得如何启用子域的说明。

1.6.3.4. Istio Mixer 配置

下面是一个示例,它演示了ServiceMeshControlPlane 的 Mixer 参数,以及可用参数和值的信息。

Mixer 参数示例

mixer:
  enabled: true
  policy:
    autoscaleEnabled: false
  telemetry:
    autoscaleEnabled: false
    resources:
    requests:
      cpu: 10m
      memory: 128Mi
      limits:

表 1.6. Istio Mixer 策略参数

参数描述默认值

enabled

参数启用/禁用 Mixer。

true/false

true

autoscaleEnabled

启用/禁用自动扩展。在小型环境中禁用它。

true/false

true

autoscaleMin

根据 autoscaleEnabled,部署的最少的 pod 数量。

基于环境配置的可分配 pods 的有效数量。

1

autoscaleMax

根据 autoscaleEnabled,部署的最大的 pod 数量。

基于环境配置的可分配 pods 的有效数量。

5

表 1.7. Istio Mixer 遥测参数

类型参数描述默认

Requests

cpu

Mixer 遥测所需的 CPU 资源百分比。

基于环境配置的 CPU 资源(以毫秒为单位)。

10m

 

memory

Mixer 遥测所需的内存量。

可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),根据您的环境配置而定。

128Mi

Limits

cpu

Mixer 遥测可以使用的 CPU 资源的最大百分比。

基于环境配置的 CPU 资源(以毫秒为单位)。

4800m

 

memory

Mixer 遥测允许使用的最大内存数量。

可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),根据您的环境配置而定。

4G

1.6.3.5. Istio Pilot 配置

下面是一个示例,它演示了ServiceMeshControlPlane 的 Istio Pilot 参数,以及可用参数和值的信息。

pilot 参数示例

  pilot:
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
    autoscaleEnabled: false
    traceSampling: 100

表 1.8. Istio Pilot 参数

参数描述默认值

cpu

Pilot 请求的 CPU 资源的百分比。

基于环境配置的 CPU 资源(以毫秒为单位)。

10m

memory

Pilot 请求的内存量。

可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),根据您的环境配置而定。

128Mi

autoscaleEnabled

启用/禁用自动扩展。在小型环境中禁用它。

true/false

true

traceSampling

这个值控制随机抽样的频率。注: 在开发或测试时可以增加这个值。

有效百分比。

1.0

1.6.4. 配置 Kiali

当 Service Mesh Operator 创建 ServiceMeshControlPlane 时,它也会处理 Kiali 资源。然后,当 Kiali Operator 创建 Kiali 实例时会使用这个对象。

ServiceMeshControlPlane 中指定的默认 Kiali 参数如下:

Kiali 参数示例

apiVersion: maistra.io/v1
kind: ServiceMeshControlPlane
spec:
    kiali:
      enabled: true
      dashboard:
        viewOnlyMode: false
      ingress:
        enabled: true

表 1.9. Kiali 参数

参数描述默认值
enabled

启用/禁用 Kiali。默认情况下启用 Kiali 。

true/false

true

dashboard
   viewOnlyMode

为 Kiali 控制台启用/禁用只读视图模式。启用只读视图模式时,用户无法使用控制台来更改 Service Mesh。

true/false

false

ingress
   enabled

为 Kiali 启用/禁用 ingress。

true/false

true

1.6.4.1. 为 Grafana 配置 Kiali

当将 Kiali 和 Grafana 作为 Red Hat OpenShift Service Mesh 的一部分安装时,Operator 会默认配置以下内容:

  • Grafana 作为 Kiali 的外部服务启用
  • Kiali 控制台的 Grafana 授权
  • Kiali 控制台的 Grafana URL

Kiali 可自动检测 Grafana URL。然而,如果您有不能轻易被 Kiali 自动探测到的自定义 Grafana 安装,则需要更新 ServiceMeshControlPlane 资源中的 URL 值。

额外的 Grafana 参数

spec:
  kiali:
    enabled: true
    dashboard:
      viewOnlyMode: false
      grafanaURL:  "https://grafana-istio-system.127.0.0.1.nip.io"
    ingress:
      enabled: true

1.6.4.2. 为 Jaeger 配置 Kiali

当您将 Kiali 和 Jaeger 作为 Red Hat OpenShift Service Mesh 的一部分安装时,Operator 会默认配置以下内容:

  • Jaeger 作为 Kiali 的外部服务启用
  • Kiali 控制台的 Jaeger 授权
  • Kiali 控制台的 Jaeger URL

Kiali 可以自动检测 Jaeger URL。然而,如果您有不能轻易被 Kiali 自动探测到的自定义 Jaeger 安装,则需要更新 ServiceMeshControlPlane 资源中的 URL 值。

额外的 Jaeger 参数

spec:
  kiali:
    enabled: true
    dashboard:
      viewOnlyMode: false
      jaegerURL: "http://jaeger-query-istio-system.127.0.0.1.nip.io"
    ingress:
      enabled: true

1.6.5. 配置 Jaeger

当 Service Mesh Operator 创建 ServiceMeshControlPlane 资源时,它还会创建 Jaeger 资源。然后,Jaeger Operator 在创建 Jaeger 实例时会使用这个对象。

ServiceMeshControlPlane 中指定的默认 Jaeger 参数如下:

默认的 all-in-one Jaeger 参数

  apiVersion: maistra.io/v1
  kind: ServiceMeshControlPlane
  spec:
    istio:
      tracing:
        enabled: true
        jaeger:
          template: all-in-one

表 1.10. Jaeger 参数

参数描述默认值
tracing
   enabled

在 Service Mesh 中启用/禁用追踪。Jaeger 被默认安装。

true/false

true

jaeger
   template

指定使用哪个 Jaeger 部署策略。

  • all-in-one- 用于开发、测试、演示和概念验证。
  • production-elasticsearch - 用于产品环境。

all-in-one

注意

ServiceMeshControlPlane 资源中的默认模板是 all-in-one 部署策略,它使用 in-memory 存储。对于生产环境,唯一支持的存储选项是 Elasticsearch,因此您必须配置 ServiceMeshControlPlane 来在生产环境中部署 Service Mesh 时请求 production-elasticsearch 模板。

1.6.5.1. 配置 Elasticsearch

默认的 Jaeger 部署策略使用 all-in-one 模板,以便可使用最小资源完成安装。但是,因为 all-in-one模板使用 in-memory 存储,所以只建议用于开发、演示或者测试目的。在生产环境中不应该使用它。

如果要在产品环境中部署 Service Mesh 和 Jaeger,则需要将模板改为 production-elasticsearch 模板,该模板使用 Elasticsearch 来满足 Jaeger 的存储需要。

elasticsearch 是一个需要消耗大量内存的应用程序。在默认的 OpenShift Container Platform 安装中指定的初始节点可能不足以支持 Elasticsearch 集群。您应该修改默认的 Elasticsearch 配置,使其与您的用例和为 OpenShift Container Platform 安装请求的资源相匹配。您可以使用有效的 CPU 和内存值来修改每个组件的 CPU 和内存限值。如果要使用推荐的内存数量(或更多)运行,则必须在集群中添加额外的节点。请确定没有超过 OpenShift Container Platform 安装所请求的资源。

Elasticsearch 默认的 "生产环境" Jaeger 参数

  apiVersion: maistra.io/v1
  kind: ServiceMeshControlPlane
  spec:
    istio:
      tracing:
      enabled: true
      ingress:
        enabled: true
      jaeger:
        template: production-elasticsearch
        elasticsearch:
          nodeCount: 3
          redundancyPolicy:
          resources:
            requests:
              cpu: "1"
              memory: "16Gi"
            limits:
              cpu: "1"
              memory: "16Gi"

表 1.11. elasticsearch 参数

参数描述默认值例子
tracing:
  enabled

在 Service Mesh 中启用/禁用追踪。Jaeger 被默认安装。

true/false

true

 
ingress:
  enabled

为 Jaeger 启用/禁用 ingress。

true/false

true

 
jaeger
   template

指定使用哪个 Jaeger 部署策略。

all-in-one/production-elasticsearch

all-in-one

 
elasticsearch:
  nodeCount

要创建的 Elasticsearch 节点数量。

整数值。

1

概念验证 = 1, 最小部署 =3

requests:
  cpu

根据您的环境配置,请求的 CPU 数量。

以 core 或者 millicores 指定(例如: 200m, 0.5, 1)。

1Gi

概念证明 = 500m, 最小部署 =1

requests:
  memory

根据您的环境配置,可用于请求的内存。

以字节为单位指定(例如: 200Ki, 50Mi, 5Gi)。

500m

概念证明 = 1Gi, 最小部署 = 16Gi*

limits:
  cpu

根据您的环境配置,CPU 数量的限值。

以 core 或者 millicores 指定(例如: 200m, 0.5, 1)。

 

概念证明 = 500m, 最小部署 =1

limits:
  memory

根据您的环境配置,可用的内存限值。

以字节为单位指定(例如: 200Ki, 50Mi, 5Gi)。

 

概念证明 = 1Gi, 最小部署 = 16Gi*

* 通过这个设置可以使每个 Elasticsearch 节点使用较低内存进行操作,但对于生产环境部署,不建议这样做。对于生产环境,您应该默认为每个 pod 分配不少于 16Gi 内存,但最好为每个 pod 最多分配 64Gi 内存。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。
  2. 导航到 OperatorsInstalled Operators
  3. 点 Red Hat OpenShift Service Mesh Operator。
  4. Istio Service Mesh Control Plane 标签页。
  5. 点 control plane 文件的名称,例如 basic-install
  6. YAML 标签。
  7. 编辑 Jaeger 参数,根据您的具体用例,使用 production-elasticsearch 模板参数替换默认的 all-in-one 模板。确定缩进格式正确。
  8. Save
  9. Reload。OpenShift Container Platform 重新部署 Jaeger,并根据指定的参数创建 Elasticsearch 资源。

1.6.5.2. 配置 Elasticsearch 索引清理任务

当 Service Mesh Operator 创建 ServiceMeshControlPlane 时,它还会为 Jaeger 创建自定义资源 (CR) 。Jaeger operator 在创建 Jaeger 实例时使用这个 CR。

当使用 Elasticsearch 存储时,默认会创建一个任务来清理旧的 trace。要配置这个任务的选项,请编辑 Jaeger 自定义资源 (CR) 以便为您的用例进行定制。以下列出了相关的选项。

  apiVersion: jaegertracing.io/v1
  kind: Jaeger
  spec:
    strategy: production
    storage:
      type: elasticsearch
      esIndexCleaner:
        enabled: false
        numberOfDays: 7
        schedule: "55 23 * * *"

表 1.12. Elasticsearch 索引清理参数

参数描述

enabled

true/ false

启用或者禁用索引清理任务。

numberOfDays

整数值

删除索引前等待的天数。

schedule

"55 23 * * *"

运行任务的 cron 设置

有关在 OpenShift Container Platform 中配置 Elasticsearch 的详情,请参考配置日志存储

1.6.6. 3scale 配置

下面是一个示例,它演示了 Red Hat OpenShift Service Mesh 自定义资源的 3scale Istio 适配器参数,以及可用参数和值的信息。

3scale 参数示例

threeScale:
  enabled: false
  PARAM_THREESCALE_LISTEN_ADDR: 3333
  PARAM_THREESCALE_LOG_LEVEL: info
  PARAM_THREESCALE_LOG_JSON: true
  PARAM_THREESCALE_LOG_GRPC: false
  PARAM_THREESCALE_REPORT_METRICS: true
  PARAM_THREESCALE_METRICS_PORT: 8080
  PARAM_THREESCALE_CACHE_TTL_SECONDS: 300
  PARAM_THREESCALE_CACHE_REFRESH_SECONDS: 180
  PARAM_THREESCALE_CACHE_ENTRIES_MAX: 1000
  PARAM_THREESCALE_CACHE_REFRESH_RETRIES: 1
  PARAM_THREESCALE_ALLOW_INSECURE_CONN: false
  PARAM_THREESCALE_CLIENT_TIMEOUT_SECONDS: 10
  PARAM_THREESCALE_GRPC_CONN_MAX_SECONDS: 60

表 1.13. 3scale 参数

参数描述默认值

enabled

是否使用 3scale 适配器

true/false

false

PARAM_THREESCALE_LISTEN_ADDR

为 gRPC 服务器设定侦听地址

有效端口号

3333

PARAM_THREESCALE_LOG_LEVEL

设置最小日志输出级别。

debuginfowarnerrornone

info

PARAM_THREESCALE_LOG_JSON

是否将日志格式转化为 JSON

true/false

true

PARAM_THREESCALE_LOG_GRPC

日志是否包含 gRPC 信息

true/false

true

PARAM_THREESCALE_REPORT_METRICS

是否收集 3scale 系统和后端的指标数据并报告给 Prometheus

true/false

true

PARAM_THREESCALE_METRICS_PORT

设置 3scale /metrics 端点可以从中分离的端口

有效端口号

8080

PARAM_THREESCALE_CACHE_TTL_SECONDS

在从缓存中移除过期项目前等待的时间(以秒为单位)

时间间隔(以秒为单位)

300

PARAM_THREESCALE_CACHE_REFRESH_SECONDS

尝试刷新缓存元素的过期时间

时间间隔(以秒为单位)

180

PARAM_THREESCALE_CACHE_ENTRIES_MAX

在任何时间可以保存在缓存中的最大项目数。设为 0 会禁用缓存

有效数量

1000

PARAM_THREESCALE_CACHE_REFRESH_RETRIES

在缓存更新循环中检索无法访问的主机的次数

有效数量

1

PARAM_THREESCALE_ALLOW_INSECURE_CONN

在调用 3scale API 时允许跳过证书验证。不推荐启用此功能。

true/false

false

PARAM_THREESCALE_CLIENT_TIMEOUT_SECONDS

终止到 3scale 系统和后端请求前等待的秒数

时间间隔(以秒为单位)

10

PARAM_THREESCALE_GRPC_CONN_MAX_SECONDS

在连接关闭前设置连接的最大秒数(+/-10% 抖动)

时间间隔(以秒为单位)

60

1.6.7. 后续步骤