1. はじめに
Private Service Connect(PSC)ネットワーク エンドポイント グループ(NEG)は、内部 HTTPS ロードバランサと外部 HTTPS ロードバランサとのチェーン接続をサポートしています。これにより、お客様が定義した範囲を使用して、オンプレミスへの分散ヘルスチェックとデータプレーン トラフィックが提供されます。さらに、複数のリージョン相互接続を介してオンプレミスに接続する複数の VPC も、このトポロジでサポートされています。
この Codelab では、次のトポロジに基づいてこのエンドツーエンドの構成方法を説明します。左から順に、オンプレミスのお客様の VM で HTTP サービスをシミュレートし、ハイブリッド接続(HA VPN または InterConnect)とハイブリッド NEG を活用して内部 HTTPS ロードバランサ経由で公開しています。PSC はサービス アタッチメントとして内部 HTTPS LB を使用します。PSC NEG は、外部 HTTPS LB に公開されるバックエンド サービスとしてアタッチメントを使用します。インターネット ユーザーは Google のグローバル ネットワークを使用して、オンプレミスの HTTP サービス アクセスを高速化できます。
図 1. Private Service Connect は、ネットワーク エンドポイント グループとサービス アタッチメントを使用して、外部 HTTPS ロードバランサを内部 HTTPS ロードバランサに接続し、バックエンドをオンプレミスに拡張します。
学習内容
- ハイブリッド NEG と分散ヘルスチェックを使用した内部 HTTPS ロードバランサ
- 内部 HTTPS ロードバランサを使用した PSC サービス アタッチメント
- PSC ネットワーク エンドポイント グループの設定
- 外部 HTTPS ロードバランサを使用して PSC NEG を公開する
必要なもの
- HA-VPN などのハイブリッド接続に関する知識
- 内部/外部 HTTPS ロード バランシングの知識
- Private Service Connect に関する知識
2. 始める前に
注: Codelab では、図のトポロジに基づく構成と検証の手順が示されています。必要に応じて手順を変更して、組織の要件を満たしてください。IAM 権限は、この Codelab の対象外です。
Codelab では、1 つのプロジェクトを使用してプロセス全体をシミュレートします。複数のプロジェクトもサポートされています。
単一プロジェクト - プロデューサー ネットワークとコンシューマ ネットワークをサポートするようにプロジェクトを更新する
Cloud Shell 内で、プロジェクト ID が設定されていることを確認します。
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. オンプレミス リソースを作成する
次のセクションでは、オンプレミスの VPC と VM を設定して、お客様のオンプレミス サービスをシミュレートします。
VPC ネットワーク
Cloud Shell から
gcloud compute networks create vpc-demo-onprem --project=$prodproject --subnet-mode=custom
サブネットの作成
Cloud Shell から
gcloud compute networks subnets create vpc-demo-onprem-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=vpc-demo-onprem --region=asia-southeast1
ファイアウォール ルールを作成する。
内部 HTTPS ロードバランサは分散ヘルスチェックをサポートしています。ファイアウォール ルールでプロキシ サブネット IP 範囲を許可することのみが必要です。ドキュメントに沿ってプロジェクトを許可リストに登録します。
Cloud Shell で、プロキシ サブネットからのバックエンド ヘルスチェックとデータプレーン トラフィックを有効にするファイアウォール ルールを作成します。
gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-onprem --source-ranges 10.0.3.0/24 --enable-logging
IAP に VM インスタンスへの接続を許可するファイアウォール ルールを Cloud Shell で作成します。
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-onprem --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. オンプレミス VM インスタンスを作成する
この VM はオンプレミス サービスをシミュレートするため、ハイブリッド NEG を使用して内部 HTTPS ロードバランサで公開する必要があります。
Cloud Shell からインスタンス www01 を作成します。
gcloud compute instances create www01 \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-onprem-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring \ --metadata=startup-script='#! /bin/bash sudo apt-get update sudo apt-get install nginx -y vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" filter="{print \$NF}" vm_zone="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/zone \ | awk -F/ "${filter}")" echo "Page on $vm_hostname in $vm_zone" | \ tee /var/www/html/index.nginx-debian.html sudo systemctl restart nginx'
次のセクションでは、letsencrypt を使用して証明書を生成し、Nginx にインストールします。次のステップのために公開鍵と秘密鍵のファイルをダウンロードします。証明書を生成するには、TCP ポート 80 をインターネットに一時的に開く必要があります。
この VM に一般公開されているドメイン名があることを確認します。たとえば、Cloud DNS で A レコード [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com)
を追加し、VM のパブリック IP アドレスを参照します。
gcloud dns --project=$prodproject record-sets create www01.yinghli.demo.altostrat.com. --zone="yinghli-demo" --type="A" --ttl="300" --rrdatas="34.87.77.186"
VM www01 コンソールから、ガイダンスに沿って Nginx に証明書をインストールし、以下の手順に沿って fullchain.pem と private.pem のコピーを作成します。
sudo apt install snapd sudo snap install core; sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot sudo certbot --nginx
5. プロデューサーの VPC ネットワークを作成する
注: この構成には、ハイブリッド ネットワーキングの構成は含まれません。
VPC ネットワーク
Cloud Shell から
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
サブネットの作成
Cloud Shell から
gcloud compute networks subnets create vpc-demo-asia-southeast1 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=asia-southeast1
プロキシ サブネットを作成する
Cloud Shell から
gcloud compute networks subnets create proxy-subnet-asia-southeast1 \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=asia-southeast1 \ --network=vpc-demo-producer \ --range=10.0.3.0/24
ハイブリッド接続
Cloud VPN のドキュメントに従って、オンプレミス VPC とプロデューサー VPC 間の HA VPN 接続を実装する。Cloud Router のデフォルト構成を維持します。BGP アドバタイズに 130.211.0.0/22 と 35.191.0.0/16 を追加する必要はありません。
6. プロデューサーのハイブリッド NEG を作成する
ハイブリッド ネットワーク エンドポイント グループを作成し、オンプレミス VM の IP:PORT を NEG に追加する。
Cloud Shell から
gcloud compute network-endpoint-groups create on-prem-service-neg \ --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \ --zone=asia-southeast1-b \ --network=vpc-demo-producer gcloud compute network-endpoint-groups update on-prem-service-neg \ --zone=asia-southeast1-b \ --add-endpoint="ip=10.0.0.2,port=443"
7. プロデューサーの内部 HTTPS ロードバランサを作成する
現在、外部 HTTPS ロードバランサは、PSC NEG への HTTPS プロトコルのみをサポートしています(ドキュメント)。公開サービスを使用する場合、内部 HTTPS ロードバランサを使用して、転送ルールのグローバル アクセスを有効にする必要があります。
Cloud Shell からリージョン ヘルスチェックを作成します。
gcloud compute health-checks create https on-prem-service-hc \ --region=asia-southeast1 \ --use-serving-port
Cloud Shell でバックエンド サービスを作成し、ハイブリッド NEG を追加します。
gcloud compute backend-services create on-premise-service-backend \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --region=asia-southeast1 \ --health-checks=on-prem-service-hc \ --health-checks-region=asia-southeast1 gcloud compute backend-services add-backend on-premise-service-backend \ --network-endpoint-group=on-prem-service-neg \ --network-endpoint-group-zone=asia-southeast1-b \ --region=asia-southeast1 \ --balancing-mode=RATE \ --max-rate-per-endpoint=100
Cloud Shell で URL マップを作成する
gcloud compute url-maps create on-premise-url \ --default-service on-premise-service-backend \ --region=asia-southeast1
Cloud Shell で、リージョン SSL 証明書を作成します。VM から 2 つの証明書ファイルがダウンロードされます。
gcloud compute ssl-certificates create www01 \ --certificate=fullchain.pem \ --private-key=private.pem \ --region=asia-southeast1
Cloud Shell から https-target-proxy を作成する
gcloud compute target-https-proxies create on-premise-httpsproxy \ --ssl-certificates=www01 \ --url-map=on-premise-url \ --url-map-region=asia-southeast1 \ --region=asia-southeast1
Cloud Shell で内部静的 IP を予約し、転送ルールを作成する
gcloud compute addresses create ilbaddress \ --region=asia-southeast1 \ --subnet=vpc-demo-asia-southeast1 \ --addresses=10.0.2.100 gcloud compute forwarding-rules create https-ilb-psc \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=vpc-demo-producer \ --subnet=vpc-demo-asia-southeast1 \ --address=ilbaddress \ --ports=443 \ --region=asia-southeast1 \ --target-https-proxy=on-premise-httpsproxy \ --target-https-proxy-region=asia-southeast1 --allow-global-access
8. プロデューサー VM インスタンスを作成する
検証用のプロデューサー VM を作成します。
Cloud Shell から
gcloud compute instances create test01 \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
IAP に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。
Cloud Shell から
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
プロデューサー VM コンソールから [
www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com)
にアクセスし、内部 HTTPS ロードバランサの IP アドレスを解決します。HTTP 200 は、構成が想定どおりに機能したことを示します。
curl -v --resolve www01.yinghli.demo.altostrat.com:443:10.0.2.100 https://www01.yinghli.demo.altostrat.com * Added www01.yinghli.demo.altostrat.com:443:10.0.2.100 to DNS cache * Hostname www01.yinghli.demo.altostrat.com was found in DNS cache * Trying 10.0.2.100:443... * Connected to www01.yinghli.demo.altostrat.com (10.0.2.100) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: CN=www01.yinghli.demo.altostrat.com * start date: Jun 4 10:36:43 2023 GMT * expire date: Sep 2 10:36:42 2023 GMT * subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. * Using HTTP2, server supports multi-use * Connection state changed (HTTP/2 confirmed) * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 * Using Stream ID: 1 (easy handle 0x55865ef982e0) > GET / HTTP/2 > Host: www01.yinghli.demo.altostrat.com > user-agent: curl/7.74.0 > accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing * Connection state changed (MAX_CONCURRENT_STREAMS == 100)! < HTTP/2 200 < server: nginx/1.18.0 < date: Mon, 05 Jun 2023 02:29:38 GMT < content-type: text/html < content-length: 35 < last-modified: Sun, 04 Jun 2023 09:02:16 GMT < etag: "647c5318-23" < accept-ranges: bytes < via: 1.1 google < Page on www01 in asia-southeast1-b * Connection #0 to host www01.yinghli.demo.altostrat.com left intact
注: オンプレミス ファイアウォールではプロキシ サブネット 10.0.3.0/24 へのアクセスのみが許可されるため、VM 10.0.0.2 の HTTPS サービスに直接アクセスすることはできません。
9. PSC NAT サブネットを作成する
Cloud Shell から
gcloud compute networks subnets create psc-nat-subnet \ --network=vpc-demo-producer \ --region=asia-southeast1 \ --range=10.0.5.0/24 \ --purpose=private-service-connect
10. HTTPS サービス アタッチメントを作成する
Cloud Shell から HTTPs サービス アタッチメントを作成します。
gcloud compute service-attachments create ilbserviceattach \ --region=asia-southeast1 \ --producer-forwarding-rule=https-ilb-psc \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=psc-nat-subnet
HTTPs サービス アタッチメントを検証する
gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1
サービス アタッチメント名を記録します。
projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach
11. コンシューマー VPC ネットワークを作成する
次のセクションでは、コンシューマ VPC は同じプロジェクトに構成しますが、異なるプロジェクトもサポートされています。コンシューマ ネットワークとプロデューサー ネットワーク間の通信は、プロデューサー ネットワークで定義されたサービス アタッチメントを通じて行われることにご注意ください。
VPC ネットワーク
Cloud Shell から
gcloud compute networks create vpc-demo-consumer --project=$prodproject --subnet-mode=custom
サブネットの作成
Cloud Shell から
gcloud compute networks subnets create consumer-subnet --project=$prodproject --range=10.0.6.0/24 --network=vpc-demo-consumer --region=asia-southeast1
12. PSC ネットワーク エンドポイント グループを作成する
PSC NEG を作成する
前の HTTPS サービスのアタッチメント名をコピーして、パラメータ --psc-target-service
に貼り付けます。
Cloud Shell から
gcloud beta compute network-endpoint-groups create consumerpscneg \ --project=$prodproject \ --region=asia-southeast1 \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach \ --network=vpc-demo-consumer \ --subnet=consumer-subnet
PSC NEG が正常に設定されたら、UI から Private Service Connect
-> Published Services
-> 公開された ilbserviceattach
接続に転送ルールが 1 つ表示されていることを確認します。
13. コンシューマー外部 HTTPS ロードバランサを作成する
外部 HTTPS ロードバランサを作成し、PSC NEG をバックエンド サービスとして使用します(ドキュメント)。
Cloud Shell から
gcloud compute addresses create httpspsclb \ --ip-version=IPV4 --global gcloud compute backend-services create consumer-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global gcloud compute backend-services add-backend consumer-bs \ --network-endpoint-group=consumerpscneg \ --network-endpoint-group-region=asia-southeast1 \ --global gcloud compute url-maps create consumer-url \ --default-service=consumer-backend-service \ --global gcloud compute ssl-certificates create wwwglobal \ --certificate=fullchain.pem \ --private-key=private.pem \ --global gcloud compute target-https-proxies create consumer-url-target-proxy \ --url-map=consumer-url \ --ssl-certificates=wwwglobal gcloud compute forwarding-rules create consumer-url-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=httpspsclb \ --target-https-proxy=consumer-url-target-proxy \ --ports=443 \ --global
www01.yinghli.demo.altostrat.com の DNS レコードを更新し、外部 HTTPS ロードバランサのパブリック IP アドレスを指すようにします。
gcloud dns --project=$prodproject record-sets update www01.yinghli.demo.altostrat.com. --type="A" --zone="yinghli-demo" --rrdatas="34.102.178.214" --ttl="300"
14. 検証
ノートパソコンから、curl を使用して https://www01.yinghli.demo.altostrat.com にアクセスします。
curl -v https://www01.yinghli.demo.altostrat.com * Trying 34.102.178.214:443... * Connected to www01.yinghli.demo.altostrat.com (34.102.178.214) port 443 (#0) * ALPN: offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN: server accepted h2 * Server certificate: * subject: CN=www01.yinghli.demo.altostrat.com * start date: Jun 4 10:36:43 2023 GMT * expire date: Sep 2 10:36:42 2023 GMT * subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. * using HTTP/2 * h2h3 [:method: GET] * h2h3 [:path: /] * h2h3 [:scheme: https] * h2h3 [:authority: www01.yinghli.demo.altostrat.com] * h2h3 [user-agent: curl/8.0.0] * h2h3 [accept: */*] * Using Stream ID: 1 (easy handle 0x149019a00) > GET / HTTP/2 > Host: www01.yinghli.demo.altostrat.com > user-agent: curl/8.0.0 > accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing < HTTP/2 200 < server: nginx/1.18.0 < date: Mon, 05 Jun 2023 02:48:43 GMT < content-type: text/html < content-length: 35 < last-modified: Sun, 04 Jun 2023 09:02:16 GMT < etag: "647c5318-23" < accept-ranges: bytes < via: 1.1 google, 1.1 google < alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 < Page on www01 in asia-southeast1-b * Connection #0 to host www01.yinghli.demo.altostrat.com left intact
15. クリーンアップ手順
プロデューサー ネットワークのクリーンアップ手順
注: クリーンアップ手順には、ロードバランサと PSC に関連する構成のみが表示されます。VPC とハイブリッド接続は含まれません。
ターミナルで単一の Cloud Shell からラボのコンポーネントを削除する
gcloud compute forwarding-rules delete consumer-url-forwarding-rule --global gcloud compute target-https-proxies delete consumer-url-target-proxy gcloud compute ssl-certificates delete wwwglobal --global gcloud compute url-maps delete consumer-url gcloud compute backend-services delete consumer-bs --global gcloud compute addresses delete httpspsclb --global gcloud beta compute network-endpoint-groups delete consumerpscneg --region=asia-southeast1 gcloud compute service-attachments delete ilbserviceattach --region=asia-southeast1 gcloud compute networks subnets delete psc-nat-subnet --region=asia-southeast1 gcloud compute forwarding-rules delete https-ilb-psc --region=asia-southeast1 gcloud compute addresses delete ilbaddress --region=asia-southeast1 gcloud compute target-https-proxies delete on-premise-httpsproxy --region=asia-southeast1 gcloud compute ssl-certificates delete www01 --region=asia-southeast1 gcloud compute url-maps delete on-premise-url --region=asia-southeast1 gcloud compute backend-services delete on-premise-service-backend --region=asia-southeast1 gcloud compute health-checks delete on-prem-service-hc --region=asia-southeast1 gcloud compute network-endpoint-groups delete on-prem-service-neg --zone=asia-southeast1-b gcloud compute networks subnets delete proxy-subnet-asia-southeast1 --region=asia-southeast1
16. 完了
以上で、この Codelab は完了です。
学習した内容
- ハイブリッド NEG と分散ヘルスチェックを使用する内部 HTTPS ロードバランサ
- 内部 HTTPS ロードバランサを使用した PSC サービス アタッチメント
- PSC ネットワーク エンドポイント グループの設定
- 外部 HTTPS ロードバランサを使用して PSC NEG を公開する