다음을 통해 공유


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

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

  • iptables는 대부분의 Kubernetes 클러스터에서 사용되는 기본 백 엔드입니다. 간단하고 잘 지원되지만 IPVS만큼 효율적이거나 지능적이지는 않습니다.
  • IPVS는 Linux 커널에 기본 제공된 계층 3/4 부하 분산 장치인 Linux 가상 서버를 사용합니다. IPVS는 상태 인식, 연결 추적 및 보다 지능적인 부하 분산을 포함하여 기본 iptables 구성에 비해 더 많은 이점을 제공합니다. IPVS는 Azure 네트워크 정책을 지원하지 않습니다.

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

참고 항목

원하는 경우 AKS 관리 kube-proxy DaemonSet를 사용하지 않도록 설정하여 bring-your-own CNI를 지원할 수 있습니다.

Important

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

시작하기 전에

aks-preview Azure CLI 확장 설치

  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"
    

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

  2. 또한 az feature show 명령을 사용하여 등록 상태를 확인합니다.

    az feature show --namespace "Microsoft.ContainerService" --name "KubeProxyConfigurationPreview"
    
  3. 상태가 Registered(등록됨)를 반영하면 az provider register 명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을 새로 고칩니다.

    az provider register --namespace Microsoft.ContainerService
    

kube-proxy 구성 옵션

AKS 클러스터 스키마에서 전체 kube-proxy 구성 구조를 볼 수 있습니다.

  • enabled: kube-proxy DaemonSet의 배포를 결정합니다. 기본값은 true입니다.
  • mode: IPTABLES 또는 IPVS로 설정할 수 있습니다. 기본값은 IPTABLES입니다.
  • ipvsConfig: modeIPVS인 경우 이 개체에는 IPVS 관련 구성 속성이 포함됩니다.
    • scheduler: 사용할 연결 스케줄러를 결정합니다. 지원되는 값은 ,
      • LeastConnection: 연결이 가장 적은 백 엔드 Pod에 연결을 보냅니다.
      • RoundRobin: 백 엔드 Pod 간의 연결을 균등하게 분산합니다.
    • tcpFinTimeoutSeconds: TCP 세션이 FIN을 수신한 후 시간 제한 길이 값을 설정합니다.
    • tcpTimeoutSeconds: 유휴 TCP 세션의 시간 제한 길이 값을 설정합니다.
    • udpTimeoutSeconds: 유휴 UDP 세션의 시간 제한 길이 값을 설정합니다.

참고 항목

IPVS 부하 분산은 각 노드에서 독립적으로 작동하며 로컬 노드를 통과하는 연결만 인식합니다. 즉, LeastConnection은 연결 수가 많을수록 로드가 더 균일해지는 반면, 연결 수가 적으면(연결 수 < 2 * 노드 수) 트래픽이 상대적으로 불균형할 수 있음을 의미합니다.

신규 또는 기존 AKS 클러스터에서 kube-proxy 사용

kube-proxy 구성은 클러스터 전체 설정입니다. 서비스를 업데이트할 필요가 없습니다.

Warning

kube-proxy 구성을 변경하면 클러스터 서비스 트래픽 흐름이 약간 중단될 수 있습니다.

  1. 원하는 kube-proxy 구성으로 구성 파일을 만듭니다. 예를 들어, 다음 구성은 LeastConnection 스케줄러를 사용하여 IPVS를 사용하도록 설정하고 TCP 제한 시간을 900초로 설정합니다.

    {
      "enabled": true,
      "mode": "IPVS",
      "ipvsConfig": {
        "scheduler": "LeastConnection",
        "TCPTimeoutSeconds": 900,
        "TCPFINTimeoutSeconds": 120,
        "UDPTimeoutSeconds": 300
      }
    }
    
  2. 새 클러스터를 만들거나 구성 파일에 설정된 --kube-proxy-config 매개 변수와 함께 az aks create 또는 az aks update 명령을 사용하여 구성 파일로 기존 클러스터를 업데이트합니다.

    # 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의 부하 분산에 대해 자세히 알아보려면 다음 문서를 참조하세요.