인그레스 게이트웨이용 Traffic Director 설정
이 가이드에서는 인그레스 게이트웨이를 사용하여 Traffic Director를 구성하는 방법을 보여줍니다.
이 구성에서 네트워크 부하 분산기는 인터넷의 트래픽을 인그레스 게이트웨이를 통해 서비스 메시로 전달합니다. Gateway
리소스는 서비스 메시에 게이트웨이 역할을 하는 Envoy 프록시를 관리합니다. 게이트웨이는 중간 프록시 또는 인그레스라고도 합니다. 인그레스 게이트웨이 역할을 하도록 배포된 Envoy 프록시는 워크로드의 사이드카가 아닌 독립형 프록시입니다. 이 모드에서 Envoy는 IP 주소 및 포트가 잘 정의된 목록을 리슨하고 사용자가 구성한 라우팅 규칙에 따라 트래픽을 전달합니다. 새로운Gateway
API 리소스는 이러한 Envoy 클라이언트를 구성하는 데 사용됩니다.
Gateway
리소스가 있는 인그레스 게이트웨이 (확대하려면 클릭)Gateway
프록시로 향하는 트래픽이 Envoy를 호스팅하는 VM으로 전달되도록 라우팅을 설정합니다. 인그레스 서비스는 외부 HTTP(S) 부하 분산기 또는 내부 TCP/UDP 부하 분산기와 페어링할 수 있지만 이러한 구성은 이 데모 설정에 포함되지 않습니다.
이 가이드에서는 게이트웨이 간 서비스 간 통신과 Mesh
리소스에 대해 다루지 않습니다.
기본 요건
다음 가이드의 기본 요건을 따르세요.
방화벽 규칙 구성
이 섹션에서는 두 개의 방화벽 규칙을 구성합니다. 한 규칙은 Virtual Private Cloud 네트워크에 대한 상태 확인 프로브를 허용합니다. 다른 규칙은 모든 소스에서 네트워크로 들어오는 트래픽을 허용합니다.
방화벽 규칙을 구성하여 상태 확인을 허용합니다.
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
모든 소스의 트래픽을 허용하도록 방화벽 규칙 구성 포트 및 소스 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 역할을 할당합니다.
게이트웨이 프록시의 서비스 계정 ID를 만듭니다.
gcloud iam service-accounts create gateway-proxy
필요한 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
리소스 구성
이 섹션에서는 게이트웨이 리소스를 구성합니다.
gateway80.yaml
이라는 파일에서 HTTP 트래픽의Gateway
사양을 만듭니다.cat <<EOF | tee gateway80.yaml name: gateway80 scope: gateway-proxy ports: - 80 type: OPEN_MESH EOF
gateway80.yaml
사양에서Gateway
리소스를 만듭니다.gcloud alpha network-services gateways import gateway80 \ --source=gateway80.yaml \ --location=global
Envoy 프록시로 관리형 인스턴스 그룹 만들기
이 섹션에서는 인그레스 게이트웨이와 연결된 Envoy 프록시를 만듭니다.
자동으로 배포된 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 \
인스턴스 템플릿에서 리전 관리형 인스턴스 그룹을 만듭니다.
gcloud compute instance-groups managed create gateway-proxies-${REGION} \ --region=${REGION} \ --size=2 \ --template=gateway-proxy \ --target-distribution-shape=EVEN
네트워크 부하 분산기에 TCP 상태 확인을 사용 설정하도록 이름이 지정된 포트를 설정합니다.
gcloud compute instance-groups managed set-named-ports \ gateway-proxies-${REGION} \ --region=${REGION} \ --named-ports=healthz:80
인스턴스 그룹에 자동 확장을 사용 설정합니다.
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
리전 네트워크 부하 분산 설정
이 섹션에서는 네트워크 부하 분산기, 백엔드 서비스, 전달 규칙, 상태 확인을 만듭니다.
네트워크 부하 분산기를 만듭니다.
gcloud compute addresses create xnlb-${REGION} \ --region=${REGION}
네트워크 부하 분산기용으로 예약된 IP 주소를 가져옵니다.
export IP_ADDRESS=$(gcloud compute addresses describe xnlb-${REGION} \ --region=${REGION} --format='value(address)')
게이트웨이 프록시의 상태 확인을 만듭니다.
gcloud compute health-checks create tcp xnlb-${REGION} \ --region=${REGION} \ --port-name=healthz
게이트웨이 프록시에 대한 백엔드 서비스를 만듭니다.
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
관리형 인스턴스 그룹을 백엔드로 추가합니다.
gcloud compute backend-services add-backend xnlb-${REGION} \ --instance-group=gateway-proxies-${REGION} \ --instance-group-region=${REGION} \ --region=${REGION}
게이트웨이 프록시를 가리키는 전달 규칙을 만듭니다.
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 서버 구성
이 섹션에서는 서비스 메시에 테스트 서비스를 만듭니다.
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"
템플릿을 기반으로 관리형 인스턴스 그룹을 만듭니다.
gcloud compute instance-groups managed create tcp-td-mig-us-east1 \ --zone=us-east1-a \ --size=1 \ --template=tcp-td-vm-template
HTTP 상태 확인을 만듭니다.
gcloud compute health-checks create http helloworld-health-check
네트워크 인스턴스에 들어오는 상태 확인 연결을 허용하는 방화벽 규칙을 만듭니다.
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
부하 분산 스키마가
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
관리형 인스턴스 그룹을 백엔드 서비스에 추가합니다.
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
리소스를 사용하여 연결합니다. 또한 HTTPRoute
는 Gateway
를 참조합니다.
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"
http_route.yaml
의 사양을 사용하여HTTPRoute
리소스를 만듭니다.gcloud alpha network-services http-routes import helloworld-http-route \ --source=http_route.yaml \ --location=global
네트워크 부하 분산기 및 Traffic Director
Gateway
를 통해 외부 클라이언트에서 서비스에 액세스할 수 있는지 확인합니다.curl -H "Host: helloworld-gce" ${IP_ADDRESS}