平台特定先决条件
本文档涵盖了在 Ambient 模式下安装 Istio 的任何特定于平台或环境的先决条件。
平台
Google Kubernetes Engine(GKE)
在 GKE 上,具有 system-node-critical
priorityClassName
的 Istio 组件只能被安装在定义了资源配额的命名空间中。 默认情况下,在 GKE 中,只有kube-system
为node-critical
类定义了资源配额。istio-cni
和ztunnel
都需要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
- 如果您使用 Minikube 以及 Docker 驱动, 必须在
helm install
命令后追加--set cni.cniNetnsDir="/var/run/docker/netns"
, 以便istio-cni
节点代理能够正确管理和捕获节点上的 Pod。
MicroK8s
- 如果您使用的是 MicroK8s, 由于 MicroK8s 对于 CNI 配置和二进制文件使用了非标准位置, 则必须在
helm install
命令附加--set values.cni.cniConfDir=/var/snap/microk8s/current/args/cni-network --set values.cni.cniBinDir=/var/snap/microk8s/current/opt/cni/bin
。
K3D
如果您使用 k3d 和默认的 flannel CNI, 则必须在您的
istioctl install
或helm install
命令中附加--set values.cni.cniConfDir=/var/lib/rancher/k3s/agent/etc/cni/net.d --set values.cni.cniBinDir=/bin/
以使用ambient
配置文件安装 Istio。创建一个集群并禁用
Traefik
,这样它就不会与 Istio 的入口网关冲突:$ k3d cluster create --api-port 6550 -p '9080:80@loadbalancer' -p '9443:443@loadbalancer' --agents 2 --k3s-arg '--disable=traefik@server:*'
使用
istioctl
通过ambient
配置文件安装 Istio:$ istioctl install --set profile=ambient --skip-confirmation --set values.cni.cniConfDir=/var/lib/rancher/k3s/agent/etc/cni/net.d --set values.cni.cniBinDir=/bin
K3S
- 如果您使用 K3S 及其捆绑的 CNI 之一, 则必须在
helm install
命令中附加--set values.cni.cniConfDir=/var/lib/rancher/k3s/agent/etc/cni/net.d --set values.cni.cniBinDir=/var/lib/rancher/k3s/data/current/bin/
, 因为 K3S 使用非标准位置来存储 CNI 配置和二进制文件。 根据 K3S 文档这些非标准位置也可以被覆盖。 如果您将 K3S 与自定义的非捆绑 CNI 一起使用, 则必须为这些 CNI 配置使用正确的路径,例如/etc/cni/net.d
- 有关详细信息,请参阅 K3S 文档。
CNI
Cilium
Cilium 目前默认主动删除其他 CNI 插件及其配置, 并且必须配置
cni.exclusive = false
才能正确支持链接。 有关更多详细信息,请参阅 Cilium 文档。由于 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 #49277 和 CiliumClusterWideNetworkPolicy 了解更多详细信息。