在 Azure Kubernetes 服务 (AKS) 中配置 kube-proxy(预览版)

kube-proxy 是 Kubernetes 的一个组件,用于处理群集中服务的流量路由。 上游有三个后端可用于第 3/4 层负载均衡 kube-proxyiptablesIPVS以及 nftables

  • iptables 是许多 Kubernetes 群集中使用的默认后端。 它简单且受到良好支持,但不如IPVS高效或智能。
  • IPVS 使用 Linux 虚拟服务器,这是一个内置于 Linux 内核中的第 3/4 层负载均衡器。 IPVS 相对于默认的 iptables 配置提供了许多优势,包括状态感知、连接跟踪和更智能的负载均衡。 IPVS 不支持 Azure 网络策略
  • nftables 是 API 的 iptables 后续版本,旨在提供比更好的 iptables性能和可伸缩性。 nftables代理模式实质上是替代iptablesIPVS模式的方法,性能优于这两种模式中的任何一种,并且建议作为IPVS的替代。

有关详细信息,请参阅 Kubernetes 关于 kube-proxy 的文档

注释

可以禁用 AKS 托管 kube-proxyDaemonSet 以支持 自带 CNI

重要

AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

在您开始之前

  • 如果使用 Azure CLI,则需要扩展 aks-preview 。 请参阅安装 aks-preview Azure CLI 扩展
  • 如果使用 Azure 资源管理器或 REST API,AKS API 版本必须是 2022-08-02-preview 或更高版本。 具体而言,版本 nftables 必须为 2025-09-02-preview 或更高版本。
  • 需要使用注册 KubeProxyConfigurationPreview 功能标志。 请参阅注册 KubeProxyConfigurationPreview 功能标志

安装 aks-preview Azure CLI 扩展

  1. 使用 aks-preview 命令安装 az extension add 扩展。

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令更新到扩展的最新版本。

    az extension update --name aks-preview
    

注册 KubeProxyConfigurationPreview 功能标志

  1. 使用 KubeProxyConfigurationPreview 命令注册 az feature register 功能标志。

    az feature register --namespace "Microsoft.ContainerService" --name "KubeProxyConfigurationPreview"
    

    几分钟后,状态将显示为“已注册”

  2. 使用 az feature show 命令验证注册状态。

    az feature show --namespace "Microsoft.ContainerService" --name "KubeProxyConfigurationPreview"
    
  3. 当状态显示“已注册”时,使用Microsoft.ContainerService命令刷新资源提供程序的az provider register注册。

    az provider register --namespace Microsoft.ContainerService
    

kube-proxy 配置选项

可在 kube-proxy中查看完整的 配置结构。

  • enabled:确定 kube-proxy DaemonSet 的部署。 默认为 true
  • mode:可以设置为IPTABLESIPVSNFTABLES。 默认为 IPTABLES
  • ipvsConfig:如果 modeIPVS,则此对象包含特定于 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 配置可能会导致群集服务流量流轻微中断。

  1. 使用所需的 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"
      }
      
  2. 使用az aks createaz 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 中的负载均衡,请参阅以下文章: