네트워크 부하 분산
이 주제에서는 Azure용 GKE를 사용하여 Azure 표준 부하 분산기로 지원되는 L4 부하 분산기를 설정하는 방법을 보여줍니다.
LoadBalancer
유형의 서비스를 만들면 Azure용 GKE 컨트롤러가 Azure 부하 분산기를 구성합니다.
시작하기 전에
- 클러스터를 만들고 클러스터에 액세스하도록
kubectl
을 구성해야 합니다.
공개 또는 비공개 부하 분산기 선택
서비스 부하 분산기는 공개(공개 프런트엔드 IP 포함) 또는 내부(비공개 IP를 통해서만 액세스 가능)일 수 있습니다.
기본적으로 새 서비스는 공개입니다. 내부 부하 분산기를 만들려면 매니페스트에서 service.beta.kubernetes.io/azure-load-balancer-internal
주석을 "true"
로 설정합니다.
내부 부하 분산기의 서브넷 선택
내부 부하 분산기를 만들 때 Azure용 GKE는 부하 분산기를 배치할 서브넷을 선택해야 합니다. 이 기본 서비스 부하 분산기 서브넷은 클러스터의 만들기 매개변수에서 다음과 같이 선택됩니다.
- 지정되었고 비어 있지 않으면
cluster.networking.serviceLoadBalancerSubnetId
입니다. - 그 외의 경우에는
cluster.controlPlane.subnetId
입니다.
또는 service.beta.kubernetes.io/azure-load-balancer-internal-subnet
주석을 서비스에 추가하여 지정된 부하 분산기에 사용할 서브넷을 지정할 수 있습니다. 이 주석의 값은 서브넷의 이름입니다.
예시 LoadBalancer 만들기
배포를 만들고 서비스를 통해 해당 배포를 노출하여 부하 분산기를 만듭니다.
배포를 만듭니다. 이 배포의 컨테이너는 포트 50001에서 리슨합니다. 다음 YAML을
my-deployment-50001.yaml
파일에 저장합니다.apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment-50001 spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: "gcr.io/google-samples/hello-app:2.0" env: - name: "PORT" value: "50001"
kubectl apply
를 사용하여 배포를 만듭니다.kubectl apply -f my-deployment-50001.yaml
3개의 포드가 실행 중인지 확인합니다.
kubectl get pods --selector=app=products
배포에
LoadBalancer
유형의 서비스를 만듭니다. 공개 또는 내부인 Azure 표준 부하 분산기를 만들 수 있습니다. 다음 옵션 중 하나를 선택합니다.다음 매니페스트 중 하나를
my-lb-service.yaml
이라는 파일에 복사합니다.공개
apiVersion: v1 kind: Service metadata: name: my-lb-service spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
내부
service.beta.kubernetes.io/azure-load-balancer-internal
주석을"true"
로 설정하여 내부 LoadBalancer를 만듭니다. 다음 YAML에는 이 주석이 포함되어 있습니다.yaml apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
kubectl apply
를 사용하여 서비스를 만듭니다.kubectl apply -f my-lb-service.yaml
kubectl get service
를 사용하여 서비스의 주소를 봅니다.kubectl get service my-lb-service
출력에는 부하 분산기의 주소와 함께
EXTERNAL-IP
열이 포함됩니다(부하 분산기의 생성 방법에 따라 공개 또는 비공개).공개 부하 분산기를 만든 경우
curl
로 부하 분산기에 연결할 수 있습니다. external-ip를 이전 단계의kubectl get service
출력의 주소로 바꿉니다.curl http://external-ip:60000
다음과 유사한 결과가 출력됩니다.
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
삭제
서비스 및 배포를 삭제하려면 kubectl delete
를 사용합니다.
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml