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 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.
시작하기 전에
- Azure CLI를 사용하는 경우
aks-preview
확장이 필요합니다.aks-preview
Azure CLI 확장 설치를 참조하세요. - ARM 또는 REST API를 사용하는 경우 AKS API 버전은 2022-08-02-preview 이상이어야 합니다.
KubeProxyConfigurationPreview
기능 플래그를 등록해야 합니다.KubeProxyConfigurationPreview
기능 플래그 등록을 참조하세요.
aks-preview
Azure CLI 확장 설치
az extension add
명령을 사용하여aks-preview
확장을 설치합니다.az extension add --name aks-preview
az extension update
명령을 사용하여 확장의 최신 버전으로 업데이트합니다.az extension update --name aks-preview
KubeProxyConfigurationPreview
기능 플래그 등록
az feature register
명령을 사용하여KubeProxyConfigurationPreview
기능 플래그를 등록합니다.az feature register --namespace "Microsoft.ContainerService" --name "KubeProxyConfigurationPreview"
상태가 Registered로 표시되는 데 몇 분 정도 걸립니다.
또한
az feature show
명령을 사용하여 등록 상태를 확인합니다.az feature show --namespace "Microsoft.ContainerService" --name "KubeProxyConfigurationPreview"
상태가 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
:mode
가IPVS
인 경우 이 개체에는 IPVS 관련 구성 속성이 포함됩니다.scheduler
: 사용할 연결 스케줄러를 결정합니다. 지원되는 값은 ,LeastConnection
: 연결이 가장 적은 백 엔드 Pod에 연결을 보냅니다.RoundRobin
: 백 엔드 Pod 간의 연결을 균등하게 분산합니다.
tcpFinTimeoutSeconds
: TCP 세션이 FIN을 수신한 후 시간 제한 길이 값을 설정합니다.tcpTimeoutSeconds
: 유휴 TCP 세션의 시간 제한 길이 값을 설정합니다.udpTimeoutSeconds
: 유휴 UDP 세션의 시간 제한 길이 값을 설정합니다.
참고 항목
IPVS 부하 분산은 각 노드에서 독립적으로 작동하며 로컬 노드를 통과하는 연결만 인식합니다. 즉, LeastConnection
은 연결 수가 많을수록 로드가 더 균일해지는 반면, 연결 수가 적으면(연결 수 < 2 * 노드 수) 트래픽이 상대적으로 불균형할 수 있음을 의미합니다.
신규 또는 기존 AKS 클러스터에서 kube-proxy
사용
kube-proxy
구성은 클러스터 전체 설정입니다. 서비스를 업데이트할 필요가 없습니다.
Warning
kube-proxy 구성을 변경하면 클러스터 서비스 트래픽 흐름이 약간 중단될 수 있습니다.
원하는
kube-proxy
구성으로 구성 파일을 만듭니다. 예를 들어, 다음 구성은LeastConnection
스케줄러를 사용하여 IPVS를 사용하도록 설정하고 TCP 제한 시간을 900초로 설정합니다.{ "enabled": true, "mode": "IPVS", "ipvsConfig": { "scheduler": "LeastConnection", "TCPTimeoutSeconds": 900, "TCPFINTimeoutSeconds": 120, "UDPTimeoutSeconds": 300 } }
새 클러스터를 만들거나 구성 파일에 설정된
--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의 부하 분산에 대해 자세히 알아보려면 다음 문서를 참조하세요.
Azure Kubernetes Service