在 Azure Kubernetes 服务 (AKS) 中配置
kube-proxy 是 Kubernetes 的一个组件,用于处理群集中服务的流量路由。 上游有三个后端可用于第 3/4 层负载均衡 kube-proxy:iptable、IPVS 和 nftable。
- iptables 是大多数 Kubernetes 群集中使用的默认后端。 它简单且受到良好支持,但不如 IPVS 那么高效或智能。
- IPVS 使用 Linux 虚拟服务器,这是内置于 Linux 内核中的第 3/4 层负载均衡器。 与默认的 iptables 配置相比,IPVS 提供了许多优势,包括状态感知、连接跟踪和更智能的负载均衡。 IPVS 不支持 Azure 网络策略。
- nftables 是 iptables API 的后续版本,旨在提供比 iptable 更好的性能和可伸缩性。 nftables 代理模式实质上是 iptable 和 IPVS 模式的替代方法,性能优于其中任一模式,建议将其替代为 IPVS。
有关详细信息,请参阅 Kubernetes 关于 kube-proxy 的文档。
注释
如果需要,可以禁用 AKS 托管的 kube-proxy DaemonSet 以支持自带 CNI。
重要
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
在您开始之前
- 如果使用 Azure CLI,则需要
aks-preview扩展。 请参阅安装aks-previewAzure CLI 扩展。 - 如果使用 ARM 或 REST API,AKS API 版本必须为 2022-08-02-preview 或更高版本。 具体而言,对于 nftables 模式,版本必须为 2025-09-02-preview 或更高版本。
- 需要使用注册
KubeProxyConfigurationPreview功能标志。 请参阅注册KubeProxyConfigurationPreview功能标志。
安装 aks-preview Azure CLI 扩展
使用
aks-preview命令安装az extension add扩展。az extension add --name aks-preview使用
az extension update命令更新到扩展的最新版本。az extension update --name aks-preview
注册 KubeProxyConfigurationPreview 功能标志
使用
KubeProxyConfigurationPreview命令注册az feature register功能标志。az feature register --namespace "Microsoft.ContainerService" --name "KubeProxyConfigurationPreview"几分钟后,状态将显示为“已注册”。
使用
az feature show命令验证注册状态。az feature show --namespace "Microsoft.ContainerService" --name "KubeProxyConfigurationPreview"当状态反映为已注册时,使用 命令刷新
az provider register资源提供程序的注册。az provider register --namespace Microsoft.ContainerService
kube-proxy 配置选项
-
enabled:确定kube-proxyDaemonSet 的部署。 默认为true。 -
mode:可以设置为IPTABLES、IPVS或NFTABLES。 默认为IPTABLES。 -
ipvsConfig:如果mode为IPVS,则此对象包含特定于 IPVS 的配置属性。-
scheduler:确定要使用哪个连接计划程序。 支持的值包括:-
LeastConnection:向连接最少的后端 Pod 发送连接。 -
RoundRobin:在后端 Pod 之间平均分配连接。
-
-
tcpFinTimeoutSeconds:设置 TCP 会话收到 FIN 后的超时长度值。 -
tcpTimeoutSeconds:设置空闲 TCP 会话的超时长度值。 -
udpTimeoutSeconds:设置空闲 UDP 会话的超时长度值。
-
注释
IPVS 负载均衡单独在每个节点中运行,并且只知道流经本地节点的连接。 这意味着,虽然 LeastConnection 在更高的连接数下会产生更均匀的负载,但当出现较低的连接数(连接数 < 2 * 节点计数)时,流量可能相对不均衡
在新的或现有的 AKS 群集中使用 kube-proxy
kube-proxy 配置是一个群集范围的设置。 无需更新你的服务。
警告
更改 kube-proxy 配置可能会导致群集服务流量流稍微中断。
使用所需的
kube-proxy配置创建配置文件。 例如,以下配置使用LeastConnection计划程序来启用 IPVS,并将 TCP 超时设置为 900 秒。{ "enabled": true, "mode": "IPVS", "ipvsConfig": { "scheduler": "LeastConnection", "TCPTimeoutSeconds": 900, "TCPFINTimeoutSeconds": 120, "UDPTimeoutSeconds": 300 } }使用
az aks create或az aks update命令,通过配置文件创建新群集或更新现有群集,并将--kube-proxy-config参数设置为该配置文件。# Create a new cluster az aks create \ --resource-group <resourceGroup> \ --name <clusterName> \ --kube-proxy-config kube-proxy.json \ --generate-ssh-keys # Update an existing cluster az aks update \ --resource-group <resourceGroup> \ --name <clusterName> \ --kube-proxy-config kube-proxy.json
后续步骤
本文介绍了如何在 Azure Kubernetes 服务 (AKS) 中配置 kube-proxy。 若要详细了解 AKS 中的负载均衡,请参阅以下文章: