使用 Istioctl 安装

请按照本指南安装和配置 Istio 网格,以进行深入评估或用于生产。

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

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

先决条件

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

  1. 下载 Istio 发行版本
  2. 执行任何必要的 特定于平台的设置
  3. 检查 Pods 和 Services 的要求

使用默认配置文件安装 Istio

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

$ istioctl manifest apply

此命令在您定义的集群上安装 default 配置文件 Kubernetes 配置。 默认配置文件是一个很好的开始,用于建立生产环境,这与较大的 demo 配置文件不同, 用于评估广泛的 Istio 功能。

安装其他配置文件

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

$ istioctl manifest apply --set profile=demo

显示可用配置文件的列表

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

$ istioctl profile list
    minimal
    demo
    sds
    default

显示配置文件的配置

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

$ istioctl profile dump
autoInjection:
  components:
    injector:
      enabled: true
      k8s:
        replicaCount: 1
  enabled: true
configManagement:
  components:
    galley:
      enabled: true
      k8s:
        replicaCount: 1
        resources:
          requests:
            cpu: 100m
  enabled: true
defaultNamespace: istio-system
gateways:
  components:
    egressGateway:
      enabled: false
      k8s:
        hpaSpec:
          maxReplicas: 5
          metrics:
          - resource:
              name: cpu
              targetAverageUtilization: 80
            type: Resource
          minReplicas: 1
...

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

$ istioctl profile dump --config-path trafficManagement.components.pilot
enabled: true
k8s:
  env:
  - name: POD_NAME
    valueFrom:
      fieldRef:
        apiVersion: v1
        fieldPath: metadata.name
  - name: POD_NAMESPACE
    valueFrom:
      fieldRef:
        apiVersion: v1
        fieldPath: metadata.namespace
  - name: GODEBUG
    value: gctrace=1
  - name: PILOT_TRACE_SAMPLING
    value: "1"
  - name: CONFIG_NAMESPACE
    value: istio-config
  hpaSpec:
    maxReplicas: 5
    metrics:
    - resource:
        name: cpu
        targetAverageUtilization: 80
      type: Resource
    minReplicas: 1
    scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: istio-pilot
  readinessProbe:
    httpGet:
      path: /ready
      port: 8080
    initialDelaySeconds: 5
    periodSeconds: 30
    timeoutSeconds: 5
  resources:
    requests:
      cpu: 500m
      memory: 2048Mi

显示配置文件中的差异

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

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

$ istioctl profile dump default > 1.yaml
$ istioctl profile dump demo > 2.yaml
$ istioctl profile diff 1.yaml 2.yaml

安装前生成清单

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

$ istioctl manifest generate > $HOME/generated-manifest.yaml

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

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

显示清单差异

您可以使用以下命令显示默认配置文件和自定义安装之间生成的清单中的差异:

$ istioctl manifest generate > 1.yaml
$ istioctl manifest generate -f samples/pilot-k8s.yaml > 2.yaml
$ istioctl manifest diff 1.yam1 2.yaml

验证安装成功

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

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

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

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

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

定制配置

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

可以使用命令上的 --set 选项分别设置此 API 中的配置参数。 例如,要在默认配置文件中禁用遥测功能,请使用以下命令:

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

或者,可以使用 istioctl-f 选项来指定具有完整配置的YAML文件:

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

识别 Istio 功能或组件

IstioControlPlane API 按功能对控制平面组件进行分组,如下表所示:

功能组件
BaseCRDs
Traffic ManagementPilot
PolicyPolicy
TelemetryTelemetry
SecurityCitadel
SecurityNode agent
SecurityCert manager
Configuration managementGalley
GatewaysIngress gateway
GatewaysEgress gateway
AutoInjectionSidecar injector

除了核心的 Istio 组件之外,还提供了第三方附加功能和组件:

功能组件
TelemetryPrometheus
TelemetryPrometheus Operator
TelemetryGrafana
TelemetryKiali
TelemetryTracing
ThirdPartyCNI

可以启用或禁用功能,这可以启用或禁用作为功能一部分的所有组件。 可以通过组件,功能部件或全局设置组件安装到的名字空间。

配置功能或组件设置

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

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

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

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

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

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

您还可以使用这种方法来设置组件级配置,例如启用节点代理:

$ istioctl manifest apply --set security.components.nodeAgent.enabled=true

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

apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
  defaultNamespace: istio-system
  security:
    namespace: istio-security
    components:
      citadel:
        namespace: istio-citadel

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

  • Citadel 组件 将被安装到 istio-citadel 命名空间
  • 所有其他安全相关的组件将被安装到 istio-security 命名空间
  • 剩余的 Istio 组件安装到 istio-system 命名空间

自定义 Kubernetes 设置

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

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

  1. Resources
  2. Readiness probes
  3. Replica count
  4. HorizontalPodAutoscaler
  5. PodDisruptionBudget
  6. Pod annotations
  7. Service annotations
  8. ImagePullPolicy
  9. Priority class name
  10. Node selector
  11. Affinity and anti-affinity

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

以下示例覆盖文件可调整 TrafficManagement 功能的资源和 pod 的自动水平缩放的 Pilot 设置:

apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
  trafficManagement:
    components:
      pilot:
        k8s:
          resources:
            requests:
              cpu: 1000m # override from default 500m
              memory: 4096Mi # ... default 2048Mi
          hpaSpec:
            maxReplicas: 10 # ... default 5
            minReplicas: 2  # ... default 1

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

Zip
$ istioctl manifest apply -f @samples/pilot-k8s.yaml@

使用 Helm API 自定义 Istio 设置

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

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

apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
  trafficManagement:
    components:
      pilot:
        values:
          traceSampling: 0.1 # override from 1.0

  # global Helm settings
  values:
    monitoringPort: 15050

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

卸载 Istio

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

$ istioctl manifest generate <your original installation options> | kubectl delete -f -