LoadBalancer 서비스 매개변수

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 페이지에서는 LoadBalancer 서비스 동작 및 구성을 제어하는 서비스 매니페스트의 매개변수에 대해 설명합니다. 이 페이지를 읽기 전에 Google Kubernetes Engine(GKE) LoadBalancer 서비스 개념을 숙지해야 합니다.

서비스 매개변수

GKE는 LoadBalancer 서비스에서 다음 매개변수를 지원합니다.

매개변수 서비스 필드 및 설명 내부 외부 버전 지원
내부 TCP/UDP 부하 분산기 networking.gke.io/load-balancer-type: "Internal"

내부 TCP/UDP 부하 분산기를 만들도록 GKE에 지시합니다.

자세한 내용은 LoadBalancer 서비스 개념을 참조하세요.

지원되는 모든 버전
백엔드 서비스 기반 네트워크 부하 분산기 cloud.google.com/l4-rbs: "enabled"

GKE가 백엔드 서비스 기반 네트워크 부하 분산기를 만들도록 지시합니다.

자세한 내용은 LoadBalancer 서비스 개념을 참조하세요.

GKE 1.24+
외부 트래픽 정책 spec.externalTrafficPolicy

부하 분산기 상태 점검을 통과하는 노드와 패킷이 클러스터에서 준비 및 제공 포드로 라우팅되는 방법을 제어합니다. GKE 하위 설정이 사용 설정된 경우 노드가 GCE_VM_IP NEG로 그룹화되는 방법도 제어합니다.

자세한 내용은 LoadBalancer 서비스 개념을 참조하세요.

GKE 1.14+(Windows 노드 풀을 위한 1.23.4-gke.400+)
상태 점검 포트 spec.healthCheckNodePort

LoadBalancer 서비스의 부하 분산기 상태 점검을 배포합니다. 이 매개변수는 spec.externalTrafficPolicyLocal인 경우에만 관련이 있습니다.

지원되는 모든 버전
방화벽 규칙 및 소스 IP 주소 허용 목록 spec.loadBalancerSourceRanges

GKE 및 VPC 네트워크에서 특정 소스 범위만 허용하도록 선택적 방화벽 규칙을 구성합니다.

지원되는 모든 버전
고정 IP 주소 spec.loadBalancerIP

부하 분산기의 전달 규칙에 할당된 고정 IP 주소를 지정합니다.

지원되는 모든 버전
네트워크 서비스 등급 metadata:annotations:cloud.google.com/network-tier

GKE가 외부 전달 규칙 및 IP 주소에 사용하는 네트워크 서비스 등급을 지정합니다. 유효한 주석 값은 StandardPremium(기본값)입니다.

GKE 1.19 이상
커스텀 서브넷 networking.gke.io/internal-load-balancer-subnet: SUBNET_NAME

내부 TCP/UDP 부하 분산기의 전달 규칙 IP 주소에 사용할 클러스터의 VPC 네트워크 및 리전에 있는 서브넷을 지정합니다.

GKE 1.17 이상 및 1.16.8-gke.10 이상에서 미리보기 버전. GKE 1.17.9-gke.600 이상에서 정식 버전.
전역 액세스 networking.gke.io/internal-load-balancer-allow-global-access: "true"

VPC 네트워크 또는 연결된 네트워크의 모든 리전에서 클라이언트가 액세스할 수 있도록 전달 규칙의 IP 주소를 사용 설정합니다.

GKE 1.16 이상에서 미리보기 버전. GKE 1.17.9-gke.600 이상에서 정식 버전.
모든 포트

주석이 필요하지 않지만 GKE 하위 설정이 사용 설정되어야 합니다.

spec.ports[].port에 최소 6개(최대 100개)의 고유 포트가 지정된 경우 GKE가 모든 포트를 사용하도록 전달 규칙을 자동으로 구성합니다.

GKE 버전 1.18.19-gke.1400 이상.

상태 점검 포트

부하 분산기 상태 점검 및 externalTrafficPolicy에 설명된 대로 GKE는 외부 네트워크 부하 분산기나 내부 TCP/UDP 부하 분산기를 만들 때 항상 부하 분산기 상태 점검을 배포합니다.

healthCheckNodePort 매개변수의 설정 가능 여부는 다음 externalTrafficPolicy 구성에 따라 다릅니다.

externalTrafficPolicy 상태 점검 포트
Cluster

spec.healthCheckNodePort를 사용할 수 없습니다.

Local

spec.healthCheckNodePort를 사용하여 커스텀 포트를 선택할 수 있습니다. 지정되지 않은 경우 Kubernetes 제어 영역은 노드 포트 범위에서 상태 점검 포트를 할당합니다.

방화벽 규칙 및 소스 IP 주소 허용 목록

LoadBalancer 서비스를 만들면 GKE는 서비스에 해당하는 VPC 방화벽 규칙을 만듭니다. 각 방화벽 규칙의 특징은 다음과 같습니다.

  • 방화벽 규칙의 방향은 인그레스이며 해당 작업이 허용됩니다. Google Cloud의 묵시적 거부 인그레스 방화벽 규칙은 GKE가 인그레스 방화벽 규칙을 만들 때 허용 목록 모델을 사용한다는 의미입니다.
  • GKE는 방화벽 규칙의 프로토콜 및 대상 포트를 서비스의 spec.ports[] 목록에 지정된 포트로 설정합니다.
  • GKE는 대상 매개변수를 클러스터의 모든 노드에 할당된 대상 태그로 설정하여 방화벽 규칙의 대상을 설정합니다.
  • 서비스에 spec.loadBalancerSourceRanges[]가 포함된 경우 GKE는 방화벽 규칙의 소스 매개변수를 해당 목록의 IP 주소로 설정합니다. 서비스에 loadBalancerSourceRanges[]가 포함되지 않은 경우 GKE는 방화벽 규칙의 소스 매개변수를 모든 IP 주소 (0.0.0.0/0)로 설정합니다.

LoadBalancer 서비스에 생성된 방화벽 규칙은 해당 서비스의 프로토콜 및 대상 포트와 일치하는 패킷을 다음 대상 IP 주소 모두에 허용합니다.

  • 클러스터에 있는 모든 포드 IP 주소
  • 클러스터에 있는 모든 노드 IP 주소
  • 모든 클러스터 LoadBalancer 서비스의 모든 전달 규칙 IP 주소

방화벽 규칙이 IP 주소 대상을 제한하지 않지만 다음 조건은 트래픽 동작을 제한합니다.

  • LoadBalancer 서비스에 생성된 전달 규칙은 패킷이 전달 규칙의 프로토콜, 대상 IP 주소, 포트와 일치하는 경우에만 패킷을 라우팅합니다
  • 노드가 유효한 대상 IP 주소 및 포트 조합과 일치하지 않으면 패킷을 거부합니다. 유효한 대상 IP 주소 및 포트 조합은 다음과 같습니다.

    • 포드 IP 주소 및 해당 포드의 컨테이너에 대한 containerPort
    • 노드 IP 주소 및 nodePort
    • 전달 규칙 IP 주소 및 LoadBalancer 서비스의 spec.ports[].port
  • 네트워크 정책을 사용하면 노드가 패킷을 허용하거나 거부하는 방식을 추가로 맞춤설정할 수 있습니다.

공통 포트를 사용하는 서비스

클러스터에 공통 프로토콜과 대상 포트를 하나 이상 공유하는 서비스가 두 개 이상 있는 경우 유효한 소스 범위 집합은 해당 프로토콜과 대상 포트 조합을 지정하는 모든 서비스에 대한 loadBalancerSourceRanges의 합집합입니다. 이는 인그레스 방화벽 규칙의 대상 매개변수가 대상 IP 주소를 VM과 연결된 모든 IP 주소로 정의하기 때문입니다.

두 개의 LoadBalancer 서비스가 있는 클러스터를 가정해 보세요.

  • 첫 번째 서비스의 spec.ports[0].port는 TCP 포트 80이고 spec.loadBalancerSourceRanges=[100.10.0.0/16]입니다. 이 서비스에 해당하는 결과 부하 분산기의 IP 주소는 192.0.2.2입니다.
  • 두 번째 서비스의 spec.ports[0].port는 TCP 포트 80이고, spec.ports[1].port는 TCP 포트 90이고, spec.loadBalancerSourceRanges=[172.16.0.0/24]입니다. 이 서비스에 해당하는 결과 부하 분산기의 IP 주소는 198.51.100.3입니다.

GKE는 클러스터의 Virtual Private Cloud 네트워크에 두 개의 인그레스 허용 방화벽 규칙을 만듭니다. 두 방화벽 규칙 모두 클러스터의 모든 노드를 대상으로 지정합니다.

  • 첫 번째 방화벽 규칙은 소스 100.10.0.0/16에서 TCP 대상 포트 80으로의 패킷을 허용합니다.
  • 두 번째 방화벽 규칙은 소스 172.16.0.0/24에서 TCP 대상 포트 8090으로의 패킷을 허용합니다.

첫 번째 전달 규칙은 192.0.2.2:80 대상과 일치하는 트래픽을 라우팅합니다. 두 번째 전달 규칙은 198.51.100.3:80198.51.100.3:90 대상과 일치하는 트래픽을 라우팅합니다. 다음 3개는 모두 각 노드에 유효한 대상입니다(192.0.2.2:80, 198.51.100.3:80, 198.51.100.3:90). 다시 말하면 다음과 같습니다.

  • 두 서비스 모두 IP 주소 소스 범위 합집합(100.10.0.0/16 또는 172.16.0.0/24)에서 TCP 포트 80으로의 패킷을 허용합니다.
  • 두 번째 서비스는 172.16.0.0/24에서 TCP 포트 90으로의 패킷을 허용합니다.

동일한 프로토콜 및 대상 포트 조합을 사용하는 모든 서비스의 유효한 소스 범위 집합은 해당 프로토콜 및 대상 포트 조합을 사용하는 하나 이상의 서비스에서 spec.loadBalancerSourceRanges가 생략된 경우 모든 IP 주소가 됩니다. 예를 들어 두 번째 서비스에 spec.loadBalancerSourceRanges가 생략된 경우 두 번째 방화벽의 소스는 0.0.0.0/0이며 다음을 충족합니다.

  • 두 서비스 모두 IP 주소 소스 범위 합집합(100.10.0.0/16 또는 0.0.0.0/0)에서 TCP 포트 80으로의 패킷을 허용합니다. 0.0.0.0/0 범위에는 100.10.0.0/16 범위가 포함되므로 TCP 포트 80으로의 패킷의 유효한 소스는 모든 IP 주소입니다.
  • 두 번째 서비스는 0.0.0.0/0(모든 IP 주소)에서 TCP 포트 90으로의 패킷을 허용합니다.

고정 IP 주소

고정 IP 주소를 만들고 이 고정 IP 주소를 부하 분산기의 전달 규칙에 할당하도록 GKE를 구성할 수 있습니다. 이렇게 하면 LoadBalancer 서비스를 변경하더라도 부하 분산기의 IP 주소가 동일하게 유지됩니다. 이 주석이 없으면 외부 네트워크 부하 분산기 또는 내부 TCP/UDP 부하 분산기의 전달 규칙에 할당하는 IP 주소가 LoadBalancer 서비스를 업데이트할 때 변경될 수 있습니다.

일관된 IP 주소를 유지하려면 spec.loadBalancerIP 매개변수를 사용하여 LoadBalancer 서비스 한 개 이상에 고정 IPv4 주소를 지정할 수 있습니다.

두 개 이상의 LoadBalancer 서비스가 동일한 spec.loadBalancerIP를 참조하는 경우 각 LoadBalancer 서비스는 다음 규칙에 따라 프로토콜과 포트의 고유한 조합을 사용해야 합니다.

내부 외부
전달 규칙 내부 TCP/UDP 부하 분산기의 전달 규칙은 내부 IP 주소, 프로토콜, 포트의 고유한 조합을 사용해야 합니다. 외부 네트워크 부하 분산기의 전달 규칙은 외부 IP 주소, 프로토콜, 포트 범위의 고유한 조합을 사용해야 합니다.
포트 범위

내부 LoadBalancer 서비스에 spec.ports[]가 6개 이상 지정된 경우 GKE에서 모든 포트를 사용하도록 내부 TCP/UDP 부하 분산기의 전달 규칙을 구성합니다.

전달 규칙에서 모든 포트를 사용하는 경우 다른 전달 규칙(즉, 다른 내부 LoadBalancer 서비스)에서는 동일한 IP 주소를 사용할 수 없습니다.

포트 범위에는 서비스에 필요한 모든 포트가 포함되지만 서비스에서 사용되지 않는 포트 번호가 더 포함될 수도 있습니다.

예를 들어 서비스 매니페스트에서 포트 80 및 443을 할당하는 대상 풀에 기반한 외부 부하 분산기로 구동되는 외부 LoadBalancer 서비스는 포트 범위 80~443을 할당하는 전달 규칙을 사용해야 합니다. 이렇게 포트 범위가 할당되면 다른 외부 LoadBalancer 서비스에서 80~443 포트 중 하나를 사용하지 못합니다.

고정 IP 주소 리전 내부 TCP/UDP 부하 분산기에는 클러스터와 동일한 리전에 있는 리전 내부 IPv4 주소가 필요합니다. 외부 네트워크 부하 분산기에는 클러스터와 동일한 리전에 있는 리전 외부 IPv4 주소가 필요합니다.
고정 IP 주소 네트워크 서비스 등급 모든 내부 주소는 프리미엄 등급이므로 구성할 수 없습니다.

외부 네트워크 부하 분산기의 전달 규칙에 예약하는 고정 외부 IP 주소는 서비스 매니페스트의 metadata:annotations:cloud.google.com/network-tier 주석에 지정된 것과 동일한 등급을 사용해야 합니다.

metadata:annotations:cloud.google.com/network-tier 주석이 없는 경우 외부 네트워크 부하 분산기의 전달 규칙에 대해 예약한 고정 외부 IP 주소는 프로젝트의 기본 등급(프리미엄으로 구성되지 않는 한 프리미엄)을 사용해야 합니다.

추가 고정 IP 주소 요구사항 내부 TCP/UDP 부하 분산기의 전달 규칙에 예약하는 고정 내부 IP 주소는 SHARED_LOADBALANCER_VIP 용도여야 하며 다음 서브넷 IP 주소 범위 중 하나에서 가져와야 합니다.
  • 서비스 매니페스트에서 networking.gke.io/internal-load-balancer-subnet 주석을 사용하여 커스텀 서브넷을 지정하는 경우, 예약하는 고정 내부 IP 주소를 해당 커스텀 서브넷의 기본 서브넷 IPv4 주소 범위에서 가져와야 합니다.
  • 서비스 매니페스트에서 커스텀 서브넷을 지정하지 않는 경우, 예약하는 고정 내부 IP 주소를 클러스터 서브넷의 기본 서브넷 IPv4 주소 범위에서 가져와야 합니다.
해당 없음

커스텀 서브넷

내부 LoadBalancer 서비스의 경우 networking.gke.io/internal-load-balancer-subnet 주석을 사용하여 클러스터와 동일한 VPC 네트워크 및 리전에 있는 기존 서브넷을 지정할 수 있습니다.

   metadata:annotations: networking.gke.io/internal-load-balancer-subnet: SUBNET_NAME

GKE는 지정된 서브넷의 기본 IPv4 주소 범위에서 부하 분산기의 전달 규칙에 대한 내부 IPv4 주소를 선택합니다. 자세한 내용은 내부 TCP/UDP 부하 분산기 전달 규칙을 참조하세요.

다른 서브넷에서 부하 분산기의 전달 규칙을 만들면 다음과 같은 경우에 유용합니다.

  • 부하 분산기의 IP 주소를 노드의 IP 주소 범위에서 분리하면 클러스터 서비스 및 노드에 연결하는 클라이언트에 적용할 수 있는 이그레스 방화벽 구성에 유용합니다.

  • 동일한 VPC 네트워크 및 리전에 있는 하나 이상의 클러스터에서 공통 IP 주소 범위로 서비스를 그룹화합니다.

networking.gke.io/internal-load-balancer-subnet 주석 없이 내부 LoadBalancer 서비스를 지정하면 GKE는 클러스터 서브넷의 기본 IPv4 주소 범위에서 부하 분산기의 IP 주소를 선택합니다. 클러스터의 부하 분산기 전달 규칙과 노드는 동일한 서브넷 기본 IPv4 주소 범위를 사용합니다.

다음 GKE 버전에서 내부 부하 분산기용 커스텀 서브넷을 만들 수 있습니다.

  • GKE 1.17 이상 및 1.16.8-gke.10 이상에서 미리보기 버전
  • GKE 1.17.9-gke.600 이상에서 정식 버전

서브넷의 기본 IPv4 주소 범위 내에서 고정 IP 주소를 할당하는 방법에 대한 상세 설명은 고정 IP 주소를 참조하세요.

전역 액세스

networking.gke.io/internal-load-balancer-allow-global-access 주석이 false이거나 내부 LoadBalancer 서비스에 지정되지 않은 경우 GKE는 전달 규칙에 전역 액세스가 사용 중지된 내부 TCP/UDP 부하 분산기를 만듭니다. 전역 액세스가 사용 중지된 경우 부하 분산기에 액세스해야 하는 클라이언트는 동일한 리전 및 VPC 네트워크 또는 클러스터의 VPC 네트워크에 연결된 네트워크에 있어야 합니다.

networking.gke.io/internal-load-balancer-allow-global-access 주석이 내부 LoadBalancer 서비스의 true인 경우 GKE는 내부 TCP/UDP 부하 분산기의 전달 규칙에서 전역 액세스 옵션을 사용 설정합니다. VPC 네트워크의 모든 리전 또는 클러스터의 VPC 네트워크에 연결된 네트워크에 있는 클라이언트는 부하 분산기에 액세스할 수 있습니다.

연결된 네트워크의 클라이언트에 적용되는 전역 액세스에 대한 자세한 내용은 다음을 참조하세요.

모든 포트 전달 규칙

내부 TCP/UDP 부하 분산기의 전달 규칙은 5개의 고유 포트 번호 또는 모든 포트를 지원합니다.

GKE 하위 설정이 사용 중지된 GKE 클러스터에서 내부 LoadBalancer 서비스는 서비스의 spec.ports[].port에 있는 5개의 고유 포트만 지원할 수 있습니다.

GKE 하위 설정이 사용 설정된 GKE 클러스터에서 내부 LoadBalancer 서비스는 서비스의 spec.ports[].port에 있는 최대 100개의 포트만 지원할 수 있습니다. 6개~100개의 고유한 spec.ports[].port 항목이 있는 내부 LoadBalancer 서비스의 경우 GKE는 생성 후 모든 포트를 사용하도록 내부 TCP/UDP 부하 분산기의 전달 규칙을 구성합니다. 서비스에 포트가 6개 이상 있으므로 GKE 컨트롤러는 전달 규칙의 모든 포트를 사용 설정합니다. 모든 포트를 사용하도록 전달 규칙을 구성하면 GKE는 서비스의 spec.ports[].port에 구성된 특정 포트에 대한 인그레스 허용 방화벽 규칙만 만듭니다.

내부 TCP/UDP 부하 분산기 전달 규칙과 유효한 포트 사양에 대한 자세한 내용은 전달 규칙 및 포트 사양을 참조하세요.