平台特定先决条件

本文档涵盖了在 Ambient 模式下安装 Istio 的任何特定于平台或环境的先决条件。

平台

Google Kubernetes Engine(GKE)

  1. 在 GKE 上,具有 system-node-critical priorityClassName 的 Istio 组件只能被安装在定义了资源配额的命名空间中。 默认情况下,在 GKE 中,只有 kube-systemnode-critical 类定义了资源配额。istio-cniztunnel 都需要 node-ritic 类, 因此在 GKE 中,这两个组件需要:

    • 被安装到 kube-system不是 istio-system

    • 被安装到另一个已手动创建资源配额的命名空间中(如 istio-system),例如:

      apiVersion: v1
      kind: ResourceQuota
      metadata:
        name: gcp-critical-pods
        namespace: istio-system
      spec:
        hard:
          pods: 1000
        scopeSelector:
          matchExpressions:
          - operator: In
            scopeName: PriorityClass
            values:
            - system-node-critical
      

Minikube

  1. 如果您使用 Minikube 以及 Docker 驱动, 必须在 helm install 命令后追加 --set cni.cniNetnsDir="/var/run/docker/netns", 以便 istio-cni 节点代理能够正确管理和捕获节点上的 Pod。

CNI

Cilium

  1. Cilium 目前默认主动删除其他 CNI 插件及其配置, 并且必须配置 cni.exclusive = false 才能正确支持链接。 有关更多详细信息,请参阅 Cilium 文档

  2. 由于 Cilium 管理节点身份并在内部允许节点级健康探针到 Pod 的白名单, 在 Cilium CNI 安装下的 Istio Ambient 模式中应用 default-DENY 的 NetworkPolicy, 将会导致被 Cilium 默认免于 NetworkPolicy 执行的 kubelet 健康探针被阻塞。

    这可以通过应用以下 CiliumClusterWideNetworkPolicy 来解决:

    apiVersion: "cilium.io/v2"
    kind: CiliumClusterwideNetworkPolicy
    metadata:
      name: "allow-ambient-hostprobes"
    spec:
      description: "Allows SNAT-ed kubelet health check probes into ambient pods"
      endpointSelector: {}
      ingress:
      - fromCIDR:
        - "169.254.7.127/32"
    

    请参阅 Issue #49277CiliumClusterWideNetworkPolicy 了解更多详细信息。

这些信息有用吗?
您是否有更多建议和改进意见?

感谢您的反馈!