네트워크 부하 분산
이 주제에서는 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: 50001service.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