내부 애플리케이션 부하 분산기용 인그레스


이 페이지에서는 내부 애플리케이션 부하 분산기용 인그레스가 Google Kubernetes Engine(GKE)에서 작동하는 방식을 설명합니다. 내부 애플리케이션 부하 분산기용 인그레스를 설정 및 사용하는 방법도 알아볼 수 있습니다.

GKE에서 내부 애플리케이션 부하 분산기는 프록시 기반의 리전별 레이어 7 부하 분산기로 내부 부하 분산 IP 주소를 기반으로 서비스를 실행하고 확장할 수 있습니다. GKE 인그레스 객체는 GKE 클러스터에서 인그레스 객체를 생성하여 기본적으로 내부 애플리케이션 부하 분산기를 지원합니다.

GKE에서 부하 분산을 사용하는 방법에 대한 일반적인 내용은 인그레스로 HTTP(S) 부하 분산을 참조하세요.

내부 애플리케이션 부하 분산기용 인그레스 사용 시 이점

내부 애플리케이션 부하 분산기에 GKE 인그레스를 사용하면 다음과 같은 이점이 있습니다.

  • 가용성이 높은 GKE 관리형 인그레스 컨트롤러입니다.
  • 내부 서비스 간 통신을 위한 부하 분산입니다.
  • 네트워크 엔드포인트 그룹(NEG)을 통한 컨테이너 기반 부하 분산입니다.
  • HTTP 및 HTTPS를 지원하는 애플리케이션 라우팅입니다.
  • 고품질의 Compute Engine 상태 확인을 통해 복원력이 우수한 서비스를 제공합니다.
  • 트래픽 용량 요구사항을 충족하도록 필요에 따라 배포되는 Envoy 기반 프록시입니다.

Google Cloud 기능 지원

내부 애플리케이션 부하 분산기용 인그레스는 다양한 추가 기능을 지원합니다.

내부 애플리케이션 부하 분산기에 필요한 네트워킹 환경

내부 애플리케이션 부하 분산기는 네트워크의 프록시 풀을 제공합니다. 프록시는 URL 맵, BackendService의 세션 어피니티, 각 백엔드 NEG의 분산 모드 등 기타 요인을 기반으로 이동하는 각 HTTP(S) 요청의 위치를 평가합니다.

리전의 내부 애플리케이션 부하 분산기는 VPC 네트워크의 해당 리전에 프록시 전용 서브넷을 사용하여 Google Cloud에 의해 생성된 각 프록시에 내부 IP 주소를 할당합니다.

기본적으로 부하 분산기의 전달 규칙에 할당되는 IP 주소는 프록시 전용 서브넷 대신 GKE에서 할당한 노드의 서브넷 범위에서 가져옵니다. 또한 규칙을 만들 때 모든 서브넷에서 전달 규칙의 IP 주소를 수동으로 지정할 수 있습니다.

다음 다이어그램은 이전 단락에서 설명한 대로 내부 애플리케이션 부하 분산기의 트래픽 흐름을 간략하게 보여줍니다.

이미지

내부 애플리케이션 부하 분산기 작동 방식은 다음과 같습니다.

  1. 클라이언트는 부하 분산기 전달 규칙의 IP 주소와 포트에 연결됩니다.
  2. 프록시는 클라이언트의 네트워크 연결을 수신하고 종료합니다.
  3. 프록시는 부하 분산기의 URL 맵과 백엔드 서비스에서 지정한 대로 NEG의 적절한 엔드포인트(Pod)에 대한 연결을 설정합니다.

각 프록시는 해당 부하 분산기의 전달 규칙에서 지정한 IP 주소와 포트를 리슨합니다. 프록시에서 엔드포인트로 전송되는 각 패킷의 소스 IP 주소는 프록시 전용 서브넷에서 프록시에 할당된 내부 IP 주소입니다.

부하 분산기와 애플리케이션 간 HTTPS(TLS)

내부 애플리케이션 부하 분산기는 클라이언트와 애플리케이션 사이의 프록시 역할을 합니다. 클라이언트는 HTTP 또는 HTTPS를 사용하여 부하 분산기 프록시와 통신할 수 있습니다. 부하 분산기 프록시와 애플리케이션 간의 연결에는 기본적으로 HTTP가 사용됩니다. 하지만 애플리케이션이 GKE Pod에서 실행되고 HTTPS 요청을 수신할 수 있으면 애플리케이션으로 요청을 전달할 때 HTTPS를 사용하도록 부하 분산기를 구성할 수 있습니다.

부하 분산기와 애플리케이션 사이에서 사용되는 프로토콜을 구성하려면 서비스 매니페스트에서 cloud.google.com/app-protocols 주석을 사용합니다.

다음 서비스 매니페스트는 두 포트를 지정합니다. 주석은 내부 애플리케이션 부하 분산기가 서비스의 포트 80을 타겟팅할 때 HTTP를 사용하도록 지정하고 서비스의 포트 443을 타겟팅할 때 HTTPS를 사용하도록 지정합니다.

주석에 포트의 name 필드를 사용해야 합니다. targetPort와 같은 다른 필드를 사용하지 마세요.

apiVersion: v1
kind: Service
metadata:
  name: my-service
  annotations:
    cloud.google.com/app-protocols: '{"my-https-port":"HTTPS","my-http-port":"HTTP"}'
spec:
  type: NodePort
  selector:
    app: metrics
    department: sales
  ports:
  - name: my-https-port
    port: 443
    targetPort: 8443
  - name: my-http-port
    port: 80
    targetPort: 50001

다음 단계