적용 대상: ✔️ AKS 자동 ✔️ AKS 표준
API Server VNet 통합으로 구성된 AKS(Azure Kubernetes Service) 클러스터는 API 서버 엔드포인트를 AKS가 배포된 VNet의 위임된 서브넷에 직접 투영합니다. API 서버 VNet 통합을 통해 프라이빗 링크나 터널 없이도 API 서버와 클러스터 노드 간의 네트워크 통신이 가능합니다. API 서버는 노드가 활용하도록 구성된 위임된 서브넷의 내부 부하 분산 장치 VIP 뒤에서 사용할 수 있습니다. API 서버 VNet 통합을 사용하면 API 서버와 노드 풀 간의 네트워크 트래픽이 개인 네트워크에서만 유지되도록 할 수 있습니다.
대부분의 프로덕션 워크로드에서 AKS Automatic은 권장되는 기본 AKS 환경입니다. AKS Automatic은 기본적으로 프로덕션 준비가 되어 있으며 미리 구성된 클러스터 보안 기능으로 API Server VNet 통합을 포함합니다. AKS 표준에서 API Server VNet 통합은 선택 사항이며 클러스터를 만들거나 기존 클러스터를 업데이트하는 동안 사용하도록 설정합니다.
AKS Automatic에 대해 자세히 알아보려면 Azure Kubernetes Service(AKS) Automatic이란?
AKS Automatic 및 AKS Standard에서의 API 서버 VNet 통합
API Server VNet 통합은 AKS 클러스터 모드에서 모두 사용할 수 있지만 설정은 다릅니다.
- AKS 자동: API 서버 VNet 통합이 미리 구성되어 있습니다.
- AKS 표준: API 서버 VNet 통합은 선택 사항이며 명시적으로 사용하도록 설정해야 합니다.
대부분의 프로덕션 시나리오에서는 AKS Automatic부터 시작하여 프로덕션 준비 기본값을 사용하고 운영 오버헤드를 줄입니다.
API Server 연결
컨트롤 플레인 또는 API 서버는 AKS 관리 Azure 구독에 있습니다. 클러스터 또는 노드 풀이 Azure 구독에 있습니다. 클러스터 노드를 구성하는 서버와 가상 머신은 API 서버 VIP 및 위임된 서브넷에 투영되는 Pod IP를 통해 서로 통신할 수 있습니다.
API 서버 VNet 통합은 공용 또는 프라이빗 클러스터에 대해 지원됩니다. 클러스터 프로비전 후 공용 액세스를 추가하거나 제거할 수 있습니다. 비 VNet 통합 클러스터와 달리 에이전트 노드는 항상 DNS를 사용하지 않고 API 서버 ILB(내부 부하 분산 장치) IP의 개인 IP 주소와 직접 통신합니다. 모든 노드-API 서버 트래픽은 개인 네트워킹에서 유지되며 API 서버-노드 연결에 터널이 필요하지 않습니다. 공용 네트워크 액세스가 사용하도록 설정된 경우 API 서버와 통신해야 하는 클러스터 외부 클라이언트에서 정상적으로 통신할 수 있습니다. 공용 네트워크 액세스가 사용하지 않도록 설정된 경우 표준 프라이빗 클러스터와 동일한 프라이빗 DNS 설정 방법을 따라야 합니다.
필수 구성 요소
- Azure CLI 버전 2.73.0 이상이 설치되어 있어야 합니다. 명령을 사용하여
az --version버전을 확인할 수 있습니다. - 사용자 고유의 가상 네트워크를 가져오는 경우 가상 네트워크 필수 구성 요소를 검토합니다.
제한점
AKS 자동에서 미리 구성되었거나 AKS 표준에서 명시적으로 사용하도록 설정되었는지 여부에 관계없이 API Server VNet 통합에는 다음과 같은 제한 사항이 적용됩니다.
- API Server VNet 통합은 Virtual Network 암호화를 지원하지 않습니다. v3 또는 이전 AKS 노드 SKU에 배포된 클러스터(VNet 암호화를 지원하지 않음)는 허용되지만 트래픽은 암호화되지 않습니다. 암호화된 VNet이 API Server VNet 통합과 호환되지 않으므로 v4 이상 AKS 노드 SKU (VNet 암호화 지원)에 배포된 클러스터는 차단됩니다. 자세한 내용은 AKS 지원 VM SKU를 참조하세요.
- 이중 스택 네트워킹을 사용하려면 클러스터에 Kubernetes 버전 1.26.3 이상, 네트워크 플러그 인
azure및 네트워크 플러그 인 모드overlay가 필요합니다. 자세한 내용은 이중 스택 네트워킹을 사용하는 Azure CNI 클러스터 참조하세요.
Availability
- API Server VNet 통합은 카타르 센터를 제외한 모든 GA 퍼블릭 클라우드 지역에서 사용할 수 있습니다.
API 서버 VNet 통합을 사용하여 클러스터 만들기
AKS 자동(프로덕션에 권장되는 기본값)
AKS 자동에서 API 서버 VNet 통합이 미리 구성됩니다. 명시적 --enable-apiserver-vnet-integration 플래그는 필요하지 않습니다.
빠른 시작에 따라 AKS Automatic 클러스터를 생성합니다:
AKS 표준: 관리형 VNet
관리되는 VNet 모드에서 API Server VNet 통합을 사용하여 AKS 표준 클러스터를 공용 또는 프라이빗 클러스터로 구성할 수 있습니다.
참고
API Server VNet 통합은 카타르 센터에서 사용할 수 없습니다.
리소스 그룹 만들기
az group create 명령을 사용하여 리소스 그룹을 만듭니다.
az group create --location <location> --name <resource-group>
퍼블릭 클러스터 배포
az aks create 플래그와 함께 --enable-apiserver-vnet-integration 명령을 사용하여 관리형 VNet용 API Server VNet 통합이 포함된 공용 AKS Standard 클러스터를 배포합니다.
az aks create --name <cluster-name> \
--resource-group <resource-group> \
--location <location> \
--network-plugin azure \
--enable-apiserver-vnet-integration \
--generate-ssh-keys
프라이빗 클러스터 배포
az aks create 명령과 --enable-apiserver-vnet-integration 및 --enable-private-cluster 플래그를 사용하여 관리형 VNet용 API Server VNet 통합이 포함된 프라이빗 AKS Standard 클러스터를 배포합니다.
az aks create --name <cluster-name> \
--resource-group <resource-group> \
--location <location> \
--network-plugin azure \
--enable-private-cluster \
--enable-apiserver-vnet-integration \
--generate-ssh-keys
AKS 표준: 사용자 지정 VNet 가져오기
사용자 지정 VNet을 사용하는 경우 API 서버 서브넷을 만들고 이를 Microsoft.ContainerService/managedClusters에 위임해야 합니다. 이 위임은 AKS 서비스에 API 서버 pod와 내부 로드 밸런서를 해당 서브넷에 배치할 수 있는 권한을 부여합니다. 다른 워크로드에는 서브넷을 사용할 수 없지만 동일한 가상 네트워크에 있는 여러 AKS 클러스터에는 사용할 수 있습니다. 지원되는 최소 API 서버 서브넷 크기는 /28.
클러스터 ID에는 API 서버 서브넷과 노드 서브넷 모두에 대한 권한이 필요합니다. API 서버 서브넷에 권한이 없으면 프로비전 실패가 발생할 수 있습니다.
경고
AKS 클러스터는 서브넷 주소 공간에 9개 이상의 IP를 예약합니다. IP 주소가 부족하면 API 서버 크기 조정이 방지되고 API 서버 가동이 중단될 수 있습니다.
참고
API Server VNet 통합은 카타르 센터에서 사용할 수 없습니다.
리소스 그룹 만들기
az group create 명령을 사용하여 리소스 그룹을 만듭니다.
az group create --location <location> --name <resource-group>
가상 네트워크 만들기
az network vnet create명령을 사용하여 가상 네트워크를 만듭니다.az network vnet create --name <vnet-name> \ --resource-group <resource-group> \ --location <location> \ --address-prefixes 172.19.0.0/16az network vnet subnet create명령을 사용하여 API 서버 서브넷을 만듭니다.az network vnet subnet create --resource-group <resource-group> \ --vnet-name <vnet-name> \ --name <apiserver-subnet-name> \ --delegations Microsoft.ContainerService/managedClusters \ --address-prefixes 172.19.0.0/28az network vnet subnet create명령을 사용하여 클러스터 서브넷을 만듭니다.az network vnet subnet create --resource-group <resource-group> \ --vnet-name <vnet-name> \ --name <cluster-subnet-name> \ --address-prefixes 172.19.1.0/24
관리 ID 만들기 및 가상 네트워크에 대한 권한 부여
az identity create명령을 사용하여 관리 ID를 만듭니다.az identity create --resource-group <resource-group> --name <managed-identity-name> --location <location>az role assignment create명령을 사용하여 API 서버 서브넷에 네트워크 기여자 역할을 할당합니다.az role assignment create --scope <apiserver-subnet-resource-id> \ --role "Network Contributor" \ --assignee <managed-identity-client-id>az role assignment create명령을 사용하여 클러스터 서브넷에 네트워크 기여자 역할을 할당합니다.az role assignment create --scope <cluster-subnet-resource-id> \ --role "Network Contributor" \ --assignee <managed-identity-client-id>
퍼블릭 클러스터 배포
az aks create 플래그와 함께 --enable-apiserver-vnet-integration 명령을 사용하여 API 서버 VNet 통합으로 공용 AKS 클러스터를 배포합니다.
az aks create --name <cluster-name> \
--resource-group <resource-group> \
--location <location> \
--network-plugin azure \
--enable-apiserver-vnet-integration \
--vnet-subnet-id <cluster-subnet-resource-id> \
--apiserver-subnet-id <apiserver-subnet-resource-id> \
--assign-identity <managed-identity-resource-id> \
--generate-ssh-keys
프라이빗 클러스터 배포
az aks create 및 --enable-apiserver-vnet-integration 플래그와 함께 --enable-private-cluster 명령을 사용하여 API 서버 VNet 통합으로 프라이빗 AKS 클러스터를 배포합니다.
az aks create --name <cluster-name> \
--resource-group <resource-group> \
--location <location> \
--network-plugin azure \
--enable-private-cluster \
--enable-apiserver-vnet-integration \
--vnet-subnet-id <cluster-subnet-resource-id> \
--apiserver-subnet-id <apiserver-subnet-resource-id> \
--assign-identity <managed-identity-resource-id> \
--generate-ssh-keys
기존 AKS 표준 클러스터를 API 서버 VNet 통합으로 변환
경고
API Server VNet 통합은 용량을 구분하는 단방향 기능입니다. 기존 AKS 표준 클러스터에서 API Server VNet 통합을 사용하도록 설정하면 다음과 같은 제한 사항이 적용됩니다.
-
수동 다시 시작 필요: 컨트롤 플레인 리소스 전환으로 인해 API Server VNet 통합을 사용하도록
az aks update --enable-apiserver-vnet-integration설정한 후 변경 내용이 적용되려면 클러스터를 즉시 다시 시작해야 합니다. 이 다시 시작은 자동화되지 않습니다. 다시 시작을 지연하면 용량을 사용할 수 없게 되어 API 서버가 시작되지 않도록 할 수 있습니다. 클러스터를 다시 시작하면 모든 노드가 새 API 서버 엔드포인트에 안정적으로 다시 연결됩니다. - 용량의 유효성이 검사되지만 예약되지 않음: AKS는 기존 클러스터에서 기능을 사용하도록 설정할 때 지역 용량의 유효성을 검사하지만 이 유효성 검사에서는 용량을 예약하지 않습니다. 다시 시작을 지연하고 그 동안 용량을 사용할 수 없게 되면 중지 또는 다시 시작 후 클러스터가 시작되지 않을 수 있습니다. GA(일반 공급) 이전에 이 기능을 사용하도록 설정했거나 사용 이후 아직 다시 시작되지 않은 클러스터는 용량 유효성 검사를 거치지 않습니다.
- 기능을 사용하지 않도록 설정할 수 없습니다. 사용하도록 설정하면 기능이 영구적으로 적용됩니다. API Server VNet 통합을 사용하지 않도록 설정할 수 없습니다.
이 업그레이드는 모든 노드 풀에서 노드 이미지 버전 업그레이드를 수행하고 롤링 이미지 업그레이드가 진행되는 동안 모든 워크로드를 다시 시작합니다.
경고
클러스터를 API 서버 VNet 통합으로 변환하면 API 서버 IP 주소가 변경되지만 호스트 이름은 동일하게 유지됩니다. 방화벽 또는 네트워크 보안 그룹 규칙에서 API 서버의 IP 주소를 구성하는 경우 해당 규칙을 업데이트해야 할 수 있습니다.
az aks update플래그와 함께--enable-apiserver-vnet-integration명령을 사용하여 클러스터를 API 서버 VNet 통합으로 업데이트합니다.az aks update --name <cluster-name> \ --resource-group <resource-group> \ --enable-apiserver-vnet-integration \ --apiserver-subnet-id <apiserver-subnet-resource-id>[
az aks stop][az-aks-stop] 및 [az aks start][az-aks-start] 명령을 사용하여 클러스터를 다시 시작합니다.az aks stop --name <cluster-name> --resource-group <resource-group> az aks start --name <cluster-name> --resource-group <resource-group>
API 서버 VNet 통합을 사용하여 기존 클러스터에서 프라이빗 클러스터 모드 사용 또는 사용 안 함
API 서버 VNet 통합을 사용하여 구성된 AKS 클러스터는 클러스터를 다시 배포하지 않고도 공용 네트워크 액세스/프라이빗 클러스터 모드를 사용하거나 사용하지 않도록 설정할 수 있습니다. API 서버 호스트 이름은 변경되지 않지만 공용 DNS 항목은 필요한 경우 수정되거나 제거됩니다.
참고
--disable-private-cluster는 현재 미리 보기로 제공됩니다. 자세한 내용은 참조 및 지원 수준을 참조하세요.
프라이빗 클러스터 모드 사용
az aks update 플래그와 함께 --enable-private-cluster 명령을 사용하여 프라이빗 클러스터 모드를 사용하도록 설정합니다.
az aks update --name <cluster-name> \
--resource-group <resource-group> \
--enable-private-cluster \
--enable-apiserver-vnet-integration \
--apiserver-subnet-id <apiserver-subnet-resource-id>
프라이빗 클러스터 모드 사용 안 함
az aks update 플래그와 함께 --disable-private-cluster 명령을 사용하여 프라이빗 클러스터 모드를 사용하지 않도록 설정합니다.
az aks update --name <cluster-name> \
--resource-group <resource-group> \
--disable-private-cluster
kubectl을 사용하여 클러스터에 연결
kubectl 명령을 사용하여 클러스터에 연결하도록 az aks get-credentials을 구성합니다.
az aks get-credentials --resource-group <resource-group> --name <cluster-name>
Private Link 통해 API 서버 노출
Azure Private Link 사용하여 API Server VNet 통합을 사용하여 프라이빗 클러스터의 API 서버 엔드포인트를 노출할 수 있습니다. 다음 단계에서는 클러스터 VNet에서 PLS(Private Link Service)를 만들고 프라이빗 엔드포인트를 사용하여 다른 VNet 또는 구독에서 연결하는 방법을 보여 줍니다.
참고
API Server VNet 통합은 카타르 센터에서 사용할 수 없습니다.
API 서버 VNet 통합 프라이빗 클러스터 만들기
az aks create 명령과 --enable-apiserver-vnet-integration 및 --enable-private-cluster 플래그를 사용하여 API 서버 VNet 통합과 함께 프라이빗 AKS 클러스터를 만듭니다.
az aks create --name <cluster-name> \
--resource-group <resource-group> \
--location <location> \
--enable-private-cluster \
--enable-apiserver-vnet-integration
자세한 지침은 API Server VNet 통합과 함께 Private Link 설정을 참조하세요.
NSG(네트워크 보안 그룹) 보안 규칙
기본적으로 VNet 내의 모든 트래픽이 허용됩니다. 하지만 서로 다른 서브넷 간 트래픽을 제한하기 위해 NSG 규칙을 추가한 경우 NSG 보안 규칙이 다음 형식의 통신을 허용하는지 확인합니다.
| 대상 | 출처 | 프로토콜 | 항구 | 사용 |
|---|---|---|---|---|
| APIServer 서브넷 CIDR | 클러스터 서브넷 | TCP | 443 및 4443 | 노드와 API 서버 간 통신을 사용하도록 설정하는 데 필요합니다. |
| APIServer 서브넷 CIDR | Azure 부하 분산 장치 | TCP | 9988 | Azure Load Balancer API 서버 간의 통신을 사용하도록 설정하는 데 필요합니다. Azure Load Balancer와 API 서버 서브넷 CIDR 간의 모든 통신을 활성화할 수도 있습니다. |
관련 콘텐츠
- AKS 자동 클러스터 만들기
- 관련된 모범 사례에 대해서는 AKS의 네트워크 연결 및 보안에 대한 모범 사례를 참조하세요.
- API Server VNet 통합을 사용하여 private link 설정하는 방법에 대한 지침은 API Server VNet 통합을 사용하여 Private Link 참조하세요.