定制安装配置

    1. 执行必要的平台安装
    2. 检查 。

    除了安装 Istio 内置的 配置档, 提供了一套完整的用于定制配置的 API。

    此 API 中的配置参数能用命令行选项 --set 独立设置。 例如,要在 default 配置档中启动调试日志特性,使用这个命令:

    或者,可以在 YAML 文件中指定 IstioOperator 的配置,然后用 -f 选项传递给 istioctl

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

    为了向后兼容,以前的 Helm 安装选项,除了 Kubernetes 资源设置之外,均被完整的支持。 为了在命令行设置他们,在选项名前面加上 “values.“。 例如,下面的命令覆盖了 Helm 配置选项 pilot.traceSampling

    1. $ istioctl install --set values.pilot.traceSampling=0.1

    Helm 值也可以在 IstioOperator CR(YAML 文件)中设置,就像 中描述的那样。

    如果您需要配置 Kubernetes 资源方面的设置,请用定制 Kubernetes 设置中介绍的 IstioOperator API。

    IstioOperator API 定义的组件如下面表格所示:

    针对每一个组件的配置内容通过 components.<component name> 下的 API 中提供。 例如,要用 API 改变(改为 false)pilot 组件的 enabled 设置, 使用 --set components.pilot.enabled=false, 或在 IstioOperator 资源中就像这样来设置:

    1. apiVersion: install.istio.io/v1alpha1
    2. kind: IstioOperator
    3. spec:
    4. components:
    5. pilot:
    6. enabled: false

    所有的组件共享一个通用 API,用来修改 Kubernetes 特定的设置,它在 components.<component name>.k8s 路径下, 后续章节将会进一步描述它。

    定制 Kubernetes 设置

    IstioOperator API 支持以一致性的方式定制每一个组件的 Kubernetes 设置。

    1. Readiness probes
    2. HorizontalPodAutoscaler
    3. Pod annotations
    4. ImagePullPolicy
    5. Node selector
    6. Toleration
    7. Env

    所有这些 Kubernetes 设置均使用 Kubernetes API 定义,因此可以参考 Kubernetes 文档

    下面覆盖文件的例子调整 Pilot 的资源限制和 Pod 水平伸缩的设置:

    istioctl install 把改变的设置应用到集群:

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

    IstioOperator API 使用 values 字段为 Helm API 保留了一个透传接口。

    下面的 YAML 文件通过 Helm API 来配置 global 和 Pilot 的设置:

    1. apiVersion: install.istio.io/v1alpha1
    2. kind: IstioOperator
    3. spec:
    4. values:
    5. pilot:
    6. traceSampling: 0.1 # override from 1.0
    7. global:
    8. monitoringPort: 15014

    诸如 Kubernetes 资源、命名空间和开关设置等参数暂时并存在 Helm 和 IstioOperator API 中。 Istio 社区推荐使用 API ,因为它更一致、更有效、且遵循.

    配置网关

    网关因为支持定义多个入站、出站网关,所以它是一种特殊类型的组件。 在 中,网关被定义为列表类型。 default 配置档会安装一个名为 istio-ingressgateway 的入站网关。 您可以检查这个网关的默认值:

    1. $ istioctl profile dump --config-path components.ingressGateways
    2. $ istioctl profile dump --config-path values.gateways.istio-ingressgateway

    这些命令显示了网关的 IstioOperator 和 Helm 两种设置,它们一起用于定义生成的网关资源。 内置的网关就像其他组件一样的可以被定制。

    从 1.7 开始,覆盖路由配置时必须指定路由名称。 不指定名称时,也不会再设置 istio-ingressgatewayistio-egressgateway 做为默认名称。

    新的用户网关可以通过添加新的列表条目来创建:

    1. apiVersion: install.istio.io/v1alpha1
    2. kind: IstioOperator
    3. spec:
    4. profile: empty
    5. components:
    6. ingressGateways:
    7. - name: ilb-gateway
    8. namespace: user-ingressgateway-ns
    9. enabled: true
    10. # Copy settings from istio-ingressgateway as needed.
    11. values:
    12. gateways:
    13. istio-ingressgateway:
    14. debug: error

    高级安装定制

    istioctlinstallmanifest generateprofile 命令可以使用以下任意源来生成 chart 和 配置档:

    • 内置的 chart。如果没有设置 --manifests,则用 default。 内置的 chart 和 Istio .tgz 发行包内 manifests/ 目录下的内容相同。
    • GitHub 上的 chart,例如,istioctl install --manifests https://github.com/istio/istio/releases/download/1.16.0/istio-1.16.0-linux-arm64.tar.gz

    本地文件系统的 chart 和配置档可以通过编辑 manifests/ 目录下的文件定制。 要进行广泛的更改,建议拷贝 manifests 目录,然后修改副本。 但请注意,manifests 目录中的内容结构必须要保留。

    存放在目录 manifests/profiles/ 下面配置档,可编辑,也可通过创建一个指定配置档名称和 .yaml 新文件的方式来添加。 istioctl 扫描 profiles 子目录,所有找到的配置档都可以在 IstioOperatorSpec 的 profile 字段中通过名称引用。 在用户的覆盖配置被应用前,内建 profile 默认的 YAML 文件被覆写。 例如,您可以创建一个名为 custom1.yaml 的新profile,新配置档在 default 配置档的基础上定制了部分设置,然后应用用户的覆盖文件:

    1. $ istioctl manifest generate --manifests mycharts/ --set profile=custom1 -f path-to-user-overlay.yaml

    在此用例中,文件 custom1.yaml 和 将覆盖 default.yaml 文件,以得到作为 manifest generation 输入的最终值。

    通常,没有必要创建新的配置档,这是因为传入多个覆盖文件也可以达到同样的效果。 例如,上面命令等价于传入两个用户覆盖文件:

    1. $ istioctl manifest generate --manifests mycharts/ -f manifests/profiles/custom1.yaml -f path-to-user-overlay.yaml

    只有需要在 IstioOperatorSpec 中指向一个配置档名称时,才需要创建定制配置档。

    为输出清单打补丁

    传递给 istioctlIstioOperator CR,用于生成输出清单,该清单包含将应用到集群的 Kubernetes 资源。 在输出的清单已经生成但没有应用之时,此清单可以通过 IstioOperator API 深度定制以增加、修改或删除资源。

    下面例子覆盖文件(patch.yaml)展示输出清单补丁这种类型可以做什么:

    将此文件传给 istioctl manifest generate -f patch.yaml 会把上面的补丁应用到 default 配置档的输出清单。 两个打了补丁的资源将做如下修改(为了简洁,只显示资源的部分内容):

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: istiod
    5. spec:
    6. template:
    7. spec:
    8. containers:
    9. - args:
    10. - 60m
    11. env:
    12. - name: POD_NAMESPACE
    13. valueFrom:
    14. fieldRef:
    15. apiVersion: v2
    16. fieldPath: metadata.myPath
    17. name: discovery
    18. ports:
    19. - containerPort: 1234
    20. ---
    21. apiVersion: v1
    22. kind: Service
    23. metadata:
    24. name: istiod
    25. spec:
    26. ports:
    27. - name: https-dns
    28. port: 11111

    注意:补丁按照给定的顺序执行。每个补丁基于前面补丁的输出来执行。 在补丁中的路径,如果在输出清单不存在,将被创建。