API 서버 VNet 통합을 사용하여 Azure Kubernetes Service 클러스터 만들기(미리 보기)
API 서버 VNet 통합으로 구성된 AKS(Azure Kubernetes Service) 클러스터는 API 서버 엔드포인트를 AKS가 배포된 VNet의 위임된 서브넷으로 직접 프로젝션합니다. API 서버 VNet 통합을 통해 프라이빗 링크나 터널 없이도 API 서버와 클러스터 노드 간의 네트워크 통신이 가능합니다. API 서버는 노드가 활용하도록 구성된 위임된 서브넷의 내부 부하 분산 장치 VIP 뒤에서 사용할 수 있습니다. API 서버 VNet 통합을 사용하면 API 서버와 노드 풀 간의 네트워크 트래픽이 개인 네트워크에서만 유지되도록 할 수 있습니다.
API Server 연결
컨트롤 플레인 또는 API 서버는 AKS 관리 Azure 구독에 있습니다. 클러스터 또는 노드 풀이 Azure 구독에 있습니다. 클러스터 노드를 구성하는 서버와 가상 머신은 API 서버 VIP 및 위임된 서브넷에 투영되는 Pod IP를 통해 서로 통신할 수 있습니다.
API 서버 VNet 통합은 공용 또는 프라이빗 클러스터에 대해 지원됩니다. 클러스터 프로비전 후 공용 액세스를 추가하거나 제거할 수 있습니다. 비 VNet 통합 클러스터와 달리 에이전트 노드는 항상 DNS를 사용하지 않고 API 서버 ILB(내부 부하 분산 장치) IP의 개인 IP 주소와 직접 통신합니다. 모든 노드-API 서버 트래픽은 개인 네트워킹에서 유지되며 API 서버-노드 연결에 터널이 필요하지 않습니다. 공용 네트워크 액세스가 사용하도록 설정된 경우 API 서버와 통신해야 하는 클러스터 외부 클라이언트에서 정상적으로 통신할 수 있습니다. 공용 네트워크 액세스가 사용하지 않도록 설정된 경우 표준 프라이빗 클러스터와 동일한 프라이빗 DNS 설정 방법을 따라야 합니다.
사용 가능 지역
API 서버 VNet 통합은 모든 글로벌 Azure 지역에서 사용할 수 있습니다.
필수 조건
- Azure CLI(aks-preview 확장 0.5.97이상 포함)
- ARM 또는 REST API를 사용하는 경우 AKS API 버전은 2022-04-02-preview 이상이어야 합니다.
aks-preview Azure CLI 확장 설치
Important
AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.
az extension add
명령을 사용하여 aks-preview 확장을 설치합니다.az extension add --name aks-preview
az extension update
명령을 사용하여 릴리스된 확장의 최신 버전으로 업데이트합니다.az extension update --name aks-preview
'EnableAPIServerVnetIntegrationPreview' 기능 플래그 등록
az feature register
명령을 사용하여EnableAPIServerVnetIntegrationPreview
기능 플래그를 등록합니다.az feature register --namespace "Microsoft.ContainerService" --name "EnableAPIServerVnetIntegrationPreview"
상태가 Registered로 표시되는 데 몇 분 정도 걸립니다.
az feature show
명령을 사용하여 등록 상태를 확인합니다.az feature show --namespace "Microsoft.ContainerService" --name "EnableAPIServerVnetIntegrationPreview"
상태가 Registered(등록됨)를 반영하면
az provider register
명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을 새로 고칩니다.az provider register --namespace Microsoft.ContainerService
관리 VNet을 사용하여 API 서버 VNet 통합으로 AKS 클러스터 만들기
관리형 VNet 또는 자체 VNet 모드에서 API 서버 VNet 통합을 사용하여 AKS 클러스터를 구성할 수 있습니다. 공용 클러스터(공용 IP를 통해 API 서버에 액세스할 수 있음) 또는 프라이빗 클러스터(API 서버는 프라이빗 VNet 연결을 통해서만 액세스할 수 있음)로 만들 수 있습니다. 클러스터를 다시 배포하지 않고도 공용 상태와 프라이빗 상태 간에 전환할 수도 있습니다.
리소스 그룹 만들기
az group create
명령을 사용하여 리소스 그룹을 만듭니다.az group create --location westus2 --name <resource-group>
퍼블릭 클러스터 배포
--enable-api-server-vnet-integration
플래그와 함께az aks create
명령을 사용하여 관리형 VNet용 API 서버 VNet 통합을 통해 공용 AKS 클러스터를 배포합니다.az aks create --name <cluster-name> \ --resource-group <resource-group> \ --location <location> \ --network-plugin azure \ --enable-apiserver-vnet-integration \ --generate-ssh-keys
프라이빗 클러스터 배포
--enable-api-server-vnet-integration
및--enable-private-cluster
플래그와 함께az aks create
명령을 사용하여 관리형 VNet용 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 \ --generate-ssh-keys
자체 VNet을 사용하여 API 서버 VNet 통합으로 프라이빗 AKS 클러스터 만들기
자체 VNet을 사용하는 경우 API 서버 서브넷을 만들고 Microsoft.ContainerService/managedClusters
에 위임해야 합니다. 그러면 AKS 서비스 권한을 부여하여 API 서버 Pod 및 내부 부하 분산 장치를 해당 서브넷에 삽입할 수 있습니다. 다른 워크로드에는 서브넷을 사용할 수 없지만 동일한 가상 네트워크에 있는 여러 AKS 클러스터에는 사용할 수 있습니다. 지원되는 최소 API 서버 서브넷 크기는 /28입니다.
클러스터 ID에는 API 서버 서브넷과 노드 서브넷 모두에 대한 권한이 필요합니다. API 서버 서브넷에 권한이 없으면 프로비전 실패가 발생할 수 있습니다.
Warning
AKS 클러스터는 서브넷 주소 공간에 9개 이상의 IP를 예약합니다. IP 주소가 부족하면 API 서버 확장이 방지되고 API 서버가 중단될 수 있습니다.
리소스 그룹 만들기
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/16
az 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/28
az 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>
퍼블릭 클러스터 배포
--enable-api-server-vnet-integration
플래그와 함께az aks create
명령을 사용하여 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
프라이빗 클러스터 배포
--enable-api-server-vnet-integration
및--enable-private-cluster
플래그와 함께az aks create
명령을 사용하여 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 서버 서브넷을 제공하여 기존 공용/프라이빗 AKS 클러스터를 API 서버 VNet 통합 클러스터로 변환할 수 있습니다. 이러한 요구 사항에는 클러스터 노드와 동일한 VNet, 프라이빗 엔드포인트와 같은 다른 리소스에서 사용되지 않는 AKS 클러스터 ID에 부여된 권한, 최소 /28 크기가 포함됩니다. 클러스터 변환은 단방향 마이그레이션입니다. API 서버 VNet 통합을 사용하도록 설정한 후에는 클러스터에서 사용하지 않도록 설정할 수 없습니다.
이 업그레이드는 모든 노드 풀에서 노드 이미지 버전 업그레이드를 수행하고 롤링 이미지 업그레이드가 진행되는 동안 모든 워크로드를 다시 시작합니다.
Warning
클러스터를 API 서버 VNet 통합으로 변환하면 API 서버 IP 주소가 변경되지만 호스트 이름은 동일하게 유지됩니다. API 서버의 IP 주소가 방화벽 또는 네트워크 보안 그룹 규칙에 구성되면 해당 규칙을 업데이트해야 할 수 있습니다.
--enable-apiserver-vnet-integration
플래그와 함께az aks update
명령을 사용하여 클러스터를 API 서버 VNet 통합으로 업데이트합니다.az aks update --name <cluster-name> \ --resource-group <resource-group> \ --enable-apiserver-vnet-integration \ --apiserver-subnet-id <apiserver-subnet-resource-id>
API 서버 VNet 통합을 사용하여 기존 클러스터에서 프라이빗 클러스터 모드 사용 또는 사용 안 함
API 서버 VNet 통합을 사용하여 구성된 AKS 클러스터는 클러스터를 다시 배포하지 않고도 공용 네트워크 액세스/프라이빗 클러스터 모드를 사용하거나 사용하지 않도록 설정할 수 있습니다. API 서버 호스트 이름은 변경되지 않지만 공용 DNS 항목은 필요한 경우 수정되거나 제거됩니다.
참고 항목
--disable-private-cluster
는 현재 미리 보기로 제공됩니다. 자세한 내용은 참조 및 지원 수준을 참조하세요.
프라이빗 클러스터 모드 사용
--enable-private-cluster
플래그와 함께az aks update
명령을 사용하여 프라이빗 클러스터 모드를 사용하도록 설정합니다.az aks update --name <cluster-name> \ --resource-group <resource-group> \ --enable-private-cluster
프라이빗 클러스터 모드 사용 안 함
--disable-private-cluster
플래그와 함께az aks update
명령을 사용하여 프라이빗 클러스터 모드를 사용하지 않도록 설정합니다.az aks update --name <cluster-name> \ --resource-group <resource-group> \ --disable-private-cluster
kubectl을 사용하여 클러스터에 연결
az aks get-credentials
명령을 사용하여 클러스터에 연결하도록kubectl
을 구성합니다.az aks get-credentials --resource-group <resource-group> --name <cluster-name>
NSG 보안 규칙
VNet 내의 모든 트래픽은 기본적으로 허용됩니다. 그러나 다른 서브넷 간의 트래픽을 제한하는 NSG 규칙을 추가한 경우 NSG 보안 규칙에서 다음 유형의 통신을 허용하는지 확인합니다.
대상 | Source | 프로토콜 | Port | 사용할 용어 |
---|---|---|---|---|
APIServer 서브넷 CIDR | 클러스터 서브넷 | TCP | 443 및 4443 | 노드와 API 서버 간의 통신을 사용하도록 설정하는 데 필요합니다. |
APIServer 서브넷 CIDR | Azure Load Balancer | TCP | 9988 | Azure Load Balancer와 API 서버 간의 통신을 사용하도록 설정하는 데 필요합니다. Azure Load Balancer와 API Server 서브넷 CIDR 간에 모든 통신을 사용하도록 설정할 수도 있습니다. |
다음 단계
관련된 모범 사례에 대해서는 AKS의 네트워크 연결 및 보안에 대한 모범 사례를 참조하세요.
Azure Kubernetes Service