이 페이지에서는 AWS Elastic Load Balancer(ELB) 또는 네트워크 부하 분산기(NLB) 엔드포인트로 L4 부하 분산기를 설정하는 방법을 설명합니다.
AWS용 GKE와 함께 사용할 수 있는 다른 유형의 부하 분산기에 대한 자세한 내용은 부하 분산기 개요를 참조하세요.
시작하기 전에
- 클러스터를 만들고, 여기에 연결하도록
kubectl
를 구성합니다. - 서비스 부하 분산기 서브넷에 태그를 지정합니다. 이 작업은 서브넷 자동 검색을 위해 필요합니다.
- 클래식 또는 네트워크 ELB 중 하나를 결정합니다.
- 인터넷 연결 또는 내부 부하 분산기 중 하나를 결정합니다.
부하 분산기 유형 선택
AWS용 GKE는 서비스 기본 부하 분산기를 AWS 기본 Elastic Load Balancer(기본 ELB) 또는 NLB로 만듭니다. 기본적으로 AWS용 GKE는 클래식 ELB를 만듭니다. NLB를 만들려면 service.beta.kubernetes.io/aws-load-balancer-type
주석을 nlb
로 설정합니다.
부하 분산기 유형 간의 차이점에 대한 자세한 내용은 AWS 문서의 부하 분산기 유형을 참조하세요.
인터넷 연결 또는 내부 부하 분산기 선택
서비스 부하 분산기는 인터넷 연결(공개적으로 확인 가능한 DNS 이름 사용) 또는 내부(VPC 내에서만 액세스 가능) 중 하나일 수 있습니다.
기본적으로 새 부하 분산기는 인터넷 연결 방식입니다. 내부 부하 분산기를 만들려면 매니페스트에서 service.beta.kubernetes.io/aws-load-balancer-internal
주석을 "true"
로 설정합니다.
aws-load-balancer-internal
주석은 기존 서비스에 적용할 수 없습니다. 인터넷 연결 및 내부 구성을 서로 변경하려면 기존 LoadBalancer를 삭제하고 다시 만들어야 합니다.
서브넷 선택
부하 분산기를 만들려면 이를 배치할 서브넷을 AWS에 지정해야 합니다. 기본적으로 이러한 서브넷은 VPC의 서브넷 중에서 자동으로 검색됩니다. 이를 위해 서브넷에 특정 태그가 있어야 합니다. 서브넷 자동 검색 및 태그 지정에 대한 자세한 내용은 부하 분산기 서브넷을 참조하세요.
또는 서비스에 service.beta.kubernetes.io/aws-load-balancer-subnets
주석을 추가하여 주석으로 부하 분산기 서브넷을 지정할 수 있습니다. 이 주석의 값은 subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef
와 같이 서브넷 ID 또는 서브넷 이름이 쉼표로 구분된 목록입니다.
예시 부하 분산기 만들기
배포를 만들고 서비스를 사용해서 이 배포를 노출하는 방식으로 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
유형의 서비스를 만듭니다.필요한 부하 분산기 유형을 결정합니다.
- 인터넷 연결 클래식 ELB
- 인터넷 연결 NLB
- 내부 클래식 ELB
- 내부 NLB
요구사항과 일치하는 탭을 선택하고 그 안의 매니페스트를
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
인터넷 연결 NLB
service.beta.kubernetes.io/aws-load-balancer-type
주석을nlb
로 설정하여 NLB를 만듭니다. 다음 YAML에는 이 주석이 포함되어 있습니다.apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
내부 클래식
service.beta.kubernetes.io/aws-load-balancer-internal
주석을"true"
로 설정하여 내부 LoadBalancer를 만듭니다. 다음 YAML에는 이 주석이 포함되어 있습니다.apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
내부 NLB
주석을 설정하여 내부 NLB를 만듭니다.
service.beta.kubernetes.io/aws-load-balancer-internal
~"true"
service.beta.kubernetes.io/aws-load-balancer-type
을nlb
로 설정
다음 YAML에는 두 주석이 모두 포함됩니다.
apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" service.beta.kubernetes.io/aws-load-balancer-type: nlb 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
로 부하 분산기에 연결할 수 있습니다.curl http://EXTERNAL_IP:60000
EXTERNAL_IP
를 이전 단계의 EXTERNAL-IP 열에 있는 주소로 바꿉니다.
다음과 유사한 결과가 출력됩니다.
```none
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
다음 단계
서비스를 사용하여 애플리케이션 노출에 관한 Google Cloud 기반 GKE 문서 읽어보기
지원되는 주석 전체 목록 참조