TCP/UDP 부하 분산 구성


개요

사양에 type: LoadBalancer서비스를 만들어 TCP/UDP 부하 분산기를 만들 수 있습니다. 이 페이지에서는 LoadBalancer 서비스를 구성하는 데 사용할 수 있는 매개변수를 설명합니다. 내부 부하 분산기와 관련된 자세한 정보는 내부 패스 스루 네트워크 부하 분산기 사용을 참조하세요. 외부 부하 분산기와 관련된 자세한 정보는 서비스를 사용하여 애플리케이션 노출을 참조하세요.

서비스 매개변수

다음 매개변수는 Google Kubernetes Engine(GKE) LoadBalancer 서비스에서 지원됩니다.

특성 요약 서비스 필드 GKE 버전 지원
내부 트래픽 정책 내부 트래픽 제한을 사용 설정하여 트래픽이 시작된 노드 내의 엔드포인트로만 내부 트래픽을 라우팅합니다. 이 매개변수는 GKE Dataplane V2를 실행하는 클러스터에는 지원되지 않습니다. spec:internalTrafficPolicy GKE 1.22+
외부 트래픽 정책 외부 트래픽이 GKE 노드에 부하 분산되는지 여부를 구성합니다. spec:externalTrafficPolicy GKE 1.14+(Windows 노드 풀을 위한 1.23.4-gke.400+)
부하 분산기 소스 범위 GKE 및 VPC에서 특정 소스 범위만 허용하도록 선택적 방화벽 규칙을 구성합니다. spec:loadBalancerSourceRanges 지원되는 모든 버전
부하 분산기 IP 부하 분산기의 IP를 지정합니다. spec:loadBalancerIP 지원되는 모든 버전
All-ports TCP/UDP 부하 분산기가 특정 포트 대신 모든 포트를 전달하는 기능입니다. 해당 사항 없음 내부 패스 스루 네트워크 부하 분산기의 경우 하위 설정으로 지원됩니다. 외부 부하 분산기의 경우 모든 버전에 대해 지원됩니다.
네트워크 서비스 등급 Google Cloud 부하 분산기가 사용해야 하는 네트워크 등급을 나타냅니다. 유효한 값은 StandardPremium(기본값)입니다. metadata:annotations:cloud.google.com/network-tier GKE 1.19+

외부 트래픽 정책

externalTrafficPolicy는 GKE 노드로 들어오는 트래픽이 부하 분산되는지 여부와 그 방법을 정의하는 표준 서비스 옵션입니다. Cluster는 기본 정책이지만 Local은 클러스터 노드로 들어오는 트래픽의 소스 IP를 보존하는 데 자주 사용됩니다. Local은 클러스터 노드에서 부하 분산을 효과적으로 사용 중지하여 로컬 pod가 수신하는 트래픽에 원래 소스 IP 주소가 표시되도록 합니다.

externalTrafficPolicy는 내부 LoadBalancer 서비스(TCP/UDP 부하 분산기 사용)에서 지원되지만 부하 분산 동작은 트래픽이 발생하는 위치와 구성된 트래픽 정책에 따라 다릅니다.

클러스터 외부에서 TCP/UDP 부하 분산기로 전송된 트래픽은 클러스터에 정상적인 서비스 pod가 하나 이상 있는 경우 다음과 같은 동작을 수행합니다.

  • Cluster 정책: 트래픽이 클러스터의 정상 GKE 노드로 부하 분산된 다음 kube-proxy가 트래픽을 pod가 있는 노드로 전송합니다.
  • Local 정책: 백엔드 pod 중 하나가 없는 노드는 TCP/UDP 부하 분산기에 비정상으로 표시됩니다. 트래픽은 pod가 있는 나머지 정상 클러스터 노드 중 하나로만 전송됩니다. 트래픽은 kube-proxy에 의해 다시 라우팅되지 않고 대신 IP 헤더 정보가 그대로 있는 로컬 Pod로 직접 전송됩니다.

지정된 LoadBalancer 서비스 IP로 오는 트래픽의 소스가 클러스터 내의 GKE 노드인 경우 트래픽 동작이 다릅니다. 다음 표에는 클러스터 내의 노드 또는 Pod가 소스이고 LoadBalancer 서비스의 구성원 Pod로 가는 트래픽의 트래픽 동작이 요약되어 있습니다.

externalTrafficPolicy 트래픽이 발생하는 노드와 동일한 노드에서 실행되는 서비스 구성원 Pod인가? 트래픽 동작
클러스터 패킷이 노드 또는 다른 노드의 모든 구성원 Pod로 전달됩니다.
클러스터 아니요 패킷이 다른 노드에 있는 모든 구성원 Pod로 전달됩니다.
로컬 패킷이 동일한 노드의 모든 구성원 Pod로 전달됩니다.
로컬 아니요

Kubernetes 1.14 및 이전 버전: 패킷이 삭제됩니다.

Kubernetes 1.15 이상: 패킷이 다른 노드에 있는 구성원 Pod로 전달됩니다.

부하 분산기 소스 범위

spec: loadBalancerSourceRanges 배열은 하나 이상의 내부 또는 외부 IP 주소 범위를 지정합니다. loadBalancerSourceRanges는 부하 분산기를 통해 이 필드에서 지정된 IP로 트래픽을 제한합니다. 이 구성을 사용하면 kube-proxy는 Kubernetes 노드에서 해당 iptables 규칙을 만듭니다. 또한 GKE는 VPC 네트워크에 자동으로 방화벽 규칙을 생성합니다. 이 필드를 생략하면 서비스에서 모든 IP 주소(0.0.0.0/0)의 트래픽을 허용합니다.

서비스 사양에 대한 자세한 내용은 서비스 API 참조를 확인하세요.

부하 분산기 IP

spec: loadBalancerIP를 사용하면 부하 분산기의 특정 IP 주소를 선택할 수 있습니다. 이 IP 주소를 다른 내부 패스 스루 네트워크 부하 분산기 또는 서비스에서 사용하지 않아야 합니다. 생략되면 임시 IP가 할당됩니다. 자세한 내용은 고정 내부 IP 주소 예약을 참조하세요.

spec: loadBalancerIP의 IP 주소가 표준 등급 IP인 경우 Google Kubernetes Engine이 지정된 IP 주소와 동일한 네트워크 등급으로 전달 규칙을 만들어야 하기 때문에 Standard 값을 포함한 cloud.google.com/network-tier 주석이 필수입니다. Google Kubernetes Engine 1.17 이상부터는 프로젝트 기본 네트워크 등급에 관계없이 전달 규칙을 만들기 위한 기본 네트워크 등급이 Premium입니다.

All-ports

GKE 1.20.6 이상 또는 1.21 이상 버전에서 서비스 사양에 포트가 5개 이상 있는 경우 GKE 컨트롤러는 전달 규칙에서 allPorts 필드를 자동으로 설정합니다. 클러스터에서 내부 패스 스루 네트워크 부하 분산기 하위 설정을 사용 설정한 경우 이 동작은 GKE 버전 1.18 이상 및 1.19 이상에서도 사용할 수 있습니다.

수동으로 내부 패스 스루 네트워크 부하 분산기를 만드는 경우에는 Google Kubernetes Engine 노드의 인스턴스 그룹을 백엔드로 선택할 수 있습니다. 내부 패스 스루 네트워크 부하 분산기를 통해 type: NodePort의 Kubernetes 서비스를 사용할 수 있습니다.

네트워크 서비스 등급

cloud.google.com/network-tier 주석은 GKE 버전 1.19 이상에서 외부 전달 규칙과 IP 주소에 사용해야 하는 네트워크 서비스 등급을 지정합니다. 유효한 값으로는 표준 및 프리미엄이 있습니다. 기본값은 프리미엄입니다.

이 주석은 외부 부하 분산기에서만 지원됩니다.

다음 단계