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

인그레스 게이트웨이용 Traffic Director 설정

이 가이드에서는 인그레스 게이트웨이를 사용하여 Traffic Director를 구성하는 방법을 보여줍니다.

이 구성에서 네트워크 부하 분산기는 인터넷의 트래픽을 인그레스 게이트웨이를 통해 서비스 메시로 전달합니다. Gateway 리소스는 서비스 메시에 게이트웨이 역할을 하는 Envoy 프록시를 관리합니다. 게이트웨이는 중간 프록시 또는 인그레스라고도 합니다. 인그레스 게이트웨이 역할을 하도록 배포된 Envoy 프록시는 워크로드의 사이드카가 아닌 독립형 프록시입니다. 이 모드에서 Envoy는 IP 주소 및 포트가 잘 정의된 목록을 리슨하고 사용자가 구성한 라우팅 규칙에 따라 트래픽을 전달합니다. 새로운Gateway API 리소스는 이러한 Envoy 클라이언트를 구성하는 데 사용됩니다.

Envoy 프록시, 네트워크 부하 분산기, 게이트웨이 리소스가 있는 인그레스 게이트웨이
Envoy 프록시, 네트워크 부하 분산기, Gateway 리소스가 있는 인그레스 게이트웨이 (확대하려면 클릭)

Gateway 프록시로 향하는 트래픽이 Envoy를 호스팅하는 VM으로 전달되도록 라우팅을 설정합니다. 인그레스 서비스는 외부 HTTP(S) 부하 분산기 또는 내부 TCP/UDP 부하 분산기와 페어링할 수 있지만 이러한 구성은 이 데모 설정에 포함되지 않습니다.

이 가이드에서는 게이트웨이 간 서비스 간 통신과 Mesh 리소스에 대해 다루지 않습니다.

기본 요건

다음 가이드의 기본 요건을 따르세요.

방화벽 규칙 구성

이 섹션에서는 두 개의 방화벽 규칙을 구성합니다. 한 규칙은 Virtual Private Cloud 네트워크에 대한 상태 확인 프로브를 허용합니다. 다른 규칙은 모든 소스에서 네트워크로 들어오는 트래픽을 허용합니다.

  1. 방화벽 규칙을 구성하여 상태 확인을 허용합니다.

    gcloud compute firewall-rules create allow-gateway-health-checks \
      --network=${VPC_NAME} \
      --direction=INGRESS \
      --action=ALLOW \
      --rules=tcp \
      --source-ranges="35.191.0.0/16,209.85.152.0/22,209.85.204.0/22" \
      --target-tags=gateway-proxy
    
  2. 모든 소스의 트래픽을 허용하도록 방화벽 규칙 구성 포트 및 소스 IP 주소 범위에 대한 명령어를 수정합니다.

    gcloud compute firewall-rules create allow-gateway-ingress-traffic \
      --network=${VPC_NAME} \
      --direction=INGRESS \
      --action=ALLOW \
      --rules=tcp:80,tcp:443 \
      --source-ranges="0.0.0.0/0" \
      --target-tags=gateway-proxy
    

ID 및 액세스 관리 권한 구성하기

이 섹션에서는 게이트웨이 프록시에 서비스 계정을 지정하고 올바른 IAM 역할을 할당합니다.

  1. 게이트웨이 프록시의 서비스 계정 ID를 만듭니다.

    gcloud iam service-accounts create gateway-proxy
    
  2. 필요한 IAM 역할을 서비스 계정 ID에 할당합니다.

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="serviceAccount:gateway-proxy@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/trafficdirector.client"
    
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="serviceAccount:gateway-proxy@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
    

Gateway 리소스 구성

이 섹션에서는 게이트웨이 리소스를 구성합니다.

  1. gateway80.yaml이라는 파일에서 HTTP 트래픽의 Gateway 사양을 만듭니다.

    cat <<EOF | tee gateway80.yaml
    name: gateway80
    scope: gateway-proxy
    ports:
    - 80
    type: OPEN_MESH
    EOF
    
  2. gateway80.yaml 사양에서 Gateway 리소스를 만듭니다.

    gcloud alpha network-services gateways import gateway80 \
        --source=gateway80.yaml \
        --location=global
    

Envoy 프록시로 관리형 인스턴스 그룹 만들기

이 섹션에서는 인그레스 게이트웨이와 연결된 Envoy 프록시를 만듭니다.

  1. 자동으로 배포된 Envoy 서비스 프록시를 실행하는 VM의 인스턴스 템플릿을 만듭니다. Envoy의 범위는 gateway-proxy입니다. 제공 포트를 --service-proxy의 매개변수로 전달하지 마세요.

    gcloud beta compute instance-templates create gateway-proxy \
      --machine-type=n1-standard-1 \
      --boot-disk-size=10GB \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=gateway-proxy \
      --network-interface=network=${VPC_NAME},no-address \
      --service-account="gateway-proxy@${PROJECT_ID}.iam.gserviceaccount.com" \
      --service-proxy=enabled,scope=gateway-proxy \
    
  2. 인스턴스 템플릿에서 리전 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create gateway-proxies-${REGION} \
      --region=${REGION} \
      --size=2 \
      --template=gateway-proxy \
      --target-distribution-shape=EVEN
    
  3. 네트워크 부하 분산기에 TCP 상태 확인을 사용 설정하도록 이름이 지정된 포트를 설정합니다.

    gcloud compute instance-groups managed set-named-ports \
      gateway-proxies-${REGION} \
      --region=${REGION} \
      --named-ports=healthz:80
    
  4. 인스턴스 그룹에 자동 확장을 사용 설정합니다.

    gcloud compute instance-groups managed set-autoscaling \
      gateway-proxies-${REGION} \
      --region=${REGION} \
      --cool-down-period=60 \
      --min-num-replicas=3 \
      --max-num-replicas=10 \
      --mode=on \
      --target-cpu-utilization=0.6
    

리전 네트워크 부하 분산 설정

이 섹션에서는 네트워크 부하 분산기, 백엔드 서비스, 전달 규칙, 상태 확인을 만듭니다.

  1. 네트워크 부하 분산기를 만듭니다.

    gcloud compute addresses create xnlb-${REGION} \
      --region=${REGION}
    
  2. 네트워크 부하 분산기용으로 예약된 IP 주소를 가져옵니다.

    export IP_ADDRESS=$(gcloud compute addresses describe xnlb-${REGION} \
      --region=${REGION} --format='value(address)')
    
  3. 게이트웨이 프록시의 상태 확인을 만듭니다.

    gcloud compute health-checks create tcp xnlb-${REGION} \
      --region=${REGION} \
      --port-name=healthz
    
  4. 게이트웨이 프록시에 대한 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create xnlb-${REGION} \
      --health-checks=xnlb-${REGION} \
      --health-checks-region=${REGION} \
      --load-balancing-scheme=EXTERNAL \
      --protocol=TCP \
      --region=${REGION} \
      --port-name=healthz
    
  5. 관리형 인스턴스 그룹을 백엔드로 추가합니다.

    gcloud compute backend-services add-backend xnlb-${REGION} \
      --instance-group=gateway-proxies-${REGION} \
      --instance-group-region=${REGION} \
      --region=${REGION}
    
  6. 게이트웨이 프록시를 가리키는 전달 규칙을 만듭니다.

    gcloud compute forwarding-rules create xnlb-${REGION} \
      --region=${REGION} \
      --load-balancing-scheme=EXTERNAL \
      --address=${IP_ADDRESS} \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=xnlb-${REGION} \
      --backend-service-region=${REGION}
    

HTTP 서버 구성

이 섹션에서는 서비스 메시에 테스트 서비스를 만듭니다.

  1. netcat 유틸리티를 사용하여 포트 10000에서 테스트 서비스로 인스턴스 템플릿을 만듭니다.

    gcloud compute instance-templates create tcp-td-vm-template \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=allow-health-checks \
      --image-family=debian-9 \
      --image-project=debian-cloud \
      --metadata=startup-script="#! /bin/bash
    
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
    
  2. 템플릿을 기반으로 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create tcp-td-mig-us-east1 \
      --zone=us-east1-a \
      --size=1 \
      --template=tcp-td-vm-template
    
  3. HTTP 상태 확인을 만듭니다.

    gcloud compute health-checks create http helloworld-health-check
    
  4. 네트워크 인스턴스에 들어오는 상태 확인 연결을 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create tcp-vm-allow-health-checks \
       --network default \
       --action allow \
       --direction INGRESS \
       --source-ranges 35.191.0.0/16,209.85.152.0/22,209.85.204.0/22 \
       --target-tags allow-health-checks \
       --rules tcp:80
    
  5. 부하 분산 스키마가 INTERNAL_SELF_MANAGED전역 백엔드 서비스를 만들고 상태 확인을 연결합니다.

    gcloud compute backend-services create tcp-helloworld-service \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --protocol=HTTP \
        --health-checks helloworld-health-check
    
  6. 관리형 인스턴스 그룹을 백엔드 서비스에 추가합니다.

    gcloud compute backend-services add-backend tcp-helloworld-service \
      --instance-group td-mig-us-east1 \
      --instance-group-zone us-east1-a \
      --global
    

HTTPRoute로 라우팅 설정

이제 Traffic Director Gateway 리소스와 서비스가 구성되었습니다. 그런 다음 호스트 이름과 백엔드 서비스를 연결하는 HTTPRoute 리소스를 사용하여 연결합니다. 또한 HTTPRouteGateway를 참조합니다.

  1. http_route.yaml이라는 파일에서 HTTPRoute 사양을 만듭니다. 이 사양은 앞서 만든 Gateway 리소스인 gateway80를 참조하며 백엔드 서비스 http-helloworld-service을 가리킵니다.

    name: helloworld-http-route
    hostnames:
    - helloworld-gce
    gateways:
    - projects/$PROJECT_NUMBER/locations/global/gateways/gateway80
    rules:
    - action:
      destinations:
       - serviceName: "projects/$PROJECT_NUMBER/locations/global/backendServices/http-helloworld-service"
    
  2. http_route.yaml의 사양을 사용하여 HTTPRoute 리소스를 만듭니다.

    gcloud alpha network-services http-routes import helloworld-http-route \
        --source=http_route.yaml \
        --location=global
    
  3. 네트워크 부하 분산기 및 Traffic Director Gateway를 통해 외부 클라이언트에서 서비스에 액세스할 수 있는지 확인합니다.

    curl -H "Host: helloworld-gce" ${IP_ADDRESS}