現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
このトピックに対応する Apigee Edge のドキュメントはありません。
症状
Apigee と、Private Service Connect(PSC)によって接続されたサウスバウンド ターゲット サービスの間のネットワーク接続に関する問題。
エラー メッセージ
Apigee とターゲット サービスの間のネットワーク接続に関する問題や TCP タイムアウトは、503
エラー レスポンスとして表示されます。デバッグ セッションを作成すると、次のようなエラーが表示されます。
{"fault":{"faultstring":"The Service is temporarily unavailable","detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable","reason":"TARGET_CONNECT_TIMEOUT"}}}
考えられる原因
原因 | 説明 |
サービス アタッチメントと Apigee インスタンスの間のリージョンが異なる | Apigee インスタンス リージョンとサービス アタッチメント リージョンが異なります。 |
ターゲット プロジェクトで PSC サブネットの上り(内向き)ファイアウォール ルールが設定されていない | ターゲット プロジェクトに、PSC サブネット範囲の IP アドレスとポートを許可する上り(内向き)ファイアウォール ルールが設定されていることを確認します。 |
ターゲット プロジェクトのサービス アタッチメントの構成が正しくない | ターゲット プロジェクトのサービス アタッチメントを確認します。 |
Apigee のエンドポイント アタッチメントの状態が正しくない | Apigee でエンドポイント アタッチメントを確認します。 |
TargetEndpoint と ILB に設定されたポートが一致しない | API プロキシの TargetEndpoint が、ターゲット プロジェクトの内部ロードバランサ(ILB)で公開されているのと同じポートを使用していることを確認します。 |
原因: サービス アタッチメントと Apigee インスタンスのリージョンが異なる
診断
-
次のいずれかの方法で Apigee インスタンスのリージョンを確認します。
- 従来の Apigee UI を使用する場合:
- Apigee UI にログインします。
- [Admin] > [Instances] をクリックします。
- インスタンスをクリックします。
- [Instance details] ペインでランタイム ホスティングのロケーションを確認します。
- Google Cloud コンソールで Apigee UI を使用する場合:
-
Google Cloud コンソールで、[Apigee インスタンス] ページに移動します。
- インスタンスをクリックします。
- [インスタンスの詳細] ペインでランタイム ホスティングのロケーション を確認します。
-
- API 呼び出しを使用する場合:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances"
ここで ORG_NAME は移行の名前です。例:
example-apigee-support
。次のような内容が返されます。ランタイム ホスティングのロケーションの値は、以下の
location
に示されています。例:asia-northeast1
。"instances": [ { "name": "asia-northeast1", "location": "asia-northeast1", "host": "10.117.0.2", "port": "443", "createdAt": "1628150049760", "lastModifiedAt": "1682139265367", "diskEncryptionKeyName": "projects/apigee-x-support-apac-05/locations/asia-northeast1/keyRings/phanim-disk-key-1/cryptoKeys/phanim-disk-key-ring-1", "state": "ACTIVE", "peeringCidrRange": "SLASH_20", "runtimeVersion": "1-9-0-apigee-25", "consumerAcceptList": [ "example-apigee-support", "example-neg-project" ], "serviceAttachment": "projects/xb363132eb41cb643p-tp/regions/asia-northeast1/serviceAttachments/apigee-asia-northeast1-yp9o" }
- 従来の Apigee UI を使用する場合:
-
API 呼び出しを使用して、エンドポイント アタッチメントのリージョンを確認します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"
ここで
- ORG_NAME は組織の名前です。例:
example-apigee-support
。 - ENDPOINT_ATTACHMENT_NAME は、エンドポイント アタッチメントの名前です。例:
example-ea
。
次のような内容が返されます。エンドポイント アタッチメントのリージョンは、以下の
location
に示されている値です。例:asia-northeast1
。{ "name": "organizations/example-apigee-support/endpointAttachments/example-ea", "location": "asia-northeast1", "host": "7.0.4.2", "state": "ACTIVE", "connectionState": "ACCEPTED", "serviceAttachment": "projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend" }
- ORG_NAME は組織の名前です。例:
-
Cloud コンソールを使用して、サービス アタッチメント リージョンを確認します。
-
Google Cloud コンソールで、[Private Service Connect] ページに移動します。
- [リージョン] 列でロケーションを確認します。
-
解決策
Apigee インスタンス、エンドポイント アタッチメント、サービス アタッチメントのリージョンが同じであることを確認します。例: asia-northeast1
。
制限事項で説明されているように、グローバル アクセスはサポートされていません。つまり、サービス アタッチメントとエンドポイント アタッチメントは同じリージョン内に存在している必要があります。たとえば、Apigee インスタンスがリージョン us-west1
にある場合、us-east2
や他のリージョンにあるサービスを接続することはできません。
リージョンが異なると、Apigee とターゲット サービスの間の接続に関する問題が発生します。
原因: ターゲット プロジェクトで PSC サブネットの上り(内向き)ファイアウォール ルールが設定されていない
診断
PSC サブネット範囲の IP アドレスからターゲット サービスへの接続を許可するファイアウォール ルールがターゲット プロジェクトで設定されていることを確認します。
-
Google Cloud コンソールで [ファイアウォール] ページに移動します。
-
[VPC ファイアウォール ルール] ペインで、次の例のようなルールが存在することを確認します。
- 方向: 上り(内向き)
- 一致したときのアクション: 許可
- ソースフィルタ: IPv4/IPv6 範囲
- IP 範囲: PSC サブネットの IP アドレス範囲(
ipCidrRange
)。PSC サブネットを説明する次の gcloud コマンドで取得できます。gcloud compute networks subnets describe PSC_SUBNET_NAME --region=REGION
ここで
-
PSC_SUBNET_NAME は PCS サブネット名です。例:
pscsub
。 -
REGION はロケーションです。例:
asia-northeast1
。
次のような内容が返されます。
creationTimestamp: '2023-04-19T03:33:29.371-07:00' fingerprint: 1JPKY66teTg= gatewayAddress: 10.10.0.1 id: '5645967773396008342' ipCidrRange: 10.10.0.0/24 kind: compute#subnetwork name: pscsub network: https://www.googleapis.com/compute/v1/projects/target-project/global/networks/default privateIpGoogleAccess: false privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS purpose: PRIVATE_SERVICE_CONNECT ....
-
PSC_SUBNET_NAME は PCS サブネット名です。例:
- プロトコルとポート: ターゲット サービスの構成に従って一覧に表示されるはずです。
次に例を示します。
解決策
ファイアウォール ルールが設定されていない場合は、サービス アタッチメントを作成するの手順 2 で説明されているとおりに PSC サブネットを作成します。
原因: ターゲット プロジェクトのサービス アタッチメントの構成が正しくない
診断
次のいずれかの方法でサービス アタッチメントのリージョンを確認します。
- Cloud コンソールを使用する場合:
-
Google Cloud コンソールで、[Private Service Connect] ページに移動します。
- [公開サービス] をクリックします。
- サービスをクリックします。
- [リージョン] 行でロケーションを確認します。
-
gcloud command
を使用する場合:gcloud compute service-attachments describe SERVICE_ATTACHMENT --region=REGION
ここで
-
SERVICE_ATTACHMENT は、サービス アタッチメント名です。例:
gkebackend
。 -
REGION はロケーションです。例:
asia-northeast1
。
次のような内容が返されます。
connectedEndpoints: - endpoint: https://www.googleapis.com/compute/v1/projects/xb363132eb41cb643p-tp/regions/asia-northeast1/forwardingRules/example-ea pscConnectionId: '6816512648152066' status: ACCEPTED connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2023-04-19T05:09:09.941-07:00' description: '' enableProxyProtocol: false fingerprint: 0BZDAZ3zDCs= id: '4503680255626733322' kind: compute#serviceAttachment name: gkebackend natSubnets: - https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/subnetworks/pscsub pscServiceAttachmentId: high: '21570167574103266' low: '4503680255626733322' region: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1 selfLink: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend targetService: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/forwardingRules/k8s2-tcp-b65prv8v-default-ilb-svc-tv2s6klz
-
SERVICE_ATTACHMENT は、サービス アタッチメント名です。例:
解決策
-
connectedEndpoints.endpoint
の値が Apigee のテナント プロジェクトを参照していて、ステータスがACCEPTED
であることを確認します。テナント プロジェクトは、Apigee 組織 API を使用して検索できます。curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME"
ここで ORG_NAME は組織の名前です。例:
example-apigee-support
。次のような内容が返されます。ID は
apigeeProjectId
という名前のフィールドにあります。例:xb363132eb41cb643p-tp
。{ "name": "example-apigee-support", "createdAt": "1628148440954", "lastModifiedAt": "1650563608527", "environments": [ "dev" ], "properties": { "property": [ { "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" } ] }, "analyticsRegion": "asia-northeast1", "authorizedNetwork": "default", "runtimeType": "CLOUD", "subscriptionType": "PAID", "caCertificate": "CERTIFICATE_NUMBER", "runtimeDatabaseEncryptionKeyName": "projects/example-apigee-support/locations/asia-northeast1/keyRings/phanim-key-ring-1/cryptoKeys/phanim-app-key-1", "projectId": "example-apigee-support", "state": "ACTIVE", "billingType": "SUBSCRIPTION", "addonsConfig": { "advancedApiOpsConfig": {}, "integrationConfig": {}, "monetizationConfig": {} }, "apigeeProjectId": "xb363132eb41cb643p-tp" }
-
サウスバウンド ネットワーキング パターンのアタッチメント接続の確認と管理で説明されているとおりに、サービス アタッチメントがエンドポイント アタッチメントと接続していることを確認します。手順 1 の UI で次のことを確認します。
-
[サブネット] 行が PSC サブネットを参照している。例:
pscsub
。 - [ターゲット] 行がターゲット バックエンドの正しい内部ロードバランサを参照している。
-
[サブネット] 行が PSC サブネットを参照している。例:
原因: Apigee のエンドポイント アタッチメントの状態が正しくない
診断
API 呼び出しを使用して、Apigee のエンドポイント アタッチメントを表示します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"
ここで
-
ORG_NAME は組織の名前です。例:
example-apigee-support
。 -
ENDPOINT_ATTACHMENT_NAME は、エンドポイント アタッチメントの名前です。例:
example-ea
。
次のような内容が返されます。
{ "name": "organizations/example-apigee-support/endpointAttachments/example-ea", "location": "asia-northeast1", "host": "7.0.4.2", "state": "ACTIVE", "connectionState": "ACCEPTED", "serviceAttachment": "projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend" }
解決策
次のことを確認します。
state
はACTIVE
であるconnectionState
はACCEPTED
である-
serviceAttachment
は、正しいターゲット プロジェクトとサービス アタッチメント名を参照している
原因: TargetEndpoint と ILB に設定されたポートが一致しない
診断
- ターゲット プロジェクトで、Cloud コンソールを使用して転送ルールが公開しているポートを検索します。
-
Google Cloud コンソールで、[Private Service Connect] ページに移動します。
- [公開サービス] をクリックします。
- サービスをクリックします。次の例に示すように、ポート 80 が公開されています。
-
解決策
同じポート 80 が API プロキシの TargetEndpoint
のポートであることを確認します。
これを確認するには、API プロキシに移動して TargetEndpoint
の URL を確認します。
- 従来の Apigee UI を使用する場合:
- Apigee UI にログインします。
- [Develop] > [API Proxies] をクリックします。
- プロキシをクリックします。
- [Develop] をクリックします。
- [XML] ペインで次の内容を確認します。
<HTTPTargetConnection> <URL>http://7.0.4.2:80</URL> </HTTPTargetConnection>
- Google Cloud コンソールで Apigee UI を使用する場合:
-
Google Cloud コンソールで、[Apigee] ページに移動します。
- [プロキシ開発] エリアで、[API プロキシ] をクリックします。
- プロキシをクリックします。
- [開発] をクリックします。
- [XML] ペインで次の内容を確認します。
<HTTPTargetConnection> <URL>http://7.0.4.2:80</URL> </HTTPTargetConnection>
-
診断情報の収集が必要な場合
上記の手順でも問題が解決しない場合は、次の診断情報を収集して Google Cloud カスタマーケアに連絡してください。
- Apigee 組織
- 問題が生じている環境と API プロキシ
- ダウンロードしたデバッグ セッション(ここで上記のすべての情報が提供されます)
- 使用しているエンドポイント アタッチメント
- ターゲット プロジェクトとサービス アタッチメント