1.9. 自定义 Red Hat OpenShift Service Mesh 安装
您可以通过修改默认的 Service Mesh 自定义资源或者创建新的自定义资源来定制 Red Hat OpenShift Service Mesh。
1.9.1. 先决条件
-
具有
cluster-admin
角色的帐户。 - 完成了准备安装 Red Hat OpenShift Service Mesh 的过程。
- 已安装了 operator。
1.9.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.10 镜像。
3scale Istio 适配器在自定义资源文件中被部署并配置。它还需要一个可以正常工作的 3scale 帐户(SaaS 或 On-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.9.3. ServiceMeshControlPlane
参数
以下示例演示了使用 ServiceMeshControlPlane
参数,并提供了有关支持参数的附加信息。
您可以根据 OpenShift 集群的配置,使用这些参数为 Red Hat OpenShift Service Mesh 配置资源,其中包括 CPU 、内存和 pod 的数量。根据当前集群配置中的可用资源配置这些参数。
1.9.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
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
| 启用/禁用策略检查。 |
|
|
| 指定在 Mixer 策略服务无法访问时,是否允许流量传递给 Envoy sidecar。 |
|
|
| Operator 用来抓取 Istio 镜像的 tag。 | 有效的容器镜像 tag。 |
|
| Operator 用来抓取 Istio 镜像的中心。 | 有效的镜像仓库。 |
|
| 控制是否默认在服务间启用/禁用传输层安全 (mTLS) 。 |
|
|
| 如果对提供 Istio 镜像的 registry 的访问是安全的,在这里列出一个 imagePullSecret 。 | redhat-registry-pullSecret 或 quay-pullSecret | 无 |
这些参数专用于全局参数的代理子集。
类型 | 参数 | 描述 | 值 | 默认值 |
---|---|---|---|---|
Resources |
| 为 Envoy proxy 要求的 CPU 资源量。 | 基于环境配置的 CPU 资源,以 cores 或 millicores 为单位(例如,200m 、0.5 、1)指定。 |
|
| Envoy proxy 内存量请求 | 可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),基于您的环境配置。 |
| |
Limits |
| 为 Envoy proxy 请求的最大 CPU 资源量。 | 基于环境配置的 CPU 资源,以 cores 或 millicores 为单位(例如,200m 、0.5 、1)指定。 |
|
| Envoy proxy 允许使用的最大内存数量。 | 可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),根据您的环境配置而定。 |
|
1.9.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
类型 | 参数 | 描述 | 值 | 默认值 |
---|---|---|---|---|
|
| 启用/禁用自动扩展。 |
|
|
|
根据 | 基于环境配置的可分配 pods 的有效数量。 |
| |
|
根据 | 基于环境配置的可分配 pods 的有效数量。 |
| |
|
| 启用/禁用自动扩展。 |
|
|
|
根据 | 基于环境配置的可分配 pods 的有效数量。 |
| |
|
根据 | 基于环境配置的可分配 pods 的有效数量。 |
| |
| 控制是否启用自动路由创建。 |
|
|
1.9.3.3. 自动路由创建
Istio 网关的 OpenShift 路由在 Red Hat OpenShift Service Mesh 中被自动管理。每次在 service mesh 中创建、更新或删除 Istio 网关时,都会自动创建、更新或删除 OpenShift 路由。
1.9.3.3.1. 启用自动路由创建
名为 Istio OpenShift Routing (IOR) 的 Red Hat OpenShift Service Mesh control plane 组件可以用来同步网关路由。作为 control plane 部署的一部分启用 IOR。
如果网关包含一个 TLS 部分,则 OpenShift Route 将被配置为支持 TLS。
-
在
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.9.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.9.3.4. Istio Mixer 配置
下面是一个示例,它演示了ServiceMeshControlPlane
的 Mixer 参数,以及可用参数和值的信息。
Mixer 参数示例
mixer: enabled: true policy: autoscaleEnabled: false telemetry: autoscaleEnabled: false resources: requests: cpu: 10m memory: 128Mi limits:
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
| 参数启用/禁用 Mixer。 |
|
|
| 启用/禁用自动扩展。在小型环境中禁用它。 |
|
|
|
根据 | 基于环境配置的可分配 pods 的有效数量。 |
|
|
根据 | 基于环境配置的可分配 pods 的有效数量。 |
|
类型 | 参数 | 描述 | 值 | 默认 |
---|---|---|---|---|
Resources |
| Mixer 遥测所需的 CPU 资源百分比。 | 基于环境配置的 CPU 资源(以毫秒为单位)。 |
|
| Mixer 遥测所需的内存量。 | 可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),根据您的环境配置而定。 |
| |
Limits |
| Mixer 遥测可以使用的 CPU 资源的最大百分比。 | 基于环境配置的 CPU 资源(以毫秒为单位)。 |
|
| Mixer 遥测允许使用的最大内存数量。 | 可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),根据您的环境配置而定。 |
|
1.9.3.5. Istio Pilot 配置
下面是一个示例,它演示了ServiceMeshControlPlane
的 Istio Pilot 参数,以及可用参数和值的信息。
pilot 参数示例
pilot: resources: requests: cpu: 100m memory: 128Mi autoscaleEnabled: false traceSampling: 100
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
| Pilot 请求的 CPU 资源的百分比。 | 基于环境配置的 CPU 资源(以毫秒为单位)。 |
|
| Pilot 请求的内存量。 | 可用内存,以字节为单位(例如: 200Ki, 50Mi, 5Gi),根据您的环境配置而定。 |
|
| 启用/禁用自动扩展。在小型环境中禁用它。 |
|
|
| 这个值控制随机抽样的频率。注: 在开发或测试时可以增加这个值。 | 有效百分比。 |
|
1.9.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
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
enabled | 启用/禁用 Kiali。默认情况下启用 Kiali 。 |
|
|
dashboard viewOnlyMode | 为 Kiali 控制台启用/禁用只读视图模式。启用只读视图模式时,用户无法使用控制台来更改 Service Mesh。 |
|
|
ingress enabled | 为 Kiali 启用/禁用 ingress。 |
|
|
1.9.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.9.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.9.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
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
tracing enabled | 在 Service Mesh 中启用/禁用追踪。Jaeger 被默认安装。 |
|
|
jaeger template | 指定使用哪个 Jaeger 部署策略。 |
|
|
ServiceMeshControlPlane
资源中的默认模板是 all-in-one
部署策略,它使用 in-memory 存储。对于生产环境,唯一支持的存储选项是 Elasticsearch,因此您必须配置 ServiceMeshControlPlane
来在生产环境中部署 Service Mesh 时请求 production-elasticsearch
模板。
1.9.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"
参数 | 描述 | 值 | 默认值 | 例子 |
---|---|---|---|---|
tracing: enabled | 在 Service Mesh 中启用/禁用追踪。Jaeger 被默认安装。 |
|
| |
ingress: enabled | 为 Jaeger 启用/禁用 ingress。 |
|
| |
jaeger template | 指定使用哪个 Jaeger 部署策略。 |
|
| |
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 内存。 |
流程
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform web 控制台。 -
导航到 Operators
Installed Operators。 - 点 Red Hat OpenShift Service Mesh Operator。
- 点 Istio Service Mesh Control Plane 标签页。
-
点 control plane 文件的名称,例如
basic-install
。 - 点 YAML 标签。
-
编辑 Jaeger 参数,根据您的具体用例,使用
production-elasticsearch
模板参数替换默认的all-in-one
模板。确定缩进格式正确。 - 点 Save。
- 点 Reload。OpenShift Container Platform 重新部署 Jaeger,并根据指定的参数创建 Elasticsearch 资源。
1.9.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 * * *"
参数 | 值 | 描述 |
---|---|---|
enabled | true/ false | 启用或者禁用索引清理任务。 |
numberOfDays | 整数值 | 删除索引前等待的天数。 |
schedule | "55 23 * * *" | 运行任务的 cron 设置 |
有关在 OpenShift Container Platform 中配置 Elasticsearch 的详情,请参考配置 Elasticsearch。
1.9.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
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
| 是否使用 3scale 适配器 |
|
|
| 为 gRPC 服务器设定侦听地址 | 有效端口号 |
|
| 设置最小日志输出级别。 |
|
|
| 是否将日志格式转化为 JSON |
|
|
| 日志是否包含 gRPC 信息 |
|
|
| 是否收集 3scale 系统和后端的指标数据并报告给 Prometheus |
|
|
|
设置 3scale | 有效端口号 |
|
| 在从缓存中移除过期项目前等待的时间(以秒为单位) | 时间间隔(以秒为单位) |
|
| 尝试刷新缓存元素的过期时间 | 时间间隔(以秒为单位) |
|
|
在任何时间可以保存在缓存中的最大项目数。设为 | 有效数量 |
|
| 在缓存更新循环中检索无法访问的主机的次数 | 有效数量 |
|
|
在调用 |
|
|
| 终止到 3scale 系统和后端请求前等待的秒数 | 时间间隔(以秒为单位) |
|
| 在连接关闭前设置连接的最大秒数(+/-10% 抖动) | 时间间隔(以秒为单位) | 60 |