Azure Kubernetes Fleet Manager 멤버 클러스터에서 다중 클러스터 계층 4 부하 분산 설정(미리 보기)
여러 클러스터에 배포된 애플리케이션의 경우 관리자는 들어오는 트래픽을 클러스터 간에 라우팅하려는 경우가 많습니다.
이 문서에 따라 이러한 다중 클러스터 애플리케이션에 대해 레이어 4 부하 분산을 설정할 수 있습니다.
Important
Azure Kubernetes Fleet Manager 미리 보기 기능은 셀프 서비스, 옵트인 기반으로 제공됩니다. 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. Azure Kubernetes Fleet Manager 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다.
필수 조건
Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
이 문서에서 참조하는
ServiceExport
및MultiClusterService
개체에 대한 설명을 제공하는 이 기능의 개념적 개요를 읽어보세요.허브 클러스터 및 멤버 클러스터가 있는 Fleet 리소스가 있어야 합니다. 이 리소스가 없는 경우 빠른 시작: Fleet 리소스를 만들고 멤버 클러스터에 조인을 따르세요.
워크로드가 배포되는 대상 AKS(Azure Kubernetes Service) 클러스터는 동일한 가상 네트워크 또는 피어링된 가상 네트워크에 있어야 합니다.
- 이러한 대상 클러스터는 Fleet 리소스에 멤버 클러스터로 추가되어야 합니다.
- 이러한 대상 클러스터는 Azure CNI(컨테이너 네트워킹 인터페이스) 네트워킹을 사용해야 합니다.
Access Fleet Hub 클러스터 Kubernetes API의 단계에 따라 허브 클러스터의 Kubernetes API에 액세스해야 합니다.
다음 환경 변수를 설정하고 집합 및 모든 멤버 클러스터에 대한 kubeconfigs를 가져옵니다.
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBER_CLUSTER_1=aks-member-1 export MEMBER_CLUSTER_2=aks-member-2 az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1 az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
Fleet 리소스의 멤버 클러스터에 워크로드 배포
참고 항목
이 사용 방법 가이드의 단계는 데모용으로만 샘플 애플리케이션을 참조하세요. 기존 배포 및 서비스 개체를 이 워크로드로 대체할 수 있습니다.
이 단계에서는 Kubernetes 구성 전파를 사용하여 Fleet 클러스터에서 멤버 클러스터로 샘플 워크로드를 배포합니다. 또는 이러한 Kubernetes 구성을 한 번에 하나씩 개별적으로 각 멤버 클러스터에 배포하도록 선택할 수 있습니다.
집합 클러스터에서 네임스페이스를 만듭니다.
KUBECONFIG=fleet kubectl create namespace kuard-demo
출력은 다음 예제와 유사합니다.
namespace/kuard-demo created
배포, 서비스, ServiceExport 개체를 적용합니다.
KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
위 파일의
ServiceExport
사양을 사용하면 멤버 클러스터에서 Fleet 리소스로 서비스를 내보낼 수 있습니다. 성공적으로 내보내면 서비스와 모든 엔드포인트가 집합 클러스터에 동기화되고 이러한 엔드포인트에서 다중 클러스터 부하 분산을 설정하는 데 사용할 수 있습니다. 출력은 다음 예제와 유사합니다.deployment.apps/kuard created service/kuard created serviceexport.networking.fleet.azure.com/kuard created
crp-2.yaml
이라는 파일에 다음ClusterResourcePlacement
를 만듭니다.eastus
지역에서 클러스터를 선택하고 있습니다.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: kuard-demo spec: resourceSelectors: - group: "" version: v1 kind: Namespace name: kuard-demo policy: affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: fleet.azure.com/location: eastus
ClusterResourcePlacement
를 적용합니다.KUBECONFIG=fleet kubectl apply -f crp-2.yaml
성공하면 출력은 다음 예제와 유사하게 표시됩니다.
clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
ClusterResourcePlacement
상태를 확인합니다.KUBECONFIG=fleet kubectl get clusterresourceplacements
성공하면 출력은 다음 예제와 유사하게 표시됩니다.
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE kuard-demo 1 True 1 True 1 20s
MultiClusterService를 만들어 여러 멤버 클러스터의 서비스 엔드포인트 간에 부하 분산
eastus
지역의 멤버 클러스터에 대해 서비스가 성공적으로 내보내졌는지 확인합니다.KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
출력은 다음 예제와 유사합니다.
NAME IS-VALID IS-CONFLICTED AGE kuard True False 25s
KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
출력은 다음 예제와 유사합니다.
NAME IS-VALID IS-CONFLICTED AGE kuard True False 55s
서비스가 내보내기에 유효하고(
IS-VALID
필드는true
) 다른 내보내기와 충돌하지 않는지 확인해야 합니다(IS-CONFLICT
는false
).참고 항목
ServiceExport가 전파되는 데 1~2분 정도 걸릴 수 있습니다.
한 멤버에
MultiClusterService
를 만들어 다음 클러스터의 서비스 엔드포인트에서 부하를 분산합니다.KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
참고 항목
공용 IP 대신 내부 IP를 통해 서비스를 노출하려면 MultiClusterService에 주석을 추가합니다.
apiVersion: networking.fleet.azure.com/v1alpha1 kind: MultiClusterService metadata: name: kuard namespace: kuard-demo annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" ...
출력은 다음 예제와 유사합니다.
multiclusterservice.networking.fleet.azure.com/kuard created
다음 명령을 실행하여 MultiClusterService가 유효한지 확인합니다.
KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
출력은 다음 예제와 유사하게 표시됩니다.
NAME SERVICE-IMPORT EXTERNAL-IP IS-VALID AGE kuard kuard <a.b.c.d> True 40s
IS-VALID
필드는 출력에서true
여야 합니다. 출력에서 외부 부하 분산 장치 IP 주소(EXTERNAL-IP
)를 확인합니다. 가져오기가 완전히 처리되고 IP 주소를 사용할 수 있게 되기까지 다소 시간이 걸릴 수 있습니다.외부 부하 분산 장치 IP 주소를 사용하여 다음 명령을 여러 번 실행합니다.
curl <a.b.c.d>:8080 | grep addrs
요청을 제공하는 Pod의 IP가 변경되고 있으며 이러한 Pod는
eastus
지역의 멤버 클러스터aks-member-1
및aks-member-2
에 있습니다.eastus
지역의 클러스터에서 다음 명령을 실행하여 Pod IP를 확인할 수 있습니다.KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide
Azure Kubernetes Service