내부 부하 분산기 구성

내부 부하 분산기 (ILB)는 조직에 할당된 내부 IP 풀에서 조직 내 서비스를 노출합니다. ILB 서비스는 조직 외부의 엔드포인트에서 액세스할 수 없습니다.

기본적으로 조직의 모든 클러스터에서 동일한 프로젝트 내의 ILB 서비스에 액세스할 수 있습니다. 기본 프로젝트 네트워크 정책을 사용하면 프로젝트 외부에서 프로젝트 리소스에 액세스할 수 없으며 이 제한사항은 ILB 서비스에도 적용됩니다. 플랫폼 관리자 (PA)가 다른 프로젝트에서 내 프로젝트에 액세스할 수 있도록 프로젝트 네트워크 정책을 구성하는 경우 동일한 조직의 다른 프로젝트에서도 ILB 서비스에 액세스할 수 있습니다.

시작하기 전에

ILB를 구성하려면 다음이 필요합니다.

  • 부하 분산기를 구성할 프로젝트를 소유해야 합니다. 자세한 내용은 프로젝트 만들기를 참조하세요.
  • 필요한 ID 및 액세스 역할:

    • 조직 IAM 관리자에게 부하 분산기 관리자 (load-balancer-admin) 역할을 부여해 달라고 요청하세요.
    • 전역 ILB의 경우 조직 IAM 관리자에게 전역 부하 분산기 관리자 (global-load-balancer-admin) 역할을 부여해 달라고 요청하세요. 자세한 내용은 사전 정의된 역할 설명을 참고하세요.

내부 부하 분산기 만들기

전역 또는 영역 ILB를 만들 수 있습니다. 전역 ILB의 범위는 GDC 유니버스에 걸쳐 있습니다. 영역 ILB의 범위는 생성 시 지정된 영역으로 제한됩니다. 자세한 내용은 전역 및 영역 부하 분산기를 참고하세요.

GDC에서 세 가지 다른 방법을 사용하여 ILB를 만듭니다.

  • gdcloud CLI를 사용하여 전역 또는 영역 ILB를 만듭니다.
  • 네트워킹 Kubernetes 리소스 모델 (KRM) API를 사용하여 전역 또는 영역 ILB를 만듭니다.
  • Kubernetes 클러스터에서 Kubernetes 서비스를 직접 사용합니다. 이 메서드는 영역 ILB에만 사용할 수 있습니다.

KRM API 및 gdcloud CLI를 사용하여 포드 또는 VM 워크로드를 타겟팅할 수 있습니다. Kubernetes 클러스터에서 직접 Kubernetes 서비스를 사용하는 경우 Service 객체가 생성된 클러스터의 워크로드만 타겟팅할 수 있습니다.

영역 ILB 만들기

Kubernetes 클러스터에서 gdcloud CLI, KRM API 또는 Kubernetes 서비스를 사용하여 영역 ILB를 만듭니다.

gdcloud

gdcloud CLI를 사용하여 포드 또는 VM 워크로드를 타겟팅하는 ILB를 만듭니다.

이 ILB는 Backend 객체에 정의된 라벨과 일치하는 프로젝트의 모든 워크로드를 타겟팅합니다.

gdcloud CLI를 사용하여 ILB를 만들려면 다음 단계를 따르세요.

  1. Backend 리소스를 만들어 ILB의 엔드포인트를 정의합니다.

    gdcloud compute backends create BACKEND_NAME \
      --labels=LABELS \
      --project=PROJECT_NAME \
      --zone=ZONE \
      --cluster=CLUSTER_NAME
    

    다음을 바꿉니다.

    • BACKEND_NAME: 선택한 백엔드 리소스 이름(예: my-backend)
    • LABELS: 이 백엔드 리소스에 사용할 포드와 VM 간 엔드포인트를 정의하는 선택기입니다. 예를 들면 app=web입니다.
    • PROJECT_NAME: 프로젝트의 이름
    • ZONE: 이 호출에 사용할 영역입니다. 영역 플래그가 필요한 모든 명령어에 대해 영역 플래그를 미리 설정하려면 gdcloud config set core/zone ZONE를 실행합니다. 영역 플래그는 다중 영역 환경에서만 사용할 수 있습니다. 이 필드는 선택사항입니다.
    • CLUSTER_NAME: 정의된 선택기의 범위가 제한되는 클러스터입니다. 이 필드를 지정하지 않으면 지정된 라벨이 있는 모든 엔드포인트가 선택됩니다. 이 필드는 선택사항입니다.
  2. 이 ILB가 포드 워크로드용인 경우 이 단계를 건너뜁니다. VM 워크로드용 ILB를 구성하는 경우 ILB의 상태 점검을 정의합니다.

    gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \
      --check-interval=CHECK_INTERVAL \
      --healthy-threshold=HEALTHY_THRESHOLD \
      --timeout=TIMEOUT \
      --unhealthy-threshold=UNHEALTHY_THRESHOLD \
      --port=PORT \
      --zone=ZONE
    

    다음을 바꿉니다.

    • HEALTH_CHECK_NAME: 선택한 상태 점검 리소스의 이름입니다(예: my-health-check).
    • CHECK_INTERVAL: 한 프로브의 시작부터 다음 프로브의 시작까지의 시간(단위: 초). 기본값은 5입니다. 이 필드는 선택사항입니다.
    • HEALTHY_THRESHOLD: 실패를 선언하기 전에 대기할 시간입니다. 기본값은 5입니다. 이 필드는 선택사항입니다.
    • TIMEOUT: 실패를 선언하기 전에 대기할 시간(초)입니다. 기본값은 5입니다. 이 필드는 선택사항입니다.
    • UNHEALTHY_THRESHOLD: 엔드포인트가 비정상으로 간주되도록 하기 위해 실패해야 하는 연속 프로브의 수입니다. 기본값은 2입니다. 이 필드는 선택사항입니다.
    • PORT: 상태 점검이 실행되는 포트입니다. 기본값은 80입니다. 이 필드는 선택사항입니다.
    • ZONE: 이 ILB를 만들 영역입니다.
  3. BackendService 리소스를 만들고 이전에 만든 Backend 리소스를 추가합니다.

    gdcloud compute backend-services create BACKEND_SERVICE_NAME \
      --project=PROJECT_NAME \
      --target-ports=TARGET_PORTS \
      --zone=ZONE \
      --health-check=HEALTH_CHECK_NAME
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 이 백엔드 서비스에 선택한 이름입니다.
    • TARGET_PORTS: 이 백엔드 서비스가 변환하는 대상 포트의 쉼표로 구분된 목록입니다. 각 대상 포트는 프로토콜, 전달 규칙의 포트, 백엔드 인스턴스의 포트를 지정합니다. 타겟 포트를 여러 개 지정할 수 있습니다. 이 필드는 protocol:port:targetport 형식이어야 합니다(예: TCP:80:8080). 이 필드는 선택사항입니다.
    • HEALTH_CHECK_NAME: 상태 점검 리소스의 이름입니다. 이 필드는 선택사항입니다. VM 워크로드용 ILB를 구성하는 경우에만 이 필드를 포함하세요.
  4. 이전에 만든 Backend 리소스에 BackendService 리소스를 추가합니다.

    gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --backend=BACKEND_NAME \
      --project=PROJECT_NAME \
      --zone=ZONE
    
  5. 서비스가 제공되는 VIP를 정의하는 내부 ForwardingRule 리소스를 만듭니다.

    gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \
      --backend-service=BACKEND_SERVICE_NAME \
      --cidr=CIDR \
      --ip-protocol-port=PROTOCOL_PORT \
      --load-balancing-scheme=INTERNAL \
      --zone=ZONE \
      --project=PROJECT_NAME
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 백엔드 서비스 이름입니다.
    • FORWARDING_RULE_INTERNAL_NAME을 선택한 전달 규칙 이름으로 바꿉니다.
    • CIDR: 이 필드는 선택사항입니다. 지정하지 않으면 IPv4/32 CIDR이 영역 IP 풀에서 자동으로 예약됩니다. 이 전달 규칙과 동일한 네임스페이스에 있는 Subnet 리소스의 이름을 지정합니다. Subnet 리소스는 영역 서브넷의 요청 및 할당 정보를 나타냅니다. Subnet 리소스에 대한 자세한 내용은 맞춤 리소스 예시를 참고하세요.
    • PROTOCOL_PORT: 전달 규칙에서 노출할 프로토콜 및 포트입니다. 이 필드는 ip-protocol=TCP:80 형식이어야 합니다. 노출된 포트는 실제 애플리케이션이 컨테이너 내에서 노출하는 포트와 동일해야 합니다.
  6. 구성된 ILB를 검증하려면 생성된 각 객체에서 Ready 조건을 확인합니다. VIP에 대한 curl 요청으로 트래픽을 확인합니다.

    1. 할당된 VIP를 가져오려면 전달 규칙을 설명하세요.

      gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME
      
    2. 전달 규칙의 PROTOCOL_PORT 필드에 지정된 포트에서 VIP로 curl 요청을 사용하여 트래픽을 확인합니다.

      curl http://FORWARDING_RULE_VIP:PORT
      

      다음을 바꿉니다.

      • FORWARDING_RULE_VIP: 전달 규칙의 VIP입니다.
      • PORT: 전달 규칙의 PROTOCOL_PORT 필드에 있는 포트 번호입니다.

API

KRM API를 사용하여 포드 또는 VM 워크로드를 타겟팅하는 ILB를 만듭니다. 이 ILB는 Backend 객체에 정의된 라벨과 일치하는 프로젝트의 모든 워크로드를 타겟팅합니다.

KRM API를 사용하여 영역 ILB를 만들려면 다음 단계를 따르세요.

  1. ILB의 엔드포인트를 정의하는 Backend 리소스를 만듭니다. 워크로드가 배치된 각 영역에 대해 Backend 리소스를 만듭니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: Backend
    metadata:
      namespace: PROJECT_NAME
      name: BACKEND_NAME
    spec:
      clusterName: CLUSTER_NAME
      endpointsLabels:
        matchLabels:
          app: server
    EOF
    

    다음을 바꿉니다.

    • MANAGEMENT_API_SERVER: 영역 관리 API 서버의 kubeconfig 경로입니다. 자세한 내용은 영역 컨텍스트로 전환을 참고하세요.
    • PROJECT_NAME: 프로젝트의 이름
    • BACKEND_NAME: Backend 리소스 이름입니다.
    • CLUSTER_NAME: 선택사항 필드입니다. 이 필드는 정의된 선택기의 범위가 제한되는 클러스터를 지정합니다. 이 필드는 VM 워크로드에는 적용되지 않습니다. Backend 리소스에 clusterName 필드가 포함되지 않은 경우 지정된 라벨이 프로젝트의 모든 워크로드에 적용됩니다.

    각 영역에 동일한 Backend 리소스를 사용하거나 각 영역에 다른 라벨 집합이 있는 Backend 리소스를 만들 수 있습니다.

  2. 이 ILB가 포드 워크로드용인 경우 이 단계를 건너뜁니다. VM 워크로드용 ILB를 구성하는 경우 ILB의 상태 점검을 정의합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: HealthCheck
    metadata:
      namespace: PROJECT_NAME
      name: HEALTH_CHECK_NAME
    spec:
      tcpHealthCheck:
        port: PORT
      timeoutSec: TIMEOUT
      checkIntervalSec: CHECK_INTERVAL
      healthyThreshold: HEALTHY_THRESHOLD
      unhealthyThreshold: UNHEALTHY_THRESHOLD
    EOF
    

    다음을 바꿉니다.

    • HEALTH_CHECK_NAME: 선택한 상태 점검 리소스의 이름입니다(예: my-health-check).
    • PORT: 상태 점검이 실행되는 포트입니다. 기본값은 80입니다.
    • TIMEOUT: 실패를 선언하기 전에 대기할 시간(초)입니다. 기본값은 5입니다.
    • CHECK_INTERVAL: 한 프로브의 시작부터 다음 프로브의 시작까지의 시간(단위: 초). 기본값은 5입니다.
    • HEALTHY_THRESHOLD: 엔드포인트가 정상으로 간주되도록 하기 위해 통과해야 하는 순차적 프로브의 수입니다. 기본값은 2입니다.
    • UNHEALTHY_THRESHOLD: 엔드포인트가 비정상으로 간주되도록 하기 위해 실패해야 하는 연속 프로브의 수입니다. 기본값은 2입니다.
  3. 이전에 만든 Backend 리소스를 사용하여 BackendService 객체를 만듭니다. VM 워크로드용 ILB를 구성하는 경우 HealthCheck 리소스를 포함합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: BackendService
    metadata:
      namespace: PROJECT_NAME
      name: BACKEND_SERVICE_NAME
    spec:
      backendRefs:
      - name: BACKEND_NAME
      healthCheckName: HEALTH_CHECK_NAME
    EOF
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: BackendService 리소스에 선택한 이름입니다.
    • HEALTH_CHECK_NAME: 이전에 만든 HealthCheck 리소스의 이름입니다. 포드 워크로드에 대해 ILB를 구성하는 경우 이 필드를 포함하지 마세요.
  4. 서비스가 제공되는 VIP를 정의하는 내부 ForwardingRule 리소스를 만듭니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: ForwardingRuleInternal
    metadata:
      namespace: PROJECT_NAME
      Name: FORWARDING_RULE_INTERNAL_NAME
    spec:
      cidrRef: CIDR
      ports:
      - port: PORT
        Protocol: PROTOCOL
      backendServiceRef:
        name: BACKEND_SERVICE_NAME
    EOF
    

    다음을 바꿉니다.

    • FORWARDING_RULE_INTERNAL_NAME: ForwardingRuleInternal 리소스에 선택한 이름입니다.
    • CIDR: 이 필드는 선택사항입니다. 지정하지 않으면 IPv4/32 CIDR이 영역 IP 풀에서 자동으로 예약됩니다. 이 전달 규칙과 동일한 네임스페이스에 있는 Subnet 리소스의 이름을 지정합니다. Subnet 리소스는 영역 서브넷의 요청 및 할당 정보를 나타냅니다. Subnet 리소스에 대한 자세한 내용은 맞춤 리소스 예시를 참고하세요.
    • PORT: ports 필드를 사용하여 이 전달 규칙으로 구성된 백엔드로 패킷이 전달되는 L4 포트 배열을 지정합니다. 포트를 하나 이상 지정해야 합니다. port 필드를 사용하여 포트 번호를 지정합니다. 노출된 포트는 실제 애플리케이션이 컨테이너 내에서 노출하는 포트와 동일해야 합니다.
    • PROTOCOL: 전달 규칙에 사용할 프로토콜입니다(예: TCP). ports 배열의 항목은 다음과 같이 표시되어야 합니다.

      ports:
      - port: 80
        protocol: TCP
      
  5. 구성된 ILB를 검증하려면 생성된 각 객체에서 Ready 조건을 확인합니다. VIP에 대한 curl 요청으로 트래픽을 확인합니다.

    1. VIP를 가져오려면 kubectl get을 사용하세요.

      kubectl get forwardingruleinternal -n PROJECT_NAME
      

      출력은 다음과 같이 표시됩니다.

      NAME           BACKENDSERVICE                               CIDR              READY
      ilb-name       BACKEND_SERVICE_NAME        10.200.32.59/32   True
      
    2. 전달 규칙의 PORT 필드에 지정된 포트에서 VIP로 curl 요청을 사용하여 트래픽을 확인합니다.

      curl http://FORWARDING_RULE_VIP:PORT
      

      FORWARDING_RULE_VIP를 전달 규칙의 VIP로 바꿉니다.

Kubernetes 서비스

Kubernetes 클러스터에서 LoadBalancer 유형의 Kubernetes Service 객체를 만들어 GDC에서 ILB를 만들 수 있습니다. 이 ILB는 Service 객체가 생성된 클러스터의 워크로드만 타겟팅합니다.

Service 객체로 ILB를 만들려면 다음 단계를 따르세요.

  1. LoadBalancer 유형의 Service 정의를 위한 YAML 파일을 만듭니다. networking.gke.io/load-balancer-type: internal 주석을 사용하여 ILB 서비스를 내부로 설계해야 합니다.

    다음 Service 객체는 ILB 서비스의 예시입니다.

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        networking.gke.io/load-balancer-type: internal
      name: ILB_SERVICE_NAME
      namespace: PROJECT_NAME
    spec:
      ports:
      - port: 1234
        protocol: TCP
        targetPort: 1234
      selector:
        k8s-app: my-app
      type: LoadBalancer
    

    다음을 바꿉니다.

    • ILB_SERVICE_NAME: ILB 서비스의 이름입니다.
    • PROJECT_NAME: 백엔드 워크로드가 포함된 프로젝트의 네임스페이스입니다.

    port 필드는 VIP 주소에 노출하는 프런트엔드 포트를 구성합니다. targetPort 필드는 백엔드 워크로드의 트래픽을 전달할 백엔드 포트를 구성합니다. 부하 분산기는 네트워크 주소 변환 (NAT)을 지원합니다. 프런트엔드 및 백엔드 포트는 서로 다를 수 있습니다.

  2. Service 정의의 selector 필드에서 포드 또는 가상 머신을 백엔드 워크로드로 지정합니다.

    선택기는 지정한 라벨을 워크로드의 라벨과 일치시켜 이 서비스의 백엔드 워크로드로 사용할 워크로드를 정의합니다. ServiceService를 정의하는 동일한 프로젝트 및 동일한 클러스터의 백엔드 워크로드만 선택할 수 있습니다.

    서비스 선택에 대한 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/service/를 참고하세요.

  3. Service 정의 파일을 백엔드 워크로드와 동일한 프로젝트에 저장합니다. ILB 서비스는 Service 정의와 동일한 클러스터에 있는 워크로드만 선택할 수 있습니다.

  4. 클러스터에 Service 정의 파일을 적용합니다.

    kubectl apply -f ILB_FILE
    

    ILB_FILE을 ILB 서비스의 Service 정의 파일 이름으로 바꿉니다.

    ILB 서비스를 만들면 서비스에 IP 주소가 할당됩니다. 서비스 상태를 확인하여 ILB 서비스의 IP 주소를 가져올 수 있습니다.

    kubectl -n PROJECT_NAME get svc ILB_SERVICE_NAME
    

    다음을 바꿉니다.

    • PROJECT_NAME: 백엔드 워크로드가 포함된 프로젝트의 네임스페이스입니다.
    • ILB_SERVICE_NAME: ILB 서비스의 이름입니다.

    다음 예와 비슷한 출력이 표시되어야 합니다.

    NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)          AGE
    ilb-service             LoadBalancer   10.0.0.1      10.0.0.1        1234:31930/TCP   22h
    

    CLUSTER-IPEXTERNAL-IP 필드에는 ILB 서비스의 IP 주소인 동일한 값이 표시되어야 합니다. 이제 이 IP 주소는 프로젝트에 있는 프로젝트 네트워크 정책에 따라 조직의 다른 클러스터에서 액세스할 수 있습니다.

    출력이 표시되지 않으면 ILB 서비스를 성공적으로 만들었는지 확인합니다.

    GDC는 서비스의 도메인 이름 시스템 (DNS) 이름을 지원합니다. 하지만 이러한 이름은 ILB 서비스의 동일한 클러스터에서만 작동합니다. 다른 클러스터에서는 IP 주소를 사용하여 ILB 서비스에 액세스해야 합니다.

전역 ILB 만들기

gdcloud CLI 또는 KRM API를 사용하여 전역 ILB를 만듭니다.

gdcloud

gdcloud CLI를 사용하여 포드 또는 VM 워크로드를 타겟팅하는 ILB를 만듭니다.

이 ILB는 Backend 객체에 정의된 라벨과 일치하는 프로젝트의 모든 워크로드를 타겟팅합니다. Backend 커스텀 리소스는 영역으로 범위가 지정되어야 합니다.

gdcloud CLI를 사용하여 ILB를 만들려면 다음 단계를 따르세요.

  1. Backend 리소스를 만들어 ILB의 엔드포인트를 정의합니다.

    gdcloud compute backends create BACKEND_NAME \
      --labels=LABELS \
      --project=PROJECT_NAME \
      --cluster=CLUSTER_NAME \
      --zone=ZONE
    

    다음을 바꿉니다.

    • BACKEND_NAME: 선택한 백엔드 리소스 이름(예: my-backend)
    • LABELS: 이 백엔드 리소스에 사용할 포드와 VM 간 엔드포인트를 정의하는 선택기입니다. 예를 들면 app=web입니다.
    • PROJECT_NAME: 프로젝트의 이름
    • CLUSTER_NAME: 정의된 선택기의 범위가 제한되는 클러스터입니다. 이 필드를 지정하지 않으면 지정된 라벨이 있는 모든 엔드포인트가 선택됩니다. 이 필드는 선택사항입니다.
    • ZONE: 이 호출에 사용할 영역입니다. 영역 플래그가 필요한 모든 명령어에 대해 영역 플래그를 미리 설정하려면 gdcloud config set core/zone ZONE를 실행합니다. 영역 플래그는 멀티 영역 환경에서만 사용할 수 있습니다. 이 필드는 선택사항입니다.
  2. 이 ILB가 포드 워크로드용인 경우 이 단계를 건너뜁니다. VM 워크로드용 ILB를 구성하는 경우 ILB의 상태 점검을 정의합니다.

    gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \
      --check-interval=CHECK_INTERVAL \
      --healthy-threshold=HEALTHY_THRESHOLD \
      --timeout=TIMEOUT \
      --unhealthy-threshold=UNHEALTHY_THRESHOLD \
      --port=PORT \
      --global
    

    다음을 바꿉니다.

    • HEALTH_CHECK_NAME: 선택한 상태 점검 리소스의 이름입니다(예: my-health-check).
    • CHECK_INTERVAL: 한 프로브의 시작부터 다음 프로브의 시작까지의 시간(단위: 초). 기본값은 5입니다. 이 필드는 선택사항입니다.
    • HEALTHY_THRESHOLD: 실패를 선언하기 전에 대기할 시간입니다. 기본값은 5입니다. 이 필드는 선택사항입니다.
    • TIMEOUT: 실패를 선언하기 전에 대기할 시간(초)입니다. 기본값은 5입니다. 이 필드는 선택사항입니다.
    • UNHEALTHY_THRESHOLD: 엔드포인트가 비정상으로 간주되도록 하기 위해 실패해야 하는 연속 프로브의 수입니다. 기본값은 2입니다. 이 필드는 선택사항입니다.
    • PORT: 상태 점검이 실행되는 포트입니다. 기본값은 80입니다. 이 필드는 선택사항입니다.
  3. BackendService 리소스를 만들고 이전에 만든 Backend 리소스를 추가합니다.

    gdcloud compute backend-services create BACKEND_SERVICE_NAME \
      --project=PROJECT_NAME \
      --target-ports=TARGET_PORTS \
      --health-check=HEALTH_CHECK_NAME \
      --global
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 이 백엔드 서비스에 선택한 이름입니다.
    • TARGET_PORTS: 이 백엔드 서비스가 변환하는 대상 포트의 쉼표로 구분된 목록입니다. 각 대상 포트는 프로토콜, 전달 규칙의 포트, 백엔드 인스턴스의 포트를 지정합니다. 타겟 포트를 여러 개 지정할 수 있습니다. 이 필드는 protocol:port:targetport 형식이어야 합니다(예: TCP:80:8080). 이 필드는 선택사항입니다.
    • HEALTH_CHECK_NAME: 상태 점검 리소스의 이름입니다. 이 필드는 선택사항입니다. VM 워크로드용 ILB를 구성하는 경우에만 이 필드를 포함하세요.
  4. 이전에 만든 Backend 리소스에 BackendService 리소스를 추가합니다.

    gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --backend-zone BACKEND_ZONE \
      --backend=BACKEND_NAME \
      --project=PROJECT_NAME \
      --global
    
  5. 서비스가 제공되는 VIP를 정의하는 내부 ForwardingRule 리소스를 만듭니다.

    gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \
      --backend-service=BACKEND_SERVICE_NAME \
      --cidr=CIDR \
      --ip-protocol-port=PROTOCOL_PORT \
      --load-balancing-scheme=INTERNAL \
      --project=PROJECT_NAME \
      --global
    

    다음을 바꿉니다.

    • FORWARDING_RULE_INTERNAL_NAME: 선택한 전달 규칙의 이름입니다.
    • CIDR: 이 전달 규칙과 동일한 네임스페이스에 있는 Subnet 리소스의 이름입니다. Subnet 리소스는 전역 서브넷의 요청 및 할당 정보를 나타냅니다. Subnet 리소스에 관한 자세한 내용은 맞춤 리소스 예시를 참고하세요. 지정하지 않으면 IPv4/32 CIDR이 전역 IP 풀에서 자동으로 예약됩니다. 이 필드는 선택사항입니다.
    • PROTOCOL_PORT: 전달 규칙에서 노출할 프로토콜 및 포트입니다. 이 필드는 ip-protocol=TCP:80 형식이어야 합니다. 노출된 포트는 실제 애플리케이션이 컨테이너 내에서 노출하는 포트와 동일해야 합니다.
  6. 구성된 ILB를 검증하려면 생성된 각 객체에서 Ready 조건을 확인합니다. VIP에 대한 curl 요청으로 트래픽을 확인합니다.

    1. 할당된 VIP를 가져오려면 전달 규칙을 설명하세요.

      gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME --global
      
    2. 전달 규칙의 PROTOCOL_PORT 필드에 지정된 포트에서 VIP로 curl 요청을 사용하여 트래픽을 확인합니다.

      curl http://FORWARDING_RULE_VIP:PORT
      

      다음을 바꿉니다.

      • FORWARDING_RULE_VIP: 전달 규칙의 VIP입니다.
      • PORT: 전달 규칙의 PROTOCOL_PORT 필드에 있는 포트 번호입니다.

API

KRM API를 사용하여 포드 또는 VM 워크로드를 타겟팅하는 ILB를 만듭니다. 이 ILB는 Backend 객체에 정의된 라벨과 일치하는 프로젝트의 모든 워크로드를 타겟팅합니다. KRM API를 사용하여 영역 ILB를 만들려면 다음 단계를 따르세요.

  1. ILB의 엔드포인트를 정의하는 Backend 리소스를 만듭니다. 워크로드가 배치된 각 영역에 대해 Backend 리소스를 만듭니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: Backend
    metadata:
      namespace: PROJECT_NAME
      name: BACKEND_NAME
    spec:
      clusterName: CLUSTER_NAME
      endpointsLabels:
        matchLabels:
          app: server
    EOF
    

    다음을 바꿉니다.

    • MANAGEMENT_API_SERVER: 전역 관리 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 컨텍스트로 전환을 참고하세요.
    • PROJECT_NAME: 프로젝트의 이름
    • BACKEND_NAME: Backend 리소스 이름입니다.
    • CLUSTER_NAME: 선택사항 필드입니다. 이 필드는 정의된 선택기의 범위가 제한되는 클러스터를 지정합니다. 이 필드는 VM 워크로드에는 적용되지 않습니다. Backend 리소스에 clusterName 필드가 포함되지 않은 경우 지정된 라벨이 프로젝트의 모든 워크로드에 적용됩니다.

    각 영역에 동일한 Backend 리소스를 사용하거나 각 영역에 다른 라벨 집합이 있는 Backend 리소스를 만들 수 있습니다.

  2. 이 ILB가 포드 워크로드용인 경우 이 단계를 건너뜁니다. VM 워크로드용 ILB를 구성하는 경우 ILB의 상태 점검을 정의합니다.

    apiVersion: networking.global.gdc.goog/v1
    kind: HealthCheck
    metadata:
      namespace: PROJECT_NAME
      name: HEALTH_CHECK_NAME
    spec:
      tcpHealthCheck:
        port: PORT
      timeoutSec: TIMEOUT
      checkIntervalSec: CHECK_INTERVAL
      healthyThreshold: HEALTHY_THRESHOLD
      unhealthyThreshold: UNHEALTHY_THRESHOLD
    

    다음을 바꿉니다.

    • HEALTH_CHECK_NAME: 선택한 상태 점검 리소스의 이름입니다(예: my-health-check).
    • PORT: 상태 점검이 실행되는 포트입니다. 기본값은 80입니다.
    • TIMEOUT: 실패를 선언하기 전에 대기할 시간(초)입니다. 기본값은 5입니다.
    • CHECK_INTERVAL: 한 프로브의 시작부터 다음 프로브의 시작까지의 시간(단위: 초). 기본값은 5입니다.
    • HEALTHY_THRESHOLD: 엔드포인트가 정상으로 간주되도록 하기 위해 통과해야 하는 순차적 프로브의 수입니다. 기본값은 2입니다.
    • UNHEALTHY_THRESHOLD: 엔드포인트가 비정상으로 간주되도록 하기 위해 실패해야 하는 연속 프로브의 수입니다. 기본값은 2입니다.

    전역 ILB이므로 전역 API에서 상태 점검을 만듭니다.

  3. 이전에 만든 Backend 리소스를 사용하여 BackendService 객체를 만듭니다. VM 워크로드용 ILB를 구성하는 경우 HealthCheck 리소스를 포함합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: BackendService
    metadata:
      namespace: PROJECT_NAME
      name: BACKEND_SERVICE_NAME
    spec:
      backendRefs:
      - name: BACKEND_NAME
        zone: ZONE
      healthCheckName: HEALTH_CHECK_NAME
      targetPorts:
      - port: PORT
        protocol: PROTOCOL
        targetPort: TARGET_PORT
    EOF
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: BackendService 리소스에 선택한 이름입니다.
    • HEALTH_CHECK_NAME: 이전에 만든 HealthCheck 리소스의 이름입니다. 포드 워크로드에 대해 ILB를 구성하는 경우 이 필드를 포함하지 마세요.
    • ZONE: Backend 리소스가 생성되는 영역입니다. backendRefs 필드에 백엔드를 여러 개 지정할 수 있습니다. 예를 들면 다음과 같습니다.

      - name: my-be
        zone: Zone-A
      - name: my-be
        zone: Zone-B
      
    • targetPorts 필드는 선택사항입니다. 이 리소스는 이 BackendService 리소스가 변환하는 포트를 나열합니다. 이 객체를 사용하는 경우 다음 값을 제공하세요.

      • PORT: 서비스에서 노출하는 포트입니다.
      • PROTOCOL: 트래픽이 일치해야 하는 레이어 4 프로토콜입니다. TCP 및 UDP만 지원됩니다.
      • TARGET_PORT: PORT 값이 변환되는 포트입니다(예: 8080). TARGET_PORT 값은 지정된 객체에서 반복될 수 없습니다. targetPorts의 예는 다음과 같습니다.

        targetPorts:
        - port: 80
          protocol: TCP
          targetPort: 8080
        
  4. 서비스가 제공되는 VIP를 정의하는 내부 ForwardingRule 리소스를 만듭니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ForwardingRuleInternal
    metadata:
      namespace: PROJECT_NAME
      Name: FORWARDING_RULE_INTERNAL_NAME
    spec:
      cidrRef: CIDR
      ports:
      - port: PORT
        Protocol: PROTOCOL
      backendServiceRef:
        name: BACKEND_SERVICE_NAME
    EOF
    

    다음을 바꿉니다.

    • FORWARDING_RULE_INTERNAL_NAME: ForwardingRuleInternal 리소스에 선택한 이름입니다.
    • CIDR: 이 전달 규칙과 동일한 네임스페이스에 있는 Subnet 리소스의 이름입니다. Subnet 리소스는 전역 서브넷의 요청 및 할당 정보를 나타냅니다. Subnet 리소스에 관한 자세한 내용은 맞춤 리소스 예시를 참고하세요. 지정하지 않으면 IPv4/32 CIDR이 전역 IP 풀에서 자동으로 예약됩니다. 이 필드는 선택사항입니다.
    • PORT: ports 필드를 사용하여 이 전달 규칙으로 구성된 백엔드로 패킷이 전달되는 L4 포트 배열을 지정합니다. 포트를 하나 이상 지정해야 합니다. port 필드를 사용하여 포트 번호를 지정합니다. 노출된 포트는 실제 애플리케이션이 컨테이너 내에서 노출하는 포트와 동일해야 합니다.
    • PROTOCOL: 전달 규칙에 사용할 프로토콜입니다(예: TCP). ports 배열의 항목은 다음과 같이 표시되어야 합니다.

      ports:
      - port: 80
        protocol: TCP
      
  5. 구성된 ILB를 검증하려면 생성된 각 객체에서 Ready 조건을 확인합니다. VIP에 대한 curl 요청으로 트래픽을 확인합니다.

    1. VIP를 가져오려면 kubectl get을 사용하세요.

      kubectl get forwardingruleinternal -n PROJECT_NAME
      

      출력은 다음과 같이 표시됩니다.

      NAME           BACKENDSERVICE                               CIDR              READY
      ilb-name       BACKEND_SERVICE_NAME        10.200.32.59/32   True
      
    2. 전달 규칙의 PORT 필드에 지정된 포트에서 VIP로 curl 요청을 전송하여 트래픽을 테스트합니다.

      curl http://FORWARDING_RULE_VIP:PORT
      

      FORWARDING_RULE_VIP를 전달 규칙의 VIP로 바꿉니다.