使用 Istioctl 安装

    本指南使用可以高度自定义 Istio 控制平面和数据平面的 命令行工具。 该命令行工具具有用户输入校验功能,可以防止错误的安装和自定义选项。

    使用这些命令说明,您可以选择 Istio 的任何内置然后 根据您的特定需求进一步自定义配置。

    开始之前,请检查以下前提条件:

    1. 下载 Istio 发行版本
    2. 执行任何必要的。
    3. 检查 Pods 和 Services 的要求

    使用默认配置文件安装 Istio

    最简单的选择是安装 default Istio 配置文件使用以下命令:

    此命令将在您配置的 Kubernetes 集群上安装 default 配置文件。 default 配置文件建立生产环境的良好起点,这与旨在评估广泛的 Istio 功能特性的较大的 demo 配置文件不同。

    如果要在 default 配置文件之上启用 Grafana dashboard,用下面的命令设置 addonComponents.grafana.enabled 配置参数:

    1. $ istioctl manifest apply --set addonComponents.grafana.enabled=true

    通常,您可以像使用 一样在 istioctl 中配置 --set 标志。 唯一的区别是必须为配置路径增加 values. 前缀,因为这是 Helm 透传 API 的路径,如下所述。

    从外部 Chart 安装

    通常,istioctl 使用内置 Chart 生成安装清单。这些 Chart 与 istioctl 一起发布,用于审核和自定义,它们 放置在 install/kubernetes/operator/charts 目录下。 除了使用内置 Chart 外,istioctl 还可以使用外部 Chart 生成安装清单。要选择外部 Chart ,请配置 installPackagePath 参数(接收本地文件系统路径):

    1. $ istioctl manifest apply --set installPackagePath=< base directory where installed >/istio-releases/istio-1.6.0/install/kubernetes/operator/charts

    如果使用 istioctl 1.6.0 二进制文件,该命令执行结果与通过 istioctl manifest apply 安装相同,因为它指向的 Chart 与内置 Chart 相同。 除了试验或测试新特性之外,我们建议使用内置 Chart 而不是外部提供,以确保 istioctl 二进制文件与 Chart 的兼容性。

    安装其他配置文件

    可以通过在命令行上设置配置文件名称安装其他 Istio 配置文件到群集中。 例如,可以使用以下命令,安装 demo 配置文件:

    1. $ istioctl manifest apply --set profile=demo

    您可以使用以下 istioctl 命令来列出 Istio 配置文件名称:

    1. $ istioctl profile list
    2. Istio configuration profiles:
    3. remote
    4. separate
    5. default
    6. demo
    7. empty
    8. minimal

    显示配置文件的配置

    您可以查看配置文件的配置设置。例如,通过以下命令查看 default 配置文件的设置:

    1. $ istioctl profile dump demo
    2. addonComponents:
    3. grafana:
    4. enabled: true
    5. kiali:
    6. enabled: true
    7. prometheus:
    8. enabled: true
    9. tracing:
    10. enabled: true
    11. components:
    12. egressGateways:
    13. - enabled: true
    14. k8s:
    15. resources:
    16. requests:
    17. cpu: 10m
    18. memory: 40Mi
    19. name: istio-egressgateway
    20. ...

    要查看整个配置的子集,可以使用 --config-path 标志,该标志仅选择部分给定路径下的配置:

    1. $ istioctl profile dump --config-path components.pilot demo
    2. enabled: true
    3. k8s:
    4. env:
    5. - name: POD_NAME
    6. valueFrom:
    7. fieldRef:
    8. apiVersion: v1
    9. - name: POD_NAMESPACE
    10. valueFrom:
    11. fieldRef:
    12. apiVersion: v1
    13. fieldPath: metadata.namespace
    14. - name: GODEBUG
    15. value: gctrace=1
    16. - name: PILOT_TRACE_SAMPLING
    17. - name: CONFIG_NAMESPACE
    18. value: istio-config
    19. ...

    显示配置文件中的差异

    profile diff 子命令可用于显示配置文件之间的差异,在将更改应用于集群之前,这对于检查自定义的效果很有用。

    您可以使用以下命令显示 default 和 demo 配置文件之间的差异:

    1. $ istioctl profile diff default demo
    2. gateways:
    3. egressGateways:
    4. - - enabled: false
    5. + - enabled: true
    6. ...
    7. k8s:
    8. requests:
    9. - cpu: 100m
    10. - memory: 128Mi
    11. + cpu: 10m
    12. + memory: 40Mi
    13. strategy:
    14. ...

    安装前生成清单

    您可以在安装 Istio 之前使用 manifest generate 子命令生成清单,而不是 manifest apply。 例如,使用以下命令为 default 配置文件生成清单:

    根据需要检查清单,然后使用以下命令应用清单:

    1. $ kubectl apply -f $HOME/generated-manifest.yaml

    由于集群中的资源不可用,此命令可能显示暂时错误。

    1. $ istioctl manifest generate > 1.yaml
    2. $ istioctl manifest generate -f samples/operator/pilot-k8s.yaml > 2.yaml
    3. $ istioctl manifest diff 1.yam1 2.yaml
    4. Differences of manifests are:
    5. Object Deployment:istio-system:istio-pilot has diffs:
    6. spec:
    7. template:
    8. spec:
    9. containers:
    10. '[0]':
    11. resources:
    12. requests:
    13. cpu: 500m -> 1000m
    14. memory: 2048Mi -> 4096Mi
    15. nodeSelector: -> map[master:true]
    16. tolerations: -> [map[effect:NoSchedule key:dedicated operator:Exists] map[key:CriticalAddonsOnly
    17. operator:Exists]]
    18. Object HorizontalPodAutoscaler:istio-system:istio-pilot has diffs:
    19. spec:
    20. maxReplicas: 5 -> 10
    21. minReplicas: 1 -> 2

    验证安装成功

    您可以使用 verify-install 命令检查 Istio 安装是否成功,它将集群上的安装与您指定的清单进行比较。

    如果未在部署之前生成清单,请运行以下命令以现在生成它:

    1. $ istioctl manifest generate <your original installation options> > $HOME/generated-manifest.yaml

    然后运行以下 verify-install 命令以查看安装是否成功:

    1. $ istioctl verify-install -f $HOME/generated-manifest.yaml

    定制配置

    除了安装 Istio 的任何内置组件, istioctl manifest 提供了用于自定义配置的完整 API。

    可以使用命令上的 --set 选项分别设置此 API 中的配置参数。例如,要在 default 配置文件之上启用控制面安全特性,请使用以下命令:

    1. $ istioctl manifest apply --set values.global.controlPlaneSecurityEnabled=true

    或者,可以在 YAML 文件中指定 IstioOperator 配置,并使用 -f 选项将其传给 istioctl

    1. $ istioctl manifest apply -f samples/operator/pilot-k8s.yaml

    为了向后兼容,还完全支持 。 若要在命令行中设置它们,请在选项名称前面加上 “values.“。 如下所示,下面命令就重写了 Helm 的 pilot.traceSampling 配置选项:

    1. $ istioctl manifest apply --set values.pilot.traceSampling=0.1

    Customize Istio settings using the Helm API 所述,Helm 值也可以在 IstioOperator 定义中设置。

    IstioOperator API 定义的 components 如下表所示:

    除了核心的 Istio 组件之外,还提供了第三方附加功能和组件。它们可以通过配置 IstioOperator API 的 addonComponents spec,或者使用 Helm 透传 API 来启动。

    1. apiVersion: install.istio.io/v1alpha1
    2. spec:
    3. values:
    4. grafana:
    5. enabled: true

    从上表中识别功能部件或组件的名称后,可以使用 API 设置值 使用 --set 标志,或创建一个覆盖文件并使用 --filename 标志。 --set 标志自定义一些参数的效果很好。 覆盖文件旨在进行更广泛的自定义,或者跟踪配置更改。

    最简单的自定义是从配置配置文件默认值打开或关闭功能或组件。

    要在默认配置配置文件中禁用遥测功能,请使用以下命令:

    1. $ istioctl manifest apply --set components.telemetry.enabled=false

    或者,您可以使用配置覆盖文件禁用遥测功能:

    1. 创建一个文件 telemetry_off.yaml 文件并且写入以下内容:
    1. apiVersion: install.istio.io/v1alpha1
    2. kind: IstioOperator
    3. spec:
    4. components:
    5. telemetry:
    6. enabled: false
    1. telemetry_off.yaml 覆盖文件与 manifest apply 命令一起使用:
    1. $ istioctl manifest apply -f telemetry_off.yaml

    另一个定制是为功能部件和组件选择不同的命名空间。 以下是一个定制命名空间的例子:

    1. apiVersion: install.istio.io/v1alpha1
    2. kind: IstioOperator
    3. metadata:
    4. namespace: istio-system
    5. spec:
    6. components:
    7. citadel:
    8. namespace: istio-citadel

    安装此文件将应用默认配置文件,并将组件安装到以下命名空间中:

    • Citadel 组件 将被安装到 istio-citadel 命名空间
    • 剩余的 Istio 组件安装到 istio-system 命名空间

    IstioOperator API 允许以一致的方式自定义每个组件的 Kubernetes 设置。

    每一个组件都有一个允许修改配置的 ,使用此列表来标识要自定义的设置:

    1. Resources
    2. Replica count
    3. PodDisruptionBudget
    4. Service annotations
    5. Priority class name
    6. Affinity and anti-affinity
    7. Toleration
    8. Env

    以下示例覆盖文件调整了 Pilot 的 resource 和 pod 水平自动伸缩的设置:

    1. apiVersion: install.istio.io/v1alpha1
    2. kind: IstioOperator
    3. spec:
    4. components:
    5. pilot:
    6. k8s:
    7. resources:
    8. requests:
    9. cpu: 1000m # override from default 500m
    10. memory: 4096Mi # ... default 2048Mi
    11. hpaSpec:
    12. maxReplicas: 10 # ... default 5
    13. minReplicas: 2 # ... default 1
    14. nodeSelector:
    15. master: "true"
    16. tolerations:
    17. - key: dedicated
    18. operator: Exists
    19. effect: NoSchedule
    20. - key: CriticalAddonsOnly
    21. operator: Exists

    使用 manifest apply 将修改后的设置应用于集群:

      IstioOperator API 使用 values 字段直接调用 的接口对字段进行设值。

      下面的 YAML 文件可以通过 Helm API 配置全局和 Pilot 配置:

      一些参数将在 Helm 和 IstioOperator API 中暂时存在,包括 Kubernetes 资源, 命名空间和启用设置。Istio 社区建议使用 IstioOperator API,因为它更专一,经过验证并遵循社区毕业流程

      卸载 Istio

      可以使用以下命令来卸载 Istio:

      使用 Istioctl Analyze 诊断配置

      演示如何使用 istioctl analyze 来识别配置中的潜在问题。

      向您展示如何使用 istioctl describe 来验证您的网格中的 pod 的配置。

      DNS 证书管理

      在 Istio 中配置和管理 DNS 证书。

      关于 Istio 基于 operator 的安装和控制平面管理特性的介绍。

      istioctl analyze 介绍

      通过分析 Istio 配置来发现潜在问题和一般问题。

      一种更安全管理 Istio webhook 的方法。