在 Azure Kubernetes 服务 (AKS) 中配置
kube-proxy 是 Kubernetes 的一个组件,用于处理群集中服务的流量路由。 上游有三个后端可用于第 3/4 层负载均衡 kube-proxy: iptables, IPVS以及 nftables。
-
iptables是许多 Kubernetes 群集中使用的默认后端。 它简单且受到良好支持,但不如IPVS高效或智能。 -
IPVS使用 Linux 虚拟服务器,这是一个内置于 Linux 内核中的第 3/4 层负载均衡器。IPVS相对于默认的iptables配置提供了许多优势,包括状态感知、连接跟踪和更智能的负载均衡。IPVS不支持 Azure 网络策略。 -
nftables是 API 的iptables后续版本,旨在提供比更好的iptables性能和可伸缩性。nftables代理模式实质上是替代iptables和IPVS模式的方法,性能优于这两种模式中的任何一种,并且建议作为IPVS的替代。
有关详细信息,请参阅 Kubernetes 关于 kube-proxy 的文档。
注释
可以禁用 AKS 托管 kube-proxyDaemonSet 以支持 自带 CNI。
重要
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
在您开始之前
- 如果使用 Azure CLI,则需要扩展
aks-preview。 请参阅安装aks-previewAzure CLI 扩展。 - 如果使用 Azure 资源管理器或 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"当状态显示“已注册”时,使用
Microsoft.ContainerService命令刷新资源提供程序的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 在连接数较高的情况下会导致负载更均匀,但当出现少量连接时(# connects < 2 * node count),流量可能会不平衡。
在新的或现有的 AKS 群集中使用 kube-proxy
这个 kube-proxy 配置是整个集群的设置。 无需更新你的服务。
更改 kube-proxy 配置可能会导致群集服务流量流轻微中断。
使用所需的
kube-proxy配置创建配置文件。IPVS:例如,以下配置通过IPVS调度器启用LeastConnection,并将 TCP 超时设置为 900 秒。{ "enabled": true, "mode": "IPVS", "ipvsConfig": { "scheduler": "LeastConnection", "tcpTimeoutSeconds": 900, "tcpFinTimeoutSeconds": 120, "udpTimeoutSeconds": 300 } }nftables:例如,以下配置启用nftables模式。{ "enabled": true, "mode": "NFTABLES" }
使用
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 中的负载均衡,请参阅以下文章: