Apigee 與南向 PSC 目標的連線問題

您正在查看 ApigeeApigee Hybrid 說明文件。
這個主題沒有對應的 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 執行個體位於不同區域

診斷

  1. 請使用下列任一方法查看 Apigee 執行個體區域:

    1. 使用傳統版 Apigee UI:
      1. 登入 Apigee UI
      2. 依序點選「管理」>「執行個體」
      3. 按一下執行個體。
      4. 在「Instance details」窗格中,查看「Runtime hosting location」
    2. 在 Google Cloud 控制台中使用 Apigee UI:
      1. 前往 Google Cloud 控制台的「Apigee Instances」頁面。

        前往 Apigee 執行個體

      2. 按一下執行個體。
      3. 在「Instance details」窗格中,查看「Runtime hosting location」
    3. 使用 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"
        }
  2. 使用 API 呼叫檢查「Endpoint attachment」區域:
    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"
    }
  3. 使用 Cloud 控制台查看服務附件的區域:
    1. 前往 Google Cloud 控制台的「Private Service Connect」 頁面。

      前往 Private Service Connect

    2. 查看位置的「區域」 欄。

解決方法

請確認 Apigee 例項端點連結服務連結區域相同。例如:asia-northeast1

限制所述,系統不支援全球存取權。也就是說,服務附件和端點附件必須位於相同的區域。舉例來說,如果您的 Apigee 執行個體位於 us-west1 區域,您就無法將位於 us-east2 或其他區域的服務連結至該執行個體。

如果區域不同,就會出現 Apigee 與目標服務之間的連線問題。

原因:目標專案中缺少 PSC 子網路的輸入防火牆規則

診斷

在目標專案中檢查防火牆規則,確認是否允許 PSC 子網路範圍的 IP 位址連線至目標服務:

  1. 在 Google Cloud 控制台中,前往「Firewall」頁面。

    前往「Firewall」(防火牆)

  2. 在「VPC 防火牆規則」窗格中,確認是否有下列範例中的規則:
    • 方向:Ingress
    • 相符時執行的動作:允許
    • 來源篩選器:IPv4/IPv6 範圍
    • IP 範圍:PSC 子網路 (ipCidrRange) 的 IP 位址範圍,您可以使用下列 gcloud 指令來取得 PSC 子網路:
      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
      ....
    • 通訊協定和通訊埠:這些項目應根據目標服務設定列出。
  3. 例如:

解決方法

如果沒有防火牆規則,請按照「 建立服務附件」一文的步驟 2 建立 PSC 子網路。

原因:目標專案中的服務連結設定有誤

診斷

請使用下列任一方法檢查「服務附件」區域:

  1. 使用 Cloud 控制台:
    1. 前往 Google Cloud 控制台的「Private Service Connect」 頁面。

      前往 Private Service Connect

    2. 按一下「已發布的服務」
    3. 按一下所需服務。
    4. 查看位置的「區域」 列。

  2. 使用 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

解決方法

  1. 請確認 connectedEndpoints.endpoint 值參照 Apigee 的租用戶專案,並確認其狀態為 ACCEPTED。您可以使用 Apigee Organizations 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"
    }
  2. 請確認服務連結端點連結之間的連線,如 南向網路模式,檢查及管理連結連線所述。在步驟 1 的 UI 中,請確認下列事項:
    1. 「子網路」列會參照 PSC 子網路。例如:pscsub
    2. 「Target」列會參照目標後端的正確內部負載平衡器。

原因: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 中設定的通訊埠不符

診斷

  1. 在目標專案中,使用 Cloud 控制台找出轉送規則公開的連接埠:
    1. 前往 Google Cloud 控制台的「Private Service Connect」 頁面。

      前往 Private Service Connect

    2. 按一下「已發布的服務」
    3. 按一下所需服務。如以下範例所示,會公開 80 號通訊埠。

解決方法

請確認 API proxy 的 TargetEndpoint 中的通訊埠與 80 相同。

如要確認這項資訊,請前往 API Proxy 並驗證 TargetEndpoint 網址:

  1. 使用傳統版 Apigee UI:
    1. 登入 Apigee UI
    2. 依序按一下「Develop」>「API Proxies」
    3. 按一下 Proxy。
    4. 按一下「Develop」
    5. 請在 XML 窗格中檢查下列項目:
      <HTTPTargetConnection>
        <URL>http://7.0.4.2:80</URL>
      </HTTPTargetConnection>
  2. 在 Google Cloud 控制台中使用 Apigee UI:
    1. 前往 Google Cloud 控制台的「Apigee」Apigee頁面。

      前往 Apigee

    2. 在「Proxy 開發」區域中,按一下「API Proxy」
    3. 按一下 Proxy。
    4. 按一下「Develop」
    5. 請在 XML 窗格中檢查下列項目:
        <HTTPTargetConnection>
          <URL>http://7.0.4.2:80</URL>
        </HTTPTargetConnection>

必須收集診斷資訊

如果問題在您按照上述操作說明後仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 團隊聯絡:

  • Apigee 組織
  • 發生問題的環境和 API Proxy
  • 下載的偵錯工作階段 (會提供上述所有資訊)
  • 使用的端點連結
  • 目標專案和服務附加元件