AKS-to-AKS Clustermesh 준비

AKS-to-AKS Clustermesh 준비 (AKS-to-AKS Clustermesh Preparation)

이 가이드는 BYOCNI(가져온 CNI) 모드의 AKS(Azure Kubernetes Service) 클러스터를 설치하고 clustermesh 기능 요구사항을 충족하도록 준비하는 단계별 가이드예요. 두 AKS 클러스터를 만들고 VNet 피어링으로 연결해 clustermesh를 준비합니다.

출처: AKS-to-AKS Clustermesh Preparation

본문

이 가이드는 BYOCNI (Bring Your Own CNI) 모드로 두 AKS 클러스터를 설치하고 clustermesh를 통해 서로 연결하는 방법을 설명해요. 이 가이드는 노드 IP를 Azure 클라우드 밖으로 노출하지 않으므로 크로스 클라우드 clustermesh에는 적용할 수 없습니다.

Note

BYOCNI는 버전 >= 0.5.55인 aks-preview CLI 확장을 요구하며, 이는 버전 >= 2.32.0인 az CLI가 필요합니다.

클러스터 하나 설치

클러스터를 위한 리소스 그룹을 만듭니다 (또는 기존 리소스 그룹으로 환경 변수를 설정하세요).

export NAME="$(whoami)-$RANDOM"
export AZURE_RESOURCE_GROUP="${NAME}-group"

#  westus2 can be changed to any available location (`az account list-locations`)
az group create --name "${AZURE_RESOURCE_GROUP}" -l westus2

VNet(가상 네트워크)을 만듭니다. Node, Pod, Service CIDR이 고유하고 다른 클러스터와 겹치지 않도록 하려면 사용자 지정 VNet을 만드는 것이 필요해요.

Note

아래 예시는 192.168.10.0/24 범위를 사용하지만, Azure가 예약한 169.254.0.0/16 , 172.30.0.0/16 , 172.31.0.0/16 , 192.0.2.0/24 를 제외한 어떤 범위도 사용할 수 있어요.

az network vnet create \
    --resource-group "${AZURE_RESOURCE_GROUP}" \
    --name "${NAME}-cluster-net" \
    --address-prefixes 192.168.10.0/24 \
    --subnet-name "${NAME}-node-subnet" \
    --subnet-prefix 192.168.10.0/24

# Store the ID of the created subnet
export NODE_SUBNET_ID=$(az network vnet subnet show \
    --resource-group "${AZURE_RESOURCE_GROUP}" \
    --vnet-name "${NAME}-cluster-net" \
    --name "${NAME}-node-subnet" \
    --query id \
    -o tsv)

이제 같은 CIDR을 가진 가상 네트워크와 서브넷이 생겼어요. CNI 없이 AKS 클러스터를 만들고 사용자 지정 VNet과 서브넷을 사용하도록 요청합니다.

생성 중에 pod CIDR로 "10.10.0.0/16" , services CIDR로 "10.11.0.0/16" 을 요청하세요. 이들은 Azure 예약 범위와 clustermesh에 추가하려는 다른 클러스터가 사용하는 범위를 제외한 어떤 범위로도 변경할 수 있어요.

az aks create \
    --resource-group "${AZURE_RESOURCE_GROUP}" \
    --name "${NAME}" \
    --network-plugin none \
    --pod-cidr "10.10.0.0/16" \
    --service-cidr "10.11.0.0/16" \
    --dns-service-ip "10.11.0.10" \
    --vnet-subnet-id "${NODE_SUBNET_ID}"

# Get kubectl credentials, the command will merge the new credentials
# with the existing ~/.kube/config
az aks get-credentials \
    --resource-group "${AZURE_RESOURCE_GROUP}" \
    --name "${NAME}"

Cilium을 설치합니다. 클러스터에 고유한 클러스터 ID를 주고 사용자 지정 pod CIDR을 사용하도록 Cilium에 알리는 것이 중요해요.

cilium install 1.20.2 \
    --set azure.resourceGroup="${AZURE_RESOURCE_GROUP}" \
    --set cluster.id=1 \
    --set ipam.operator.clusterPoolIPv4PodCIDRList='{10.10.0.0/16}'

Cilium 상태를 확인합니다.

cilium status

클러스터 2를 구성하기 전에 현재 클러스터의 이름을 저장하세요.

export CLUSTER1=${NAME}

클러스터 2 설치

두 번째 클러스터를 설치하는 것은 같은 명령을 사용하되 인자가 약간 다릅니다.

새 리소스 그룹을 만듭니다.

export NAME="$(whoami)-$RANDOM"
export AZURE_RESOURCE_GROUP="${NAME}-group"

# eastus2 can be changed to any available location (`az account list-locations`)
az group create --name "${AZURE_RESOURCE_GROUP}" -l eastus2

이 리소스 그룹에 VNet을 만듭니다. 겹치지 않는 접두사를 사용해야 해요.

Note

아래 예시는 192.168.20.0/24 범위를 사용하지만, Azure가 예약한 169.254.0.0/16 , 172.30.0.0/16 , 172.31.0.0/16 , 192.0.2.0/24 를 제외한 어떤 범위도 사용할 수 있어요.

az network vnet create \
    --resource-group "${AZURE_RESOURCE_GROUP}" \
    --name "${NAME}-cluster-net" \
    --address-prefixes 192.168.20.0/24 \
    --subnet-name "${NAME}-node-subnet" \
    --subnet-prefix 192.168.20.0/24

# Store the ID of the created subnet
export NODE_SUBNET_ID=$(az network vnet subnet show \
    --resource-group "${AZURE_RESOURCE_GROUP}" \
    --vnet-name "${NAME}-cluster-net" \
    --name "${NAME}-node-subnet" \
    --query id \
    -o tsv)

CNI 없이 AKS 클러스터를 만들고 사용자 지정 VNet과 서브넷을 사용하도록 요청합니다.

생성 중에 pod CIDR로 "10.20.0.0/16" , services CIDR로 "10.21.0.0/16" 을 사용하세요. 이들은 Azure 예약 범위와 clustermesh에 추가하려는 다른 클러스터가 사용하는 범위를 제외한 어떤 범위로도 변경할 수 있어요.

az aks create \
    --resource-group "${AZURE_RESOURCE_GROUP}" \
    --name "${NAME}" \
    --network-plugin none \
    --pod-cidr "10.20.0.0/16" \
    --service-cidr "10.21.0.0/16" \
    --dns-service-ip "10.21.0.10" \
    --vnet-subnet-id "${NODE_SUBNET_ID}"

# Get kubectl credentials and add them to ~/.kube/config
az aks get-credentials \
    --resource-group "${AZURE_RESOURCE_GROUP}" \
    --name "${NAME}"

Cilium을 설치합니다. 클러스터에 고유한 클러스터 ID를 주고 사용자 지정 pod CIDR을 사용하도록 Cilium에 알리는 것이 중요해요.

cilium install 1.20.2 \
    --set azure.resourceGroup="${AZURE_RESOURCE_GROUP}" \
    --set cluster.id=2 \
    --set ipam.operator.clusterPoolIPv4PodCIDRList='{10.20.0.0/16}'

Cilium 상태를 확인합니다.

cilium status

피어링과 clustermesh를 구성하기 전에 현재 클러스터 이름을 저장하세요.

export CLUSTER2=${NAME}

가상 네트워크 피어링

가상 네트워크는 기본적으로 서로 연결할 수 없어요. 양방향 "피어링"을 만들어 크로스 VNet 통신을 활성화할 수 있습니다.

다음 명령으로 클러스터 1에서 클러스터 2로의 피어링을 만드세요.

export VNET_ID=$(az network vnet show \
    --resource-group "${CLUSTER2}-group" \
    --name "${CLUSTER2}-cluster-net" \
    --query id -o tsv)

az network vnet peering create \
    -g "${CLUSTER1}-group" \
    --name "peering-${CLUSTER1}-to-${CLUSTER2}" \
    --vnet-name "${CLUSTER1}-cluster-net" \
    --remote-vnet "${VNET_ID}" \
    --allow-vnet-access

이렇게 하면 클러스터 1에서 클러스터 2로의 아웃바운드 트래픽이 허용됩니다. 양방향 트래픽을 허용하려면 반대 방향의 피어링도 추가하세요.

export VNET_ID=$(az network vnet show \
    --resource-group "${CLUSTER1}-group" \
    --name "${CLUSTER1}-cluster-net" \
    --query id -o tsv)

az network vnet peering create \
    -g "${CLUSTER2}-group" \
    --name "peering-${CLUSTER2}-to-${CLUSTER1}" \
    --vnet-name "${CLUSTER2}-cluster-net" \
    --remote-vnet "${VNET_ID}" \
    --allow-vnet-access

이제 클러스터 간 노드-투-노드 트래픽이 가능해요. clustermesh의 모든 요구사항이 충족됐습니다. clustermesh 활성화는 Cluster Mesh 설정하기에서 설명합니다.

더 알아보기 (Learn more)