Amazon EKS의 Application Load Balancer에서 사용하는 서브넷을 자동으로 검색하려면 어떻게 해야 하나요?
최종 업데이트 날짜: 2021년 8월 3일
Amazon Elastic Kubernetes Service(Amazon EKS)의 Application Load Balancer(ALB)에서 사용하는 서브넷을 자동으로 검색하고 싶습니다.
간략한 설명
AWS Load Balancer Controller가 Application Load Balancer에 사용되는 서브넷을 자동으로 검색하도록 AWS 서브넷에 태그를 지정할 수 있습니다.
해결 방법
1. Amazon EKS 클러스터용 AWS Load Balancer Controller를 배포합니다.
2. AWS Load Balancer Controller가 설치되어 있는지 확인합니다.
kubectl get deployment -n kube-system aws-load-balancer-controller
참고: 배포가 다른 네임스페이스에 배포된 경우 -n kube-system을 적절한 네임스페이스로 바꿉니다.
3. 다음 주석을 사용하여 클러스터에 Kubernetes 인그레스 리소스를 만듭니다.
annotations:
kubernetes.io/ingress.class: alb
참고: AWS Load Balancer Controller는 로드 밸런서를 생성합니다. 인그레스 리소스는 HTTP(S) 트래픽을 클러스터 내의 다른 포드로 라우팅하도록 Application Load Balancer를 구성합니다.
4. [internal] 또는 [internet-facing] 주석을 추가하여 인그레스가 로드 밸런서를 생성할 위치를 지정합니다.
alb.ingress.kubernetes.io/scheme: internal
또는
alb.ingress.kubernetes.io/scheme: internet-facing
참고: 내부 로드 밸런서를 생성하려면 [internal]을 선택하고, 퍼블릭 로드 밸런서를 생성하려면 [internet-facing]을 선택합니다.
5. 태그를 사용하면 Application Load Balancer 인그레스 컨트롤러가 자동 검색을 통해 로드 밸런서를 생성할 수 있습니다. 예시:
kubernetes.io/role/internal-elb Set to 1 or empty tag value for internal load balancers
kubernetes.io/role/elb Set to 1 or empty tag value for internet-facing load balancers
참고: 수동 alb.ingress.kubernetes.io/subnets 주석 대신 자동 검색에 태그를 사용할 수 있습니다.
내부 로드 밸런서가 있는 클러스터에 대해 올바른 태그가 지정된 서브넷의 예:
kubernetes.io/role/internal-elb 1
퍼블릭 로드 밸런서가 있는 클러스터에 올바른 태그가 지정된 서브넷의 예:
kubernetes.io/role/elb 1
참고: 클러스터 버전 1.18 이전 버전의 경우, Amazon EKS에서는 클러스터 생성 중에 전달된 모든 서브넷에 다음 태그를 추가합니다. 태그는 버전 1.19 클러스터에 추가되지 않습니다. 태그를 사용하고 있고 이전 버전에서 클러스터 버전 1.19로 업데이트하는 경우 태그를 다시 추가할 필요가 없습니다. 태그는 서브넷에 유지됩니다. 다음 태그를 사용하여 Application Load Balancer가 프로비저닝되는 위치를 제어할 수 있습니다. Application Load Balancer를 자동으로 프로비저닝하는 데 필요한 서브넷 태그 외에 이 태그를 사용합니다.
kubernetes.io/cluster/$CLUSTER_NAME shared
중요: AWS Load Balancer Controller 워크플로에서는 서브넷 태그에 ""(빈 문자열) 및 1 값이 있는지 확인합니다. 프라이빗 서브넷의 경우 kubernetes.io/role/internal-elb 태그의 값을 빈 문자열 또는 1로 설정합니다. 퍼블릭 서브넷의 경우 kubernetes.io/role/elb 태그의 값을 빈 문자열 또는 1로 설정합니다. 이러한 태그를 사용하면 Application Load Balancer의 Amazon EKS VPC 서브넷에서 서브넷을 자동 검색할 수 있습니다.
6. Amazon EKS VPC 서브넷에 올바른 태그가 있는지 확인합니다.
aws ec2 describe-subnets --subnet-ids your-subnet-xxxxxxxxxxxxxxxxx
7. 샘플 애플리케이션을 배포하여 AWS Load Balancer Controller가 인그레스 객체로 인해 Application Load Balancer를 생성하는지 확인합니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml
8. 인그레스 리소스가 생성되고 연결된 Application Load Balancer가 있는지 확인합니다.
kubectl get ingress/2048-ingress -n 2048-game
인그레스 객체 및 서브넷에 정의한 주석(alb.ingress.kubernetes.io/scheme:)에 따라 내부 또는 인터넷 연결 로드 밸런서가 생성됩니다.