부하 분산기 서브넷

이 페이지에서는 AWS에서 AWS용 GKE를 사용하여 서비스 부하 분산기에 대한 서브넷을 선택하고 서비스 부하 분산기를 만들 때 자동 검색을 사용하도록 서브넷에 태그를 지정하는 방법을 설명합니다.

서브넷을 지정해야 하는 이유

부하 분산기를 만들려면 이를 배치할 서브넷을 AWS에 지정해야 합니다. 서브넷은 부하 분산기 가용성 영역, IP 주소 및 엔드포인트를 결정합니다.

일반적으로 부하 분산기는 노드 풀을 포함하는 각 가용성 영역에 대해 하나의 서브넷에 할당됩니다. AWS는 네트워크 부하 분산기(NLB)를 만들기 위해 최소 하나의 사용 가능한 서브넷이 필요합니다. 애플리케이션 부하 분산기(ALB)를 위해서는 최소 2개의 서브넷이 필요합니다.

모든 AWS 서브넷은 공개 IP와 VPC 인터넷 게이트웨이 경로가 포함된 공개 서브넷이거나 이러한 특성이 없는 비공개 서브넷일 수 있습니다. 인터넷 연결 부하 분산기는 공개 서브넷에 있어야 합니다. 내부 부하 분산기는 공개 또는 비공개 서브넷에 있을 수 있습니다.

태그가 지정된 서브넷이 없는 경우

AWS용 GKE가 부하 분산기를 만들어야 하고 사용 가능한 태그 지정된 서브넷이 없거나 용량이 없으면 다른 서브넷에 부하 분산기를 만들 수 있습니다. 이를 방지하고 부하 분산기가 배치되는 서브넷을 제어하기 위해서는 모든 서브넷을 태그 지정해야 합니다.

서브넷 자동 검색

AWS용 GKE는 VPC에 있는 모든 서브넷을 나열하고 각 가용성 영역에서 최대 1개의 서브넷을 선택하여 부하 분산기에 사용할 서브넷을 자동으로 검색합니다.

AWS용 GKE가 서브넷을 자동 검색하기 위해서는 서브넷이 다음 요건을 충족해야 합니다.

  • kubernetes.io/role/elb로 태그가 지정되어야 합니다(인터넷 연결 부하 분산기).
  • kubernetes.io/role/internal-elb로 태그가 지정되어야 합니다(내부 부하 분산기).
  • kubernetes.io/cluster/ 프리픽스를 사용하는 태그를 포함하지 않아야 합니다. 또는 CLUSTER_UID가 현재 클러스터의 UID인 kubernetes.io/cluster/CLUSTER_UID 태그를 포함해야 합니다.

또한 인터넷 연결 부하 분산기에 사용할 서브넷은 VPC의 인터넷 게이트웨이에 대한 경로를 포함해야 합니다.

가용성 영역에서 부하 분산기의 요구사항을 충족하는 여러 서브넷이 있으면 AWS용 GKE가 해당 서브넷 ID의 순서로 서브넷 순위를 지정합니다.

의도된 용도로 서브넷에 태그 지정

AWS용 GKE가 부하 분산기의 서브넷을 자동으로 검색할 수 있게 하려면 해당 가용성을 알리도록 서브넷에 두 태그 중 하나를 적용해야 합니다. 각 필터는 다음과 같습니다.

  • kubernetes.io/role/elb: 인터넷 연결 부하 분산기에 사용할 수 있도록 하려면 서브넷에 이 태그를 적용합니다. VPC 인터넷 게이트웨이에 대한 경로가 포함된 공개 서브넷이어야 합니다. 이 태그를 1로 설정합니다. 이 태그를 적용하려면 다음 명령어를 실행합니다.

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags "Key=kubernetes.io/role/elb,Value=1"
    
  • kubernetes.io/role/internal-elb: 내부 부하 분산기에 사용할 수 있도록 하려면 서브넷에 이 태그를 적용합니다. 태그 값을 1로 설정합니다. 이 태그를 적용하려면 다음 명령어를 실행합니다.

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags Key=kubernetes.io/role/internal-elb,Value=1
    

다음을 바꿉니다.

  • SUBNET_ID: 태그를 지정하려는 서브넷의 ID입니다.

서브넷에 kubernetes.io/role 태그를 지정한 후 하나 이상의 kubernetes.io/cluster/CLUSTER_UID 태그를 지정할 수도 있습니다. 여기서 CLUSTER_UID는 AWS용 GKE 클러스터의 UID입니다. 이렇게 하면 이러한 태그 중 하나에 나열되지 않은 클러스터에서 해당 부하 분산기에 사용할 서브넷이 자동 검색되지 않습니다.

aws ec2 create-tags 명령어에 대한 자세한 내용은 Amazon aws ec2 create-tags 문서를 참조하세요.

문제 해결

부하 분산기 구성에서 가장 일반적인 문제는 태그가 잘못 지정된 서브넷입니다. 이 경우 자동 검색 알고리즘이 잘못된 서브넷을 선택할 수 있습니다. 이 문제를 진단하고 해결하려면 다음 안내를 따르세요.

  • 인터넷 연결 부하 분산기를 만드는 경우 노드 풀이 있는 각 가용성 영역에 최소 하나 이상의 공개 서브넷이 있고 서브넷이 kubernetes.io/role/elb로 태그 지정되었는지 확인합니다.

  • 내부 부하 분산기를 만드는 경우에는 노드 풀이 있는 각 가용성 영역에서 서브넷이 하나 이상 있고 서브넷이 kubernetes.io/role/internal-elb로 태그 지정되었는지 확인합니다.

  • 자동 검색할 서브넷에 kubernetes.io/cluster/CLUSTER_UID 형태의 태그가 있는지 확인합니다. 서브넷에 클러스터 이름을 지정하는 태그가 있으면 클러스터에 지정된 이름으로만 서브넷을 자동 검색할 수 있습니다. 이 문제를 해결하기 위해서는 모든 클러스터 이름 태그를 삭제(모든 클러스터에서 서브넷이 자동 검색되도록 허용)하거나 AWS용 GKE 클러스터 UID와 shared 값을 사용해서 클러스터 이름 태그를 추가합니다.

  • 다음 명령어로 Kubernetes 이벤트 기록을 확인합니다.

    kubectl get events -A | grep LoadBalancer
    

    예를 들어 이벤트 메시지 could not find any suitable subnets for creating the ELB는 서브넷을 자동 검색할 수 없음을 나타냅니다. 이 경고가 표시되면 서브넷 및 해당 태그가 올바르고 완전한지 확인합니다.

  • 인터넷 연결 부하 분산기에 대해 자동 검색할 수 있는 서브넷을 나열하려면 다음 명령어를 실행합니다.

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/elb,Values=*"
    

    VPC_ID를 VPC ID로 바꿉니다.

  • 내부 부하 분산기에 대해 자동 검색할 수 있는 서브넷을 나열하기 위해 다음을 실행합니다.

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/internal-elb,Values=*"
    

다음 단계