AKS(Azure Kubernetes Service)에서 kube-proxy 구성(미리 보기)

kube-proxy는 클러스터 내 서비스에 대한 라우팅 트래픽을 처리하는 Kubernetes의 구성 요소입니다. 업스트림kube-proxy에는 계층 3/4 부하 분산에 사용할 수 있는 세 가지 iptables백 엔드가 IPVSnftables있습니다.

  • iptables 는 많은 Kubernetes 클러스터에서 사용되는 기본 백 엔드입니다. 간단하고 잘 지원되지만 효율적이거나 지능적이지 IPVS는 않습니다.
  • IPVS 는 Linux 커널에 기본 제공되는 계층 3/4 부하 분산 장치인 Linux 가상 서버를 사용합니다. IPVS 는 상태 인식, 연결 추적 및 보다 지능적인 부하 분산을 포함하여 기본 iptables 구성에 비해 많은 이점을 제공합니다. IPVS 는 Azure 네트워크 정책을 지원하지 않습니다.
  • nftables 는 API의 iptables 후속 작업이며 보다 iptables더 나은 성능과 확장성을 제공하도록 설계되었습니다. 기본적으로 프록시 모드는 nftablesiptables 모드를 대체하며, 두 모드보다 성능이 뛰어납니다. 따라서 IPVS 모드로 대체하는 것을 권장합니다.

자세한 내용은 kube-proxy에 대한 Kubernetes 설명서를 참조하세요.

참고

AKS 관리 kube-proxyDaemonSet를 사용하지 않도록 설정하여 사용자 고유의 CNI를 지원할 수 있습니다.

중요

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능을 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

시작하기 전에

  • Azure CLI를 사용하는 경우 확장이 aks-preview 필요합니다. aks-previewAzure CLI 확장 설치를 참조하세요.
  • Azure Resource Manager 또는 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"
    

    상태가 Registered로 표시되는 데 몇 분 정도 걸립니다.

  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 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
    

다음 단계

이 문서에서는 AKS(Azure Kubernetes Service)에서 구성하는 kube-proxy 방법을 설명했습니다. AKS의 부하 분산에 대해 자세히 알아보려면 다음 문서를 참조하세요.