Ingress ゲートウェイの Traffic Director の設定
このガイドでは、Ingress ゲートウェイを使用して Traffic Director を構成する方法について説明します。
この構成では、ネットワーク ロードバランサがインターネットからのトラフィックを Ingress ゲートウェイ経由でサービス メッシュに転送します。Gateway
リソースは、サービス メッシュへのゲートウェイとして機能する Envoy プロキシを管理します。ゲートウェイは、中間プロキシまたは Ingress とも呼ばれます。Ingress ゲートウェイとして機能するようにデプロイされた Envoy プロキシは、ワークロードのサイドカーではなく、スタンドアロン プロキシです。このモードでは、Envoy は IP アドレスとポートの明確に定義されたリストをリッスンし、構成したルーティング ルールに従ってトラフィックを転送します。このような Envoy クライアントの構成には、新しい Gateway
API リソースを使用します。
Gateway
プロキシ宛てのトラフィックが Envoy をホストする VM に転送されるようにルーティングを設定します。Ingress サービスは、外部 HTTP(S) ロードバランサまたは内部 TCP/UDP ロードバランサとペア設定できますが、このような構成はデモ設定には含まれません。
このガイドでは、ゲートウェイ間の通信と、サービス間通信および Mesh
のリソースについては説明しません。
前提条件
次のガイドの前提条件を満たしていることを確認してください。
ファイアウォール ルールの設定
このセクションでは、2 つのファイアウォール ルールを構成します。1 つのルールでは、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
任意の送信元からのトラフィックを許可するようにファイアウォール ルールを構成します。ポートと送信元 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
Identity and Access Management の権限を構成する
このセクションでは、ゲートウェイ プロキシのサービス アカウントを指定して、適切な IAM ロールを割り当てます。
ゲートウェイ プロキシのサービス アカウント ID を作成します。
gcloud iam service-accounts create gateway-proxy
サービス アカウント ID に必要な IAM ロールを割り当てます。
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 プロキシを使用したマネージド インスタンス グループを作成する
このセクションでは、Ingress ゲートウェイに関連付けられた 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}