このページの内容は Apigee に適用されます。Apigee ハイブリッドには適用されません。
Apigee Edge のドキュメントを表示する
このドキュメントでは、Private Service Connect(PSC)を使用して、Apigee とバックエンド ターゲット サービスの間にプライベート接続を作成する方法について説明します。デフォルトでは、ターゲット エンドポイントにグローバルにアクセスできます。Apigee とバックエンド ターゲット サービスの間で流れる API プロキシ トラフィックは、「サウスバウンド」トラフィックと呼ばれます。
このドキュメントで説明するサウスバンド ネットワーキングの構成手順は、VPC でピアリングされた Apigee インスタンスと VPC 以外でピアリングされた Apigee インスタンスの両方に適用されます。ただし、プライベート DNS ピアリングは、VPC でピアリングされた Apigee インスタンスでのみサポートされます。
Apigee とバックエンド ターゲットのプライベート接続
Apigee をバックエンド ターゲットにプライベート接続するには、ターゲットがデプロイされる VPC ネットワークにサービス アタッチメントを、Apigee VPC にエンドポイント アタッチメントを作成する必要があります。これらの 2 つのエンティティで、Apigee をターゲット サービスに接続できます。
図 1 は、複数のリージョンにまたがるサウスバウンド接続のグローバル アクセスをサポートする Apigee ネットワーキング アーキテクチャを示しています。
図 1: Apigee サウスバウンド ネットワーキング アーキテクチャ。
制限事項
Apigee 組織で、特定のサービス アタッチメントに対して 1 つのエンドポイント アタッチメントを使用できます。たとえば、ターゲット サービスを公開するサービス アタッチメントが 10 個ある場合、Apigee 組織で 10 個のエンドポイント アタッチメントを作成できます(サービス アタッチメントごとに 1 つずつ)。
例: ターゲット サービスの Apigee への公開
この例では、PSC を使用して、Apigee とは直接ピアリングされていない VPC ネットワークで実行されているターゲット サービスと Apigee が通信を行う方法を説明します。この例の手順では、gcloud
と Apigee API 呼び出しを使用して、ターゲットがデプロイされている VPC ネットワーク内のサービス アタッチメントと、Apigee VPC 内のエンドポイント アタッチメントを設定し、構成します。
実施例
この例では、VPC で実行されているマネージド インスタンス グループ(MIG)に Apache ウェブサーバーがデプロイされています。このコンテキストで Apigee と通信できるように、Google では Ingress ゲートウェイを介してサービスを公開しています。
ロードバランサを設定する
公開するマイクロサービスが配置されている VPC にロードバランサを設定します。
- 次の環境変数を作成します。
export PROJECT_ID=YOUR_PROJECT_ID
export IMAGE_PROJECT=debian-cloud
export IMAGE_FAMILY=debian-12
export BACKEND=foo
export REGION=us-west1
export ZONE=us-west1-a
export NETWORK=default
export SUBNET_NAME=default
- インスタンス テンプレートを作成します。
gcloud compute instance-templates create "$BACKEND" \ --tags=psc-demo,http-server,https-server \ --image-family "$IMAGE_FAMILY" --image-project "$IMAGE_PROJECT" \ --network "$NETWORK" --subnet "$SUBNET_NAME" --region "$REGION" \ --project "$PROJECT_ID" \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>foo[/]: '\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html sudo mkdir /var/www/html/foo echo '<!doctype html><html><body><h1>foo[/foo]: '\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/foo/index.html"
- マネージド インスタンス グループを作成します。
gcloud compute instance-groups managed create $BACKEND \ --project $PROJECT_ID --base-instance-name $BACKEND \ --size 1 --template $BACKEND --region $REGION
- ヘルスチェックを作成します。
gcloud compute instance-groups managed set-named-ports $BACKEND \ --project $PROJECT_ID --region $REGION --named-ports http:80
gcloud compute health-checks create tcp hc-tcp-$BACKEND \ --region=$REGION \ --description="health check for psc backend" \ --port-name=http --project=$PROJECT_ID
- ロードバランサを作成します。
- バックエンド サービスを作成します。
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=$REGION \ --network=$NETWORK \ --health-checks=hc-tcp-$BACKEND \ --health-checks-region=$REGION \ --project=$PROJECT_ID
- マネージド インスタンス グループをバックエンド サービスに追加します。
gcloud compute backend-services add-backend be-ilb \ --region=$REGION \ --instance-group=$BACKEND \ --instance-group-zone=$ZONE \ --project=$PROJECT_ID
- 転送ルールを作成します。
gcloud compute forwarding-rules create fr-ilb \ --region=$REGION \ --load-balancing-scheme=internal \ --network=$NETWORK \ --subnet=$SUBNET_NAME \ --ip-protocol=TCP \ --ports=80 \ --backend-service=be-ilb \ --backend-service-region=$REGION \ --project=$PROJECT_ID
- バックエンド サービスを作成します。
サービス アタッチメントを作成する
ターゲット サービスがデプロイされている VPC ネットワークに PSC サービス アタッチメントを作成します。
- このタスクを行うには、
compute.subnetworks.create
権限または Compute ネットワーク管理者 IAM ロール(roles/compute.networkAdmin
)が必要です。 purpose
パラメータをPRIVATE_SERVICE_CONNECT
に設定して PSC サブネットを作成します。gcloud compute networks subnets create PSC_SUBNET_NAME \ --network NETWORK --region=REGION --purpose=PRIVATE_SERVICE_CONNECT --range=RANGE
gcloud compute --project=$PROJECT_ID firewall-rules create allow-psc-nat-80 \ --direction=INGRESS --priority=1000 --network NETWORK --action=ALLOW --rules=tcp:80 --source-ranges=RANGE --target-tags=psc-demo
コマンド パラメータの詳細については、Google Cloud CLI リファレンスをご覧ください。この手順は、コンソールまたは API でも実行できます。
次に例を示します。
gcloud compute networks subnets create psc-subnet --network default \ --region=us-west1 --purpose=PRIVATE_SERVICE_CONNECT --range=10.100.0.0/28
- VPC ネットワークにサービス アタッチメントを作成します。
- 内部ロードバランサの転送ルールを取得します。このルールは後の手順で使用します。
gcloud compute forwarding-rules list --project=PROJECT_ID
ここで PROJECT_ID は、Google Cloud プロジェクト ID です。次に例を示します。
gcloud compute forwarding-rules list --project=my-project NAME REGION IP_ADDRESS IP_PROTOCOL TARGET k8s2-tcp-e61tta3j-apps-istio-ingressgateway-0kl92frk us-west1 10.138.0.53 TCP
- サービス アタッチメントを作成します。
gcloud compute service-attachments create PSC_NAME \ --region=REGION --producer-forwarding-rule=PRODUCER_FORWARDING_RULE \ --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=PSC_SUBNET_NAME --project=PROJECT_ID
NAME パラメータは、英小文字、数字、ハイフンのみで構成される 1~63 文字の文字列にする必要があります。先頭に数字やハイフンを含めることはできません。また、末尾にハイフンは使用できません。このコマンドのパラメータの詳細については、Google Cloud CLI リファレンスをご覧ください。
次に例を示します。
gcloud compute service-attachments create gkebackend \ --region=us-west1 --producer-forwarding-rule=k8s2-tcp-e62tta1j-apps-istio-ingressgateway-0kl92frk \ --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-subnet --project=my-project
この手順はコンソール UI でも実行できます。たとえば、自動プロジェクト承認を使用してサービスを公開するをご覧ください。
- 内部ロードバランサの転送ルールを取得します。このルールは後の手順で使用します。
エンドポイント アタッチメントを作成する
Apigee 組織内にエンドポイント アタッチメントを作成します。このステップは、コマンドラインまたは Apigee のエンドポイント アタッチメント UI から行うことができます。
前提条件: この例ですでに説明しているように、エンドポイント アタッチメントを作成する前にロードバランサとサービス アタッチメントを作成し、Private Service Connect(PSC)を使用して公開するサービスを公開する必要があります。PSC を使用してサービスを公開する方法については、Private Service Connect を使用してマネージド サービスを公開するをご覧ください。サービス アタッチメントは、新しい接続を受け入れるように構成する必要があります。
コマンドライン
コマンドラインから Apigee VPC にエンドポイント アタッチメントを作成します。
- サービス アタッチメント リソースを取得します。
gcloud compute service-attachments list
このコマンドは、サービス アタッチメントの情報を返します。この情報は次のステップで使用します。次に例を示します。
NAME REGION TARGET_SERVICE CONNECTION_PREFERENCE gkebackend us-west1 k8s2-tcp-tgysilgj-apps-istio-ingressgateway-fzdhwstg ACCEPT_AUTOMATIC
- Apigee API の認証トークンを取得します。
TOKEN="$(gcloud auth print-access-token)"
- この Apigee API を使用して、エンドポイント アタッチメントを作成します。リクエストの本文で、
gcloud compute service-attachments list
コマンドから返された値を使用します。curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/endpointAttachments?endpointAttachmentId=EA_NAME" \ -d '{ "location": "REGION", "serviceAttachment": "projects/PROJECT_ID/regions/REGION/serviceAttachments/SA_NAME" }'
ここで
- REGION は、サービス アタッチメントのリージョンです。例:
us-west1
- ORGANIZATION は Apigee 組織名です。
- PROJECT_ID は、サービス アタッチメントが作成された Google Cloud プロジェクトです。
- EA_NAME は、エンドポイント アタッチメントの名前です。名前は一意である必要があります。同じ名前のエンドポイント アタッチメントは他に存在しないため、後で名前を変更することはできません。名前は先頭を小文字にして、その後に 31 文字以下の小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。最小の長さは 2 です。
- SA_NAME は、サービス アタッチメントの名前です。
Apigee が長時間実行オペレーションを開始します。オペレーションが完了すると、次のようなレスポンスが表示されます。
{ "name": "organizations/my-organization/operations/6e249895-e78e-48f0-a28f-7140e15e1676", "metadata": { "@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata", "operationType": "INSERT", "targetResourceName": "organizations/my-organization/endpointAttachments/gkebackend", "state": "FINISHED" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.apigee.v1.EndpointAttachment", "name": "organizations/my-organization/endpointAttachments/gkebackend", "location": "us-west1", "host": "7.0.3.4", "serviceAttachment": "projects/my-project/regions/us-west1/serviceAttachments/gkebackend" } }
次の例に示すように、レスポンスで返された IP アドレス
7.0.3.4
を使用して、サービス アタッチメントの背後にあるサービスに接続できます。7.0.3.4
は、Apigee によって Ingress ゲートウェイに割り当てられ、プライベートで使用されるパブリック IP(PUPI)です。インターネットではアドバタイズされず、Google のサービスがこの範囲内の IP を使用することはありません。 - REGION は、サービス アタッチメントのリージョンです。例:
- サービス アタッチメントのホスト IP を API プロキシのターゲットとして使用します。次に例を示します。
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://7.0.3.4/orders</URL> </HTTPTargetConnection> </TargetEndpoint>
Apigee UI
Apigee UI で Apigee 組織にエンドポイント アタッチメントを作成します。
- Apigee UI で、[管理者] > [エンドポイント アタッチメント] に移動します。
- [+ Endpoint Attachment] をクリックします。[Endpoint attachment] ダイアログが表示されます。
- エンドポイント アタッチメントの名前を入力します。名前は一意である必要があります。同じ名前のエンドポイント アタッチメントは他に存在しないため、後で名前を変更することはできません。名前は先頭を小文字にして、その後に 31 文字以下の小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。最小の長さは 2 です。
- [Next] をクリックします。
- [Service Attachment] プルダウン リストから、接続先のサービス アタッチメントを選択します。
UI の動作は権限によって異なります。リージョンとサービス アタッチメントを一覧表示する権限がある場合は、プルダウン リストからサービス アタッチメントを選択できます。リージョンを一覧表示する権限がない場合は、リージョンの静的なリストが表示され、リストから選択できます。サービス アタッチメントを一覧表示する権限がない場合は、サービス アタッチメントを探して、名前を手動で入力する必要があります。リージョンを一覧表示する権限がない場合は、リージョンの静的リストから選択できます。
- サービス エンドポイントが接続を受け入れ可能であることを確認します。手順については、アタッチメント接続の確認と管理をご覧ください。
- [Next] をクリックします。
- [Create] をクリックします。通常、このオペレーションが完了するまでに 1~2 分かかります。
- 現在の作成ステータスを確認するには、リストページで [Refresh] をクリックします。
- サービス アタッチメントのホスト IP を API プロキシのターゲットとして使用します。次のスクリーンショットに示すように、ホスト IP は、作成プロセスが完了するとエンドポイント アタッチメント UI に表示されます。次に例を示します。
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://7.0.5.2/orders</URL> </HTTPTargetConnection> </TargetEndpoint>
アタッチメント接続の確認と管理
このセクションでは、サービス アタッチメントが Apigee プロジェクトのエンドポイント アタッチメントにアクセスできることを確認する方法と、必要な場合に接続設定を変更する方法について説明します。
- 公開サービスを一覧表示するの手順に沿って、プロジェクト内のサービス アタッチメントのリストを表示します。
- 公開サービスの詳細を表示するの説明に沿って、接続先のサービス アタッチメントを選択します。
- 公開サービスのアタッチメントの接続設定を選択します。Private Service Connect には、以下で説明する 2 つのオプションが用意されています。現在の接続設定を変更するには、公開サービスの接続設定を変更するの説明に従ってください。
- すべての接続を自動的に受け入れる: サービス アタッチメントは、任意のプロジェクトのエンドポイント アタッチメントを受け入れます。このオプションを選択すると、サービス アタッチメントは Apigee プロジェクト内のエンドポイント アタッチメントからの接続を受け入れることができます。そのため、これ以上の構成は不要です。
- 選択したプロジェクトからの接続を受け入れる: サービス アタッチメントが接続を受け入れるプロジェクトを指定します。このオプションを選択した場合は、Apigee プロジェクトのプロジェクト ID をサービス アタッチメントに追加する必要があります。次のスクリーンショットに示すように、Apigee プロジェクト ID はエンドポイント接続の UI の「Verify project connection」ステップで確認できます。
Apigee Organizations API を使用して Apigee プロジェクト ID を取得することもできます。この ID は、
apigeeProjectId
という名前のフィールドで返されます。
- 接続の設定を変更した場合は、変更を保存します。
- Apigee UI で、[管理者] > [エンドポイント アタッチメント] に移動します。Apigee Endpoints API を使用してエンドポイント アタッチメントを一覧表示することもできます。
- アタッチメントのリストで、PSC 接続ステータスが
ACCEPTED
になっていることを確認します。フィールドのステータスがACCEPTED
以外の場合は、PSC 接続状態に関する問題のトラブルシューティングをご覧ください。
エンドポイント アタッチメントの管理
Apigee endpointAttachments API には、エンドポイント アタッチメントの作成、削除、取得、一覧表示のためのメソッドが用意されています。
エンドポイント アタッチメントの一覧表示
エンドポイントのアタッチメントのリストは、Apigee エンドポイント アタッチメント UI で確認できます。また、Apigee Endpoints API を呼び出して確認することもできます。
Apigee UI でエンドポイント アタッチメントを一覧表示するには:
- Apigee UI で、[管理者] > [エンドポイント アタッチメント] に移動します。
- エンドポイント アタッチメントのリストを表示します。
エンドポイント アタッチメントの作成
UI または Apigee Endpoints API を使用してエンドポイント アタッチメントを作成するには、エンドポイント アタッチメントを作成するをご覧ください。
エンドポイント アタッチメントの削除
Apigee UI を使用してエンドポイントを削除するには:
- Apigee UI で、[管理者] > [エンドポイント アタッチメント] に移動します。
- 削除するエンドポイント アタッチメントを選択します。
- [Delete Endpoint Attachment] をクリックします。
Apigee Endpoints API を使用して、エンドポイント アタッチメントを一覧表示、作成、削除することもできます。
プライベート DNS ピアリング
Apigee とピアリングされている Cloud プロジェクトに Cloud DNS の限定公開ゾーンがホストされている場合は、DNS ピアリングを構成することで、Apigee が限定公開ゾーン内の名前を解決できます。デフォルトでは、限定公開ゾーンはホストされている VPC ネットワークに限定されます。限定公開 DNS ゾーンと Apigee(サービス プロデューサー)の間に DNS ピアリングを構成する手順については、限定公開 DNS ゾーンをサービス プロデューサーと共有するをご覧ください。
トラブルシューティング
PSC 接続状態に関する問題
このセクションでは、エンドポイント アタッチメントがプロビジョニングされ、ステータスが「アクティブ」だが、接続状態が「承認済み」になっていない場合の解決策について説明します。考えられる接続状態を図 2 に示します。
図 2: エンドポイント アタッチメントの状態の詳細
次の表に示すように、与えられた状態から考えられる原因を特定できます。
接続状態 | 考えられる原因 | おすすめの解決策 |
---|---|---|
承諾済み | サービス アタッチメントが接続エンドポイントからの接続を承認しました。 | なし |
保留 | Apigee プロジェクト ID が、コンシューマーの承認済みプロジェクト リストや拒否リストに含まれていない可能性があります。 | サービス アタッチメントのコンシューマー承認リストに Apigee プロジェクト ID を追加します。公開サービスの接続設定を変更するをご覧ください。 |
拒否 | Apigee プロジェクト ID がコンシューマーの拒否リストに含まれています。 | コンシューマーの拒否リストから Apigee プロジェクト ID を削除し、サービス アタッチメントのコンシューマー承認リストに追加します。公開サービスへのアクセス リクエストを管理するをご覧ください。 |
フリーズ | このエンドポイント アタッチメントのサービス アタッチメントは一時停止されたか、無効になっています。 | サービス アタッチメントの説明を取得します。公開サービスの詳細を表示するをご覧ください |
クローズ | このエンドポイント アタッチメントのサービス アタッチメントは削除されています。 | サービス アタッチメントとエンドポイント アタッチメントを再作成します。 |
要確認 | エンドポイント アタッチメントはサービス アタッチメントによって受け入れられましたが、サービス アタッチメントに問題があります。 | サービス アタッチメントの説明を取得します。公開サービスの詳細を表示するをご覧ください |
使用不可 | 接続状態が不明です。この状況は、プロビジョニング中に発生する可能性があります。 | 数分待ってから、ステータスが変わるかどうか確認します。 |
Apigee を使用した PSC 構成
Apigee とサウスバウンド PSC ターゲットの接続の問題ハンドブックをご覧ください。