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

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

  • iptables 是大多数 Kubernetes 群集中使用的默认后端。 它简单且受到良好支持,但不如 IPVS 那么高效或智能。
  • IPVS 使用 Linux 虚拟服务器,这是内置于 Linux 内核中的第 3/4 层负载均衡器。 与默认的 iptables 配置相比,IPVS 提供了许多优势,包括状态感知、连接跟踪和更智能的负载均衡。 IPVS 不支持 Azure 网络策略

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

注意

如果需要,可以禁用 AKS 托管的 kube-proxy DaemonSet 以支持自带 CNI

重要

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

准备阶段

安装 Azure CLI aks-preview 扩展

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

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

    az extension update --name aks-preview
    

注册 KubeProxyConfigurationPreview 功能标志

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

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

    状态显示为“已注册”需要几分钟时间

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

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

    az provider register --namespace Microsoft.ContainerService
    

kube-proxy 配置选项

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

  • enabled:确定 kube-proxy DaemonSet 的部署。 默认为 true
  • mode:可以设置为 IPTABLESIPVS。 默认为 IPTABLES
  • ipvsConfig:如果 modeIPVS,则此对象包含特定于 IPVS 的配置属性。
    • scheduler:确定要使用哪个连接计划程序。 支持的值包括:
      • LeastConnection:向连接最少的后端 Pod 发送连接。
      • RoundRobin:在后端 Pod 之间平均分配连接。
    • tcpFinTimeoutSeconds:设置 TCP 会话收到 FIN 后的超时长度值。
    • tcpTimeoutSeconds:设置空闲 TCP 会话的超时长度值。
    • udpTimeoutSeconds:设置空闲 UDP 会话的超时长度值。

注意

IPVS 负载均衡单独在每个节点中运行,并且只知道流经本地节点的连接。 这意味着,虽然 LeastConnection 在更高的连接数下会产生更均匀的负载,但当出现较低的连接数(连接数 < 2 * 节点计数)时,流量可能相对不均衡

在新的或现有的 AKS 群集中使用 kube-proxy

kube-proxy 配置是一个群集范围的设置。 无需更新你的服务。

警告

更改 kube-proxy 配置可能会导致群集服务流量流稍微中断。

  1. 使用所需的 kube-proxy 配置创建配置文件。 例如,以下配置使用 LeastConnection 计划程序来启用 IPVS,并将 TCP 超时设置为 900 秒。

    {
      "enabled": true,
      "mode": "IPVS",
      "ipvsConfig": {
        "scheduler": "LeastConnection",
        "TCPTimeoutSeconds": 900,
        "TCPFINTimeoutSeconds": 120,
        "UDPTimeoutSeconds": 300
      }
    }
    
  2. 使用 az aks createaz aks update 命令,通过配置文件创建新群集或更新现有群集,并将 --kube-proxy-config 参数设置为该配置文件。

    # Create a new cluster
    az aks create -g <resourceGroup> -n <clusterName> --kube-proxy-config kube-proxy.json
    
    # Update an existing cluster
    az aks update -g <resourceGroup> -n <clusterName> --kube-proxy-config kube-proxy.json
    

后续步骤

本文介绍了如何在 Azure Kubernetes 服务 (AKS) 中配置 kube-proxy。 若要详细了解 AKS 中的负载均衡,请参阅以下文章: