Problemas de conetividade do Apigee com alvos PSC a sul

Está a ver a documentação do Apigee e do Apigee Hybrid.
Não existe um equivalente na documentação do Apigee Edge para este tópico.

Sintoma

Problemas de conetividade de rede entre o Apigee e um serviço de destino a sul ligado pelo Private Service Connect (PSC).

Mensagem de erro

Um problema de ligação de rede ou um limite de tempo excedido de TCP entre o Apigee e o serviço de destino seria apresentado como uma resposta de erro 503 e mostraria um erro semelhante ao abaixo se criar uma sessão de depuração.

{"fault":{"faultstring":"The Service is temporarily unavailable","detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable","reason":"TARGET_CONNECT_TIMEOUT"}}}

Causas possíveis

Causa Descrição
Regiões diferentes entre a associação de serviços e a instância do Apigee A região da instância do Apigee e a região do anexo de serviço são diferentes.
Regra de firewall de entrada em falta para a sub-rede do PSC no projeto de destino No projeto de destino, certifique-se de que existe uma regra de firewall de entrada para permitir o endereço IP e a porta do intervalo de sub-redes do PSC.
Configuração incorreta da associação do serviço no projeto de destino Valide a associação de serviço no projeto de destino.
Estado incorreto da associação do ponto final no Apigee Valide o anexo do ponto final no Apigee.
Incompatibilidade na porta configurada em TargetEndpoint e no ILB Certifique-se de que o TargetEndpoint no proxy de API está a usar a mesma porta exposta pelo equilibrador de carga interno (ILB) no projeto de destino.

Causa: regiões diferentes entre a associação de serviço e a instância do Apigee

Diagnóstico

  1. Verifique a região da instância do Apigee através de um dos seguintes métodos:

    1. Usando a IU do Apigee clássico:
      1. Inicie sessão na IU do Apigee.
      2. Clique em Admin > Instâncias.
      3. Clique numa instância.
      4. Verifique a Localização de alojamento de tempo de execução no painel Detalhes da instância.
    2. Usando a IU do Apigee na Google Cloud consola:
      1. Na Google Cloud consola, aceda à página Apigee Instances.

        Aceda a Instâncias do Apigee

      2. Clique numa instância.
      3. Verifique a Localização de alojamento de tempo de execução no painel Detalhes da instância.
    3. Usando uma chamada API:
      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances"
      

      Em que ORG_NAME é o nome da organização. Por exemplo, example-apigee-support.

      É devolvido algo semelhante ao seguinte. A localização de alojamento em tempo de execução é o valor apresentado para location abaixo. Por exemplo, 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. Verifique a região de associação de pontos finais através de uma chamada API:
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"

    Onde:

    • ORG_NAME é o nome da organização. Por exemplo, example-apigee-support.
    • ENDPOINT_ATTACHMENT_NAME é o nome do anexo do ponto final. Por exemplo, example-ea.

    É devolvido algo semelhante ao seguinte. A região de associação do ponto final é o valor apresentado para location abaixo. Por exemplo, 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. Verifique a região do Anexo de serviço através da Cloud Console:
    1. Na Google Cloud consola, aceda à página Private Service Connect .

      Aceda ao Private Service Connect

    2. Verifique a coluna Região para ver a localização.

Resolução

Certifique-se de que as regiões da instância do Apigee, da associação de pontos finais e da associação de serviços são as mesmas. Por exemplo, asia-northeast1.

Conforme descrito nas Limitações, o acesso global não é suportado. Isto significa que os anexos de serviços e os anexos de pontos finais têm de estar na mesma região. Por exemplo, se a sua instância do Apigee estiver na região us-west1, não pode associar serviços à mesma que estejam em us-east2 ou noutra região.

Se as regiões forem diferentes, vai ver problemas de conetividade entre o Apigee e o serviço de destino.

Causa: regra de firewall de entrada em falta para a sub-rede do PSC no projeto de destino

Diagnóstico

Verifique se existe uma regra de firewall no projeto de destino que permita que o endereço IP do intervalo da sub-rede do PSC se ligue ao serviço de destino:

  1. Na Google Cloud consola, aceda à página Firewall.

    Aceda à firewall

  2. No painel Regras de firewall de VPC, verifique se existe uma regra semelhante ao exemplo seguinte:
    • Direção: entrada
    • Ação na correspondência: permitir
    • Filtro de origem: intervalos de IPv4/IPv6
    • Intervalos de IP: intervalo de endereços IP da sub-rede do PSC (ipCidrRange) que pode obter com o seguinte comando gcloud para descrever a sub-rede do PSC:
      gcloud compute networks subnets describe PSC_SUBNET_NAME --region=REGION

      Onde:

      • PSC_SUBNET_NAME é o nome da sub-rede do PCS. Por exemplo, pscsub.
      • REGION é a localização. Por exemplo, asia-northeast1.

      É devolvido algo semelhante ao seguinte:

      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
      ....
    • Protocolos e portas: estes devem ser indicados de acordo com a configuração do serviço de destino.
  3. Por exemplo:

Resolução

Se a regra de firewall não estiver implementada, crie uma sub-rede do PSC, conforme descrito no Crie uma associação de serviço, passo 2.

Causa: configuração incorreta da associação de serviço no projeto de destino

Diagnóstico

Verifique a região da associação de serviços através de um dos seguintes métodos:

  1. Usando a Cloud Console:
    1. Na Google Cloud consola, aceda à página Private Service Connect .

      Aceda ao Private Service Connect

    2. Clique em Serviços publicados.
    3. Clique num serviço.
    4. Verifique a linha Região para a localização.

  2. Usar um gcloud command:
      gcloud compute service-attachments describe SERVICE_ATTACHMENT --region=REGION

    Onde:

    • SERVICE_ATTACHMENT é o nome da associação de serviço. Por exemplo, gkebackend.
    • REGION é a localização. Por exemplo, asia-northeast1.

    É devolvido algo semelhante ao seguinte:

    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

Resolução

  1. Certifique-se de que o valor connectedEndpoints.endpoint faz referência ao projeto de inquilino do Apigee e certifique-se de que o respetivo estado é ACCEPTED. Pode encontrar o projeto de inquilino através da API Apigee Organizations:
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME"

    Em que ORG_NAME é o nome da organização. Por exemplo, example-apigee-support.

    É devolvido algo semelhante ao seguinte. O ID está num campo denominado apigeeProjectId. Por exemplo, 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. Certifique-se de que a associação de serviços tem conetividade com a associação de pontos finais, conforme descrito em Padrões de rede de saída, verifique e faça a gestão da conetividade da associação. Na IU do passo 1 , certifique-se de que:
    1. A linha Sub-redes faz referência à sub-rede do PSC. Por exemplo, pscsub.
    2. A linha Destino faz referência ao equilibrador de carga interno correto para os back-ends de destino.

Causa: estado incorreto da associação do ponto final no Apigee

Diagnóstico

Veja a associação do ponto final no Apigee através de uma chamada API:

  curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"

Onde:

  • ORG_NAME é o nome da organização. Por exemplo, example-apigee-support.
  • ENDPOINT_ATTACHMENT_NAME é o nome do anexo do ponto final. Por exemplo, example-ea.

É devolvido algo semelhante ao seguinte:

  {
    "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"
  }

Resolução

Certifique-se do seguinte:

  • state corresponde a ACTIVE
  • connectionState corresponde a ACCEPTED
  • serviceAttachment refere-se ao projeto de destino correto e ao nome do anexo de serviço

Causa: incompatibilidade na porta configurada no TargetEndpoint e no ILB

Diagnóstico

  1. No projeto de destino, encontre a porta que a regra de encaminhamento está a expor através da Cloud Console:
    1. Na Google Cloud consola, aceda à página Private Service Connect .

      Aceda ao Private Service Connect

    2. Clique em Serviços publicados.
    3. Clique num serviço. Conforme mostrado no exemplo seguinte, a porta 80 está exposta.

Resolução

Certifique-se de que a porta 80 é a porta no TargetEndpoint do proxy da API.

Para verificar esta situação, navegue para o proxy de API e valide o URL TargetEndpoint:

  1. Usando a IU do Apigee clássica:
    1. Inicie sessão na IU do Apigee.
    2. Clique em Desenvolver > Proxies de API
    3. Clique num proxy.
    4. Clique em Desenvolver.
    5. Verifique o painel XML para o seguinte:
      <HTTPTargetConnection>
        <URL>http://7.0.4.2:80</URL>
      </HTTPTargetConnection>
  2. Usando a IU do Apigee na Google Cloud consola:
    1. Na Google Cloud consola, aceda à página Apigee.

      Aceder ao Apigee

    2. Na área Proxy development, clique em API proxies.
    3. Clique num proxy.
    4. Clique em Desenvolver.
    5. Verifique o painel XML para o seguinte:
        <HTTPTargetConnection>
          <URL>http://7.0.4.2:80</URL>
        </HTTPTargetConnection>

Tem de recolher informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, recolha as seguintes informações de diagnóstico e, em seguida, contacte o apoio ao cliente da Google Cloud:

  • Organização do Apigee
  • O ambiente e o proxy de API estão a detetar o problema
  • Sessão de depuração transferida (isto fornece todas as informações acima)
  • Anexo do ponto final a ser usado
  • Projeto de destino e anexo de serviço