Azure Stack Hub의 사용자 지정 가상 네트워크에 Kubernetes 클러스터 배포
사용자 지정 가상 네트워크에서 AKS(Azure Kubernetes Service) 엔진을 사용하여 Kubernetes 클러스터를 배포할 수 있습니다. 이 문서에서는 가상 네트워크에서 필요한 정보를 찾는 방법에 대해 알아봅니다. 클러스터에서 사용하는 IP 주소를 계산하고, API 모델에서 vales를 설정하고, 경로 테이블 및 네트워크 보안 그룹을 설정하는 단계를 찾을 수 있습니다.
AKS 엔진을 사용하는 Azure Stack Hub의 Kubernetes 클러스터는 kubenet 네트워크 플러그 인을 사용합니다. Azure Stack Hub의 AKS 엔진은 Azure CNI 네트워크 플러그 인도 지원합니다.
- Azure의 kubenet 네트워킹 플러그 인에 대한 자세한 내용은 AKS(Azure Kubernetes Service)에서 고유한 IP 주소 범위로 kubenet 네트워킹 사용을 참조하세요.
- Azure의 Azure CNI 네트워킹 플러그 인에 대한 자세한 내용은 AKS(Azure Kubernetes Service Azure CNI 네트워킹 구성)를 참조하세요.
사용자 지정 가상 네트워크를 만들 때의 제약 조건
- 사용자 지정 VNET은 Kubernetes 클러스터의 다른 모든 구성 요소와 동일한 구독에 있어야 합니다.
- 컨트롤 플레인 노드 풀과 에이전트 노드 풀은 동일한 가상 네트워크에 있어야 합니다. 동일한 가상 네트워크 내의 다른 서브넷에 노드를 배포할 수 있습니다.
- Kubernetes 클러스터 서브넷은 사용자 지정 가상 네트워크 IP 범위의 공간 내에서 IP 범위를 사용해야 합니다. IP 주소 블록 가져오기를 참조하세요.
- 노드 서브넷의 권장 크기는 사용 중인 네트워크 플러그 인 유형에 따라 달라집니다. 일반적인 지침으로 Azure CNI는 kubenet보다 에이전트 노드 풀을 지원하는 서브넷에 대해 더 많은 수의 IP 주소가 필요합니다. 아래 kubenet 및 Azure CNI 예제를 참조하세요.
- 주소 공간은
169.254.0.0/16
Kubernetes 클러스터에 대한 사용자 지정 VNET에 사용할 수 없습니다.
사용자 지정 가상 네트워크 만들기
Azure Stack Hub instance 사용자 지정 가상 네트워크가 있어야 합니다. 자세한 내용은 빠른 시작: Azure Portal을 사용하여 가상 네트워크 만들기를 참조하세요.
가상 네트워크에 새 서브넷을 만듭니다. 서브넷 리소스 ID 및 IP 주소 범위를 가져와야 합니다. 클러스터를 배포할 때 API 모델에서 리소스 ID 및 범위를 사용합니다.
Azure Stack Hub instance Azure Stack Hub 사용자 포털을 엽니다.
모든 리소스를 선택합니다.
검색 상자에 가상 네트워크의 이름을 입력합니다.
서브넷>+ 서브넷을 선택하여 서브넷을 추가합니다.
CIDR 표기법을 사용하여 이름 및 주소 범위를 추가합니다. 확인을 선택합니다.
가상 네트워크 블레이드에서 속성을 선택합니다. 리소스 ID를 복사한 다음 를 추가합니다
/subnets/<nameofyoursubnect>
. 이 값을 클러스터에 대한vnetSubnetId
API 모델의 키 값으로 사용합니다. 서브넷의 리소스 ID는 다음 형식을 사용합니다./subscriptions/SUB_ID/resourceGroups/RG_NAME/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/SUBNET_NAME
가상 네트워크 블레이드에서 서브넷을 선택합니다. 서브넷 이름(예
control-plane-sn
: )을 선택합니다.서브넷을 NSG(네트워크 보안 그룹)에 연결하지 마세요.
서브넷 블레이드에서 각 서브넷의 주소 범위(CIDR 블록)를 기록해 둡니다.
주소 공간 선택 고려 사항
사용자 지정 가상 네트워크를 만들 때 네트워크의 IP 주소 공간과 모든 서브넷에 대한 IP 주소 범위를 지정합니다. Kubernetes 클러스터에서 사용할 주소 공간 및 범위를 선택할 때 다음 요소를 고려합니다.
- 주소 공간이 겹치면 IP 주소 충돌 또는 통신 오류가 발생할 수 있습니다. IP 주소가 겹치는 위험을 줄이려면 새 가상 네트워크에 대한 고유한 주소 공간을 선택합니다.
- ,
172.16/12
및192.168/16
범위의10/8
주소 공간은 종종 프라이빗 네트워크에 사용되며 기존 데이터 센터 인프라에서 사용할 수 있습니다. Kubernetes 애플리케이션이 데이터 센터에서 리소스를 사용하는 경우 데이터 센터의 주소 공간과 다른 사용자 지정 가상 네트워크에 대한 주소 공간을 선택하여 충돌 위험을 줄입니다. - Kubernetes 클러스터에 전용 서브넷을 사용하는 것이 좋습니다.
- 여러 기존 가상 네트워크를 사용하는 경우 가상 네트워크 피어링을 사용하려는 경우 각 네트워크에서 서로 다른 주소 공간을 사용하는 것이 좋습니다. 주소 공간이 겹치면 피어링을 사용하도록 설정하는 기능이 손상될 수 있습니다.
IP 주소 블록 가져오기
AKS 엔진은 기존 가상 네트워크의 배포를 지원합니다. 기존 가상 네트워크에 배포된 경우 클러스터는 에이전트 노드, 컨트롤 플레인 노드, 클러스터 서비스 및 컨테이너(Pod)에 대해 연속 주소 블록을 사용합니다. 각 주소 블록을 가상 네트워크 내의 서브넷으로 변환할 수 있습니다. 클러스터 배포의 모든 주소 블록은 전체 가상 네트워크 주소 공간의 일부여야 합니다. 가상 네트워크 주소 공간 외부에서 주소 블록을 선택하면 연결 문제가 발생할 수 있습니다.
Kubernetes 클러스터를 설정할 때 최소 3개의 주소 블록이 필요합니다.
- 노드 주소 블록: 클러스터 노드에 주소를 할당하는 데 사용되는 주소 블록입니다. 이는 모든 클러스터 노드에 대한 단일 주소 블록이거나 컨트롤 플레인 및 에이전트 풀에 대한 별도의 블록(서브넷)일 수 있습니다. 이 블록의 주소 범위를 선택할 때 클러스터의 노드 수를 고려합니다. Azure CNI 노드 및 컨테이너의 경우 동일한 주소 블록에서 주소를 가져옵니다. 따라서 Azure CNI를 사용할 때 주소 범위를 선택할 때 클러스터에 배포하려는 컨테이너 수를 고려합니다.
- 서비스 주소 블록: Kubernetes 클러스터에 배포된 서비스가 클러스터 주소를 가져올 주소 블록입니다. 이 블록의 주소 범위를 선택할 때 클러스터에서 실행하려는 최대 서비스 수를 고려합니다.
- 클러스터 주소 블록: Pod가 클러스터 주소를 가져올 주소 블록입니다. 이 블록의 주소 범위를 선택할 때 클러스터에서 실행하려는 최대 Pod 수를 고려합니다. 멘션 이전과 마찬가지로 Azure CNI의 경우 클러스터 및 노드 주소 블록은 동일합니다.
주소 블록 외에도 컨트롤 플레인 노드의 경우 두 개의 값을 더 설정해야 합니다. 클러스터에 대해 예약해야 하는 IP 주소 수와 서브넷 IP 공간 내의 첫 번째 연속 고정 IP를 알아야 합니다. AKS 엔진에는 여러 컨트롤 플레인 노드를 사용할 때 사용하지 않는 IP 주소가 최대 16개까지 필요합니다. 클러스터는 각 컨트롤 플레인에 최대 5개의 컨트롤 플레인 노드에 대해 하나의 IP 주소를 사용합니다. 또한 AKS 엔진에는 헤드룸 IP 주소 예약을 위한 마지막 컨트롤 플레인 노드 다음에 다음 10개의 IP 주소가 필요합니다. 마지막으로, 컨트롤 플레인 노드 및 헤드룸 예약 후 부하 분산 장치에서 총 16개의 IP 주소를 사용합니다. IP 주소 블록을 배치할 때 서브넷에는 기존 IP 주소를 다음과 같이 할당해야 합니다.
- 처음 4개의 IP 주소와 마지막 IP 주소는 예약되어 있으며 Azure 서브넷에서 사용할 수 없습니다.
- 16개의 IP 주소 버퍼를 열어 두어야 합니다.
- IP 충돌을 방지하려면 클러스터의 첫 번째 IP 주소 값이 주소 공간의 끝 부분에 있어야 합니다. 가능하면 서브넷에서
firstConsecutiveStaticIP
사용 가능한 IP 주소 공간의 끝 부분에 있는 IP 주소에 속성을 할당합니다.
예를 들어 세 개의 컨트롤 플레인 노드가 있는 클러스터의 경우입니다. 주소가 256개인 서브넷을 사용하는 경우(예: 10.100.0.0/24) 239 이전에 첫 번째 연속 고정 IP 주소를 설정해야 합니다. 다음 표에서는 주소 및 고려 사항을 보여 줍니다.
/24 서브넷의 범위 | Number | 참고 |
---|---|---|
172.100.0.0 - 172.100.0.3 | 4 | Azure 서브넷에 예약되어 있습니다. |
172.100.0.224-172.100.0.238 | 14 | AKS 엔진 정의 클러스터의 IP 주소 수입니다. 컨트롤 플레인 노드 3개에 대한 IP 주소 3개 헤드룸의 IP 주소 10개 부하 분산 장치의 IP 주소 1 |
172.100.0.238 - 172.100.0.254 | 16 | 16 IP 주소 버퍼. |
172.100.0.255 | 1 | Azure 서브넷에 예약되어 있습니다. |
이 예제에서 속성은 firstConsecutiveStaticIP
입니다 172.100.0.224
.
큰 서브넷의 경우(예: 주소가 60,000개 이상인 /16)의 경우 고정 IP 할당을 네트워크 공간의 끝으로 설정하는 것이 실용적이지 않을 수 있습니다. 주소를 요청할 때 클러스터를 복원할 수 있도록 클러스터 고정 IP 주소 범위를 IP 공간의 처음 24개 주소에서 멀리 설정합니다.
Kubenet 주소 블록 예제
다음 예제에서는 이러한 다양한 고려 사항이 컨트롤 플레인 노드에 대한 전용 서브넷이 있는 kubenet 네트워크 플러그 인과 풀당 3개의 노드가 있는 에이전트 노드 풀을 사용하여 클러스터에 대한 가상 네트워크의 주소 공간을 채우는 방법을 확인할 수 있습니다.
VNET 주소 공간: 10.100.0.0/16.
주소 블록(서브넷) | CIDR | IP 범위 | IP 수(사용 가능) |
---|---|---|---|
컨트롤 플레인 노드 블록 | 10.100.0.0/24 | 10.100.0.0 - 10.100.0.255 | 255 - 4 예약 = 251 |
에이전트 노드 블록 | 10.100.1.0/24 | 10.100.1.0 - 10.100.1.255 | 255 - 4 예약 = 251 |
서비스 블록 | 10.100.16.0/20 | 10.100.16.0 - 10.100.31.255 | 4,096 - 5 예약 = 4,091 |
클러스터 블록 | 10.100.128.0/17 | 10.100.128.0 - 10.100.255.255 | 32,768 - 5 예약 = 32,763 |
이 예제에서 속성은 firstConsecutiveStaticIP
입니다 10.100.0.239
.
Azure CNI 주소 블록 예제
다음 예제에서는 이러한 다양한 고려 사항이 컨트롤 플레인에 대한 전용 서브넷이 있는 Azure CNI 네트워크 플러그 인과 풀당 3개의 노드가 있는 에이전트 노드 풀을 사용하여 클러스터에 대한 가상 네트워크의 주소 공간을 채우는 방법을 확인할 수 있습니다.
VNET 주소 공간: 172.24.0.0/16.
참고
사용자 환경에서 공용 IP 범위가 CIDR10.0.0.0/8 내에 있는 경우 kubenet을 네트워크 플러그 인으로 사용합니다.
주소 블록(서브넷) | CIDR | IP 범위 | IP 수(사용 가능) |
---|---|---|---|
컨트롤 플레인 노드 블록 | 172.24.0.0/24 | 172.24.0.0 - 172.24.0.255 | 255 - 4 예약 = 251 |
클러스터 블록을 & 에이전트 노드 | 172.24.128.0/17 | 172.24.128.0 - 172.24.255.255 | 32,768 - 5 예약 = 32,763 |
서비스 블록 | 172.24.16.0/20 | 172.24.16.0 - 172.24.31.255 | 4,096 - 5 예약 = 4,091 |
이 예제에서 속성은 firstConsecutiveStaticIP
입니다 172.24.0.239
.
API 모델 업데이트
AKS 엔진에서 사용자 지정 가상 네트워크로 클러스터를 배포하는 데 사용되는 API 모델을 업데이트합니다.
masterProfile에서 다음 값을 설정합니다.
필드 | 예제 | Description |
---|---|---|
vnetSubnetId | /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn |
서브넷에 Azure Resource Manager 경로 ID를 지정합니다. 이 값은 위의 컨트롤 플레인 노드 주소 블록에 매핑됩니다. |
firstConsecutiveStaticIP | 10.100.0.239 | 원하는 서브넷에서 firstConsecutiveStaticIP 사용 가능한 IP 주소 공간의 끝 부분에 있는 IP 주소를 구성 속성에 할당합니다.
firstConsecutiveStaticIP 컨트롤 플레인 노드 풀에만 적용됩니다. |
agentPoolProfiles에서 다음 값을 설정합니다.
필드 | 예제 | Description |
---|---|---|
vnetSubnetId | /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn |
서브넷에 Azure Resource Manager 경로 ID를 지정합니다. 이 값은 위의 에이전트 노드 주소 블록에 매핑됩니다. |
orchestratorProfile에서 kubernetesConfig를 찾고 다음 값을 설정합니다.
필드 | 예제 | Description |
---|---|---|
clusterSubnet | 10.100.128.0/17 |
Pod 네트워크 인터페이스의 IP 주소를 할당하는 데 사용되는 IP 서브넷입니다. 이 값은 위의 클러스터 주소 블록에 매핑됩니다. 서브넷은 VNET 주소 공간에 있어야 합니다. Azure CNI를 사용하도록 설정하면 기본값은 10.240.0.0/12입니다. Azure CNI가 없으면 기본값은 10.244.0.0/16입니다. /16 대신 /24 서브넷을 사용합니다. /24를 사용하는 경우 이 서브넷은 하나의 노드에만 할당됩니다. 다른 노드는 IP 공간이 부족하므로 클러스터에서 준비되지 않으므로 POD 네트워크가 할당되지 않습니다. |
serviceCidr | 10.100.16.0/20 |
클러스터에 배포된 서비스의 IP 주소를 할당하는 데 사용되는 IP 서브넷입니다. 이 값은 위의 클러스터 서비스 블록에 매핑됩니다. |
dnsServiceIP | 10.100.16.10 |
클러스터 DNS 서비스에 할당할 IP 주소입니다. 주소는 serviceCidr 서브넷에서 와야 합니다. serviceCidr를 지정할 때 이 값을 설정해야 합니다. 기본값은 serviceCidr 서브넷의 .10 주소입니다. |
예를 들어 kubenet을 사용하는 경우:
의 서브넷 control-plane-sn
10.100.0.0/24
이 이고 agents-sn
가 인 의 네트워크 주소 공간 10.100.0.0/16
사용10.100.1.0/24
"masterProfile": {
...
"vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
"firstConsecutiveStaticIP": "10.100.0.239",
...
},
...
"agentPoolProfiles": [
{
...
"vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn",
...
},
...
"kubernetesConfig": [
{
...
"clusterSubnet": "10.100.128.0/17",
"serviceCidr": "10.100.16.0/20",
"dnsServiceIP" : "10.100.16.10",
...
},
예를 들어 Azure CNI를 사용하는 경우:
의 서브넷 control-plane-sn
172.24.0.0/24
이 이고 k8s-sn
가 인 의 네트워크 주소 공간 172.24.0.0/16
사용172.24.128.0/17
"masterProfile": {
...
"vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
"firstConsecutiveStaticIP": "172.24.0.239",
...
},
...
"agentPoolProfiles": [
{
...
"vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/k8s-sn",
...
},
...
"kubernetesConfig": [
{
...
"clusterSubnet": "172.24.128.0/17",
"serviceCidr": "172.24.16.0/20",
"dnsServiceIP" : "172.24.16.10",
...
},
클러스터 배포
API 모델에 값을 추가한 후 AKS 엔진의 명령을 사용하여 클라이언트 컴퓨터에서 클러스터를 deploy
배포할 수 있습니다. 자세한 내용은 Kubernetes 클러스터 배포를 참조하세요.
경로 테이블 설정
kubenet(예 networkPlugin
: ) kubenet
을 사용하는 경우 API 모델 구성 개체에서 입니다 kubernetesConfig
. 클러스터를 배포한 후 Azure Stack 사용자 포털에서 가상 네트워크로 돌아갑니다. 서브넷 블레이드에서 경로 테이블과 NSG(네트워크 보안 그룹)를 모두 설정합니다. 클러스터를 사용자 지정 가상 네트워크에 성공적으로 배포한 후 클러스터의 리소스 그룹에 있는 네트워크 블레이드에서 경로 테이블 리소스의 ID를 가져옵니다.
Azure Stack Hub instance Azure Stack Hub 사용자 포털을 엽니다.
모든 리소스를 선택합니다.
검색 상자에 가상 네트워크의 이름을 입력합니다.
서브넷을 선택한 다음 클러스터가 포함된 서브넷의 이름을 선택합니다.
경로 테이블을 선택한 다음 클러스터에 대한 경로 테이블을 선택합니다.
서브넷을 포함하여
masterProfile
API 모델에 지정된 모든 서브넷에 대해 이 작업이 수행되는지 확인합니다.
참고
Kubernetes Windows 클러스터에 대한 사용자 지정 가상 네트워크에 알려진 문제가 있습니다.