이 주제에서는 AWS의 GKE에서 AWS Elastic Load Balancer(ELB)를 설정하는 방법을 설명합니다.
LoadBalancer
유형의 서비스를 만들면 GKE on AWS 컨트롤러는 기본 또는 네트워크 ELB on AWS를 구성합니다.
빠른 시작을 따라 Google Cloud 콘솔에서 외부에 노출된 기본 ELB 또는 AWS 애플리케이션 부하 분산기(ALB)를 만들 수도 있습니다.
시작하기 전에
GKE on AWS를 사용하기 전에 다음 작업을 수행했는지 확인합니다.
- 기본 요건을 완료합니다.
- 관리 서비스를 설치합니다.
- 사용자 클러스터를 만듭니다.
anthos-aws
디렉터리에서anthos-gke
를 사용하여 컨텍스트를 사용자 클러스터로 전환합니다.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
CLUSTER_NAME을 사용자 클러스터 이름으로 바꿉니다.curl
명령줄 도구 또는 유사한 도구를 설치합니다.
외부 또는 내부 부하 분산기 선택
GKE on AWS는 LoadBalancer 리소스의 주석에 따라 외부(공개 서브넷) 또는 내부(비공개 서브넷) 부하 분산기를 만듭니다.
외부 부하 분산기를 선택하면 노드 풀의 보안 그룹 및 서브넷의 네트워크 액세스제어 목록(ACL)에서 허용되는 IP 주소가 부하 분산기에 액세스할 수 있습니다.
부하 분산기 유형 선택
기본 부하 분산기(기본 ELB)를 만들지 또는 네트워크 부하 분산기(NLB)를 만들지 선택합니다. 부하 분산기 유형 간의 차이점에 대한 자세한 내용은 AWS 문서의 부하 분산기 유형을 참조하세요.
부하 분산기 만들기
배포를 만들고 서비스를 통해 해당 배포를 노출하여 부하 분산기를 만듭니다.
배포를 만듭니다. 이 배포의 컨테이너는 포트 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
를 사용하여 배포를 만듭니다.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-deployment-50001.yaml
3개의 포드가 실행 중인지 확인합니다.
env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
배포에
LoadBalancer
유형의 서비스를 만듭니다. 공개 또는 비공개 서브넷에 기본 또는 네트워크 ELB를 만들 수 있습니다. 다음 옵션 중 하나를 선택합니다.- 공개 서브넷에 기본 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
를 사용하여 서비스를 만듭니다.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
kubectl get service
를 사용하여 서비스의 호스트 이름을 봅니다.env HTTPS_PROXY=http://localhost:8118 \ kubectl get service my-lb-service \ --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
elb-id.elb.aws-region.amazonaws.com
과 유사한 결과가 출력됩니다.외부에 노출된 부하 분산기를 만들고 공개 VPC 서브넷에 액세스할 수 있는 경우
curl
을 사용하여 부하 분산기에 연결할 수 있습니다. external-ip를 이전 단계의kubectl get service
출력 IP로 바꿉니다.curl external-ip:60000
다음과 유사한 결과가 출력됩니다.
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
삭제
서비스 및 배포를 삭제하려면 kubectl delete
를 사용합니다.
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-lb-service.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-deployment-50001.yaml
문제해결
부하 분산기 엔드포인트에 액세스할 수 없는 경우 서브넷에 태그를 지정해 보세요.
다음 단계
빠른 시작을 따라 Google Cloud Console에서 외부에 노출된 기본 ELB를 만듭니다.
서비스를 사용하여 애플리케이션 노출에 관한 Google Cloud의 GKE 문서 읽어보기