AKS(Azure Kubernetes Service)에서
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더 나은 성능과 확장성을 제공하도록 설계되었습니다. 기본적으로 프록시 모드는nftables및iptables모드를 대체하며, 두 모드보다 성능이 뛰어납니다. 따라서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 확장 설치
aks-preview명령을 사용하여az extension add확장을 설치합니다.az extension add --name aks-previewaz extension update명령을 사용하여 확장의 최신 버전으로 업데이트합니다.az extension update --name aks-preview
KubeProxyConfigurationPreview 기능 플래그 등록
KubeProxyConfigurationPreview명령을 사용하여az feature register기능 플래그를 등록합니다.az feature register --namespace "Microsoft.ContainerService" --name "KubeProxyConfigurationPreview"상태가 Registered로 표시되는 데 몇 분 정도 걸립니다.
az feature show명령을 사용하여 등록 상태를 확인합니다.az feature show --namespace "Microsoft.ContainerService" --name "KubeProxyConfigurationPreview"상태가 등록됨으로 표시되면 명령을 사용하여 리소스 공급자의
Microsoft.ContainerService등록을az provider register새로 고칩니다.az provider register --namespace Microsoft.ContainerService
kube-proxy 구성 옵션
kube-proxy에서 전체 구성 구조를 볼 수 있습니다.
-
enabled:kube-proxyDaemonSet의 배포를 결정합니다. 기본값은true입니다. -
mode: 또는IPTABLESIPVSNFTABLES.로 설정할 수 있습니다. 기본값은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사용하도록 설정하고LeastConnectionTCP 시간 제한을 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
다음 단계
이 문서에서는 AKS(Azure Kubernetes Service)에서 구성하는 kube-proxy 방법을 설명했습니다. AKS의 부하 분산에 대해 자세히 알아보려면 다음 문서를 참조하세요.