Azure Kubernetes Fleet Manager를 사용하여 멤버 클러스터에 배포된 공용 워크로드에 대한 DNS 기반 다중 클러스터 부하 분산을 만들고 관리할 수 있습니다.
중요합니다
Azure Kubernetes Fleet Manager 미리 보기 기능은 셀프 서비스, 옵트인 기반으로 제공됩니다. 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. Azure Kubernetes Fleet Manager 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다.
저희의 데이터 플레인 네트워킹 미리 보기는 networking.fleet.azure.com/v1beta1
API를 통해 제공됩니다. 미리 보기 개체가 보이지 않으면 Fleet Manager 허브 클러스터와 상호 작용할 때 networking.fleet.azure.com/v1beta1
API를 요청하고 있는지 확인하세요.
DNS를 사용하여 다중 클러스터 공용 부하 분산을 제공하기 위해 Fleet Manager는 가중 라우팅 프로필이 있는 Azure Traffic Manager를 활용하여 멤버 클러스터에서 내보낸 프런트 엔드 Services
역할을 합니다. 계층 4 및 7 부하 분산 모두에 이 기능을 사용할 수 있습니다.
플릿 관리자는 kubectl
을(를) 사용하여 Fleet Manager 허브 클러스터에서 TrafficManagerProfile
및 TrafficManagerBackend
리소스를 만들고 구성합니다. Azure Traffic Manager 프로필은 TrafficManagerProfile
및 엔드포인트 상태 모니터링 구성을 포함하고 있으며, 관련된 TrafficManagerBackend
는 Service
을 부하 분산합니다.
멤버 클러스터에서 ServiceExport
을(를) 생성하고, Service
에 대해 고유한 DNS 호스트 이름을 구성하여 부하 분산에 서비스를 추가할 수 있습니다. 클러스터 간의 트래픽 라우팅 동작을 구성하는 선택적 가중치를 정의할 수 있습니다. Fleet Manager의 클러스터 리소스 배치를 사용하여 워크로드를 배포하는 경우 DNS 호스트 이름을 배치 ResourceOverride
시 구성할 수 있습니다.
연결된 Traffic Manager의 생성 및 구성은 Fleet Manager에서 관리하며, 플릿 관리자는 Kubernetes API를 사용하여 엔드투엔드 환경을 구동할 수 있습니다.
TrafficManagerProfile 속성
리소스는 TrafficManagerProfile
표준 Azure Traffic Manager 프로필의 Kubernetes 개체 표현을 제공합니다.
apiVersion: networking.fleet.azure.com/v1beta1
kind: TrafficManagerProfile
metadata:
name: myatm
namespace: work
spec:
monitorConfig:
protocol: HTTP
path: /api
port: 8080
intervalInSeconds: 30
timeoutInSeconds: 10
toleratedNumberOfFailures: 3
이해해야 할 중요한 속성은 다음과 같습니다.
name
: DNS 이름의 DNS 접두사로trafficmanager.net
사용됩니다. 고유해야 합니다. 이름이 이미 사용 중인 경우 배포가 실패합니다.namespace
:TrafficManagerBackend
및Service
리소스와 동일해야 합니다.monitorCOnfig
: 표준 Azure Traffic Manager 모니터링 구성에 매핑됩니다. 지원되지 않는 Azure Traffic Manager 엔드포인트 모니터링 옵션은 사용자 지정 헤더 설정입니다. 상태 코드가 필요합니다.
TrafficManagerBackend 속성
리소스는 TrafficManagerBackend
트래픽을 수신하기 위해 Traffic Manager에서 고려할 수 있는 백 엔드 엔드포인트를 저장하는 데 사용되는 Kubernetes 개체를 제공합니다. 트래픽이 엔드포인트 ServiceExport
로 라우팅되기 전에 만들어야 합니다.
apiVersion: networking.fleet.azure.com/v1beta1
kind: TrafficManagerBackend
metadata:
name: app
namespace: work
spec:
profile:
name: myatm
backend:
name: app
weight: 100
이해해야 할 중요한 속성은 다음과 같습니다.
spec/profile/name
: 해당TrafficManagerProfile
와 일치해야 합니다.spec/backend/name
: 부하 분산을 위해 내보낸 서비스 이름과 일치해야 합니다.spec/weight
: 이 백 엔드에 적용할 선택적 가중치(우선 순위)입니다. 0에서 1,000 사이의 정수 값입니다. 생략하면 Traffic Manager는 기본 가중치 '1'을 사용합니다. 연결된 Traffic Manger 프로필 리소스를 삭제하지 않고 트래픽 라우팅을 사용하지 않도록 설정하려면 '0'으로 설정합니다. 자세한 내용은 Azure Traffic Manager 가중 라우팅 방법을 참조하세요.
ServiceExport 속성
Traffic Manager에 엔드포인트 Service
를 추가하려면, 서비스를 포함하는 멤버 클러스터에 ServiceExport
리소스를 생성하십시오. 리소스는 내보낼 ServiceExport
와 동일한 네임스페이스에 만들어야 합니다.
apiVersion: networking.fleet.azure.com/v1alpha1
kind: ServiceExport
metadata:
name: kuard-export
namespace: kuard-demo
annotations:
networking.fleet.azure.com/weight: "50"
이해해야 할 중요한 속성은 다음과 같습니다.
metadata/namespace
: 내보낼 네임스페이스Service
와 일치해야 합니다.metadata/annotations/networking.fleet.azure.com/weight
: 이 서비스 내보내기에서 적용할 선택적 가중치(우선 순위)입니다. 0에서 1,000 사이의 정수 값입니다. 생략하면 Traffic Manager는 기본 가중치 '1'을 사용합니다. 연결된 서비스 엔드포인트를 삭제하지 않고 트래픽 라우팅을 사용하지 않도록 설정하려면 '0'으로 설정합니다. 자세한 내용은 Azure Traffic Manager 가중 라우팅 방법을 참조하세요.
서비스 어노테이션을 통한 고유 DNS 호스트 이름
Traffic Manager에 Service
추가하려면 고유한 DNS 호스트 이름이 있어야 합니다. 표시된 대로 주석을 사용하는 service.beta.kubernetes.io/azure-dns-label-name
AKS 권장 방법에 따라 DNS 호스트 이름을 설정할 수 있습니다.
apiVersion: v1
kind: Service
metadata:
name: kuard-svc
namespace: kuard-demo
labels:
app: kuard
annotations:
service.beta.kubernetes.io/azure-dns-label-name: kuard-demo-cluster-01
spec:
selector:
app: kuard
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
여러 클러스터에 고유한 호스트 이름을 배포할 수 있도록 Fleet Manager의 기능을 사용하여 ResourceOverride
DNS 레이블 주석을 재정의할 수 있습니다. 자세한 내용은 DNS 부하 분산 방법 가이드를 참조하세요.
트래픽 라우팅 제어
이 섹션에서는 클러스터 간의 트래픽 라우팅을 제어하기 위한 일반적인 시나리오를 살펴봅니다.
클러스터 간에 트래픽 분산
Traffic Manager가 모든 클러스터에서 트래픽을 수신하도록 허용하려면 표시된 정의를 사용합니다.
리소스를
TrafficManagerBackend
만들고weight
속성을 생략합니다.apiVersion: networking.fleet.azure.com/v1beta1 kind: TrafficManagerBackend metadata: name: app namespace: work spec: profile: name: myatm backend: name: app
각 클러스터에
ServiceExport
을 만들고weight
속성을 생략합니다.apiVersion: networking.fleet.azure.com/v1alpha1 kind: ServiceExport metadata: name: kuard-export namespace: kuard-demo
배포되면 Traffic Manager는 동일한 가중치의 모든 클러스터를 고려하여 임의로 클러스터를 선택합니다.
서로 다른 가중치를 사용하여 클러스터 간에 트래픽 분산
Traffic Manager에 클러스터를 선택할 때 기본 설정 힌트를 제공하려면, weight
개체와 TrafficManagerBackend
개체에 ServiceExport
속성을 설정합니다.
TrafficManagerBackend
리소스를 만들고weight
속성을100
로 설정합니다.apiVersion: networking.fleet.azure.com/v1beta1 kind: TrafficManagerBackend metadata: name: app namespace: work spec: profile: name: myatm backend: name: app weight: 100
ServiceExport
를 만들고,weight
속성을 트래픽을 수신할 클러스터의 우선 순위를 나타내는 값으로 설정합니다.apiVersion: networking.fleet.azure.com/v1alpha1 kind: ServiceExport metadata: name: kuard-export namespace: kuard-demo annotations: networking.fleet.azure.com/weight: "40"
배포된 후 Traffic Manager는 더 높은 가중치로 클러스터를 기본 설정합니다. 모든 클러스터에서 가중치 값을 설정할 필요는 없습니다. 둘 이상의 클러스터에서 가중치 값을 동일하게 설정하면 Traffic Manager는 해당 클러스터를 동일하게 고려합니다.
트래픽 라우팅에서 클러스터 제외
트래픽 라우팅에서 클러스터를 제외하려면 리소스에 weight
속성을 0
ServiceExport
설정합니다. 이 가중치는 Traffic Manager 구성에서 엔드포인트를 제거합니다.
apiVersion: networking.fleet.azure.com/v1alpha1
kind: ServiceExport
metadata:
name: kuard-export
namespace: kuard-demo
annotations:
networking.fleet.azure.com/weight: "0"
TrafficManagerProfile 삭제 동작
TrafficManagerProfile
Kubernetes 리소스가 삭제되면 연결된 Azure Traffic Manager 및 해당 엔드포인트도 삭제되고 요청은 더 이상 클러스터로 라우팅되지 않습니다.
트래픽 라우팅을 중지하지만 Azure Traffic Manager 및 해당 엔드포인트를 유지하려면 리소스에 weight
속성을 0
설정합니다TrafficManagerBackend
.
다음 단계
Azure Kubernetes Service