Problemas de conectividade da Apigee com destinos PSC vinculados ao sul

Esta é a documentação da Apigee e da Apigee híbrida.
Não há documentação equivalente do Apigee Edge para esse tópico.

Sintoma

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

Mensagem de erro

Se você criar uma sessão de depuração, um erro de conexão de rede ou tempo limite de TCP entre a Apigee e o serviço de destino, 503 será exibido como uma resposta de erro, exibindo um erro semelhante ao mostrado abaixo.

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

Causas possíveis

Causa Descrição
Diferentes regiões entre o anexo de serviço e a instância da Apigee As regiões da instância da Apigee e do anexo do serviço são diferentes.
Regra de firewall de entrada ausente para a sub-rede PSC no projeto de destino No projeto de destino, verifique se existe uma regra de firewall de entrada para permitir o endereço IP e a porta do intervalo de sub-rede PSC.
Configuração incorreta do anexo de serviço no projeto de destino Verifique o Anexo de serviço no projeto de destino.
Estado incorreto do anexo de endpoint na Apigee Verifique o anexo do endpoint na Apigee.
Incompatibilidade na porta configurada em TargetEndpoint e ILB Verifique se o TargetEndpoint no proxy de API está usando a mesma porta que é exposta pelo balanceador de carga interno (ILB, na sigla em inglês) no projeto de destino.

Causa: diferentes regiões entre o anexo de serviço e a instância da Apigee

Diagnóstico

  1. Verifique a região da instância da Apigee usando um dos seguintes métodos:

    1. Using the classic Apigee UI:
      1. Faça login na interface da Apigee.
      2. Clique em Administrador > Instâncias.
      3. Clique em uma instância.
      4. Verifique o Local de hospedagem do ambiente de execução no painel Detalhes da instância.
    2. Using the Apigee UI in Google Cloud console:
      1. No Console do Google Cloud, acesse a página Instâncias da Apigee.

        Acessar "Instâncias da Apigee"

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

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

      Algo semelhante ao seguinte é retornado. O Local de hospedagem do ambiente de execução é o valor mostrado 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 Anexo do endpoint usando uma chamada de API:
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"
    

    Em que:

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

    Algo semelhante ao seguinte é retornado. A região do anexo de endpoint é o valor mostrado 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 usando o Console do Cloud:
    1. No Console do Google Cloud, acesse a página do Private Service Connect.

      Acessar a página "Private Service Connect"

    2. Verifique a coluna Região do local.

Resolução

Verifique se as regiões Instância da Apigee, Anexo do endpoint e Anexo de serviço são as mesmas. Por exemplo: asia-northeast1.

Conforme descrito em Limitações, o acesso global não é compatível. Isso significa que os anexos de serviço e os de endpoints precisam estar na mesma região. Por exemplo, se sua instância da Apigee estiver na região us-west1, não vai ser possível conectar a ela serviços que estejam em us-east2 ou qualquer outra região.

Se as regiões forem diferentes, você verá problemas de conectividade entre a Apigee e o serviço de destino.

Causa: regra de firewall de entrada ausente para a sub-rede PSC no projeto de destino

Diagnóstico

Verifique se há uma regra de firewall no projeto de destino que permita que os endereços IP do intervalo de sub-rede PSC se conectem ao serviço de destino:

  1. No Console do Google Cloud, acesse a página Firewall.

    Acessar o Firewall

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

      Em que:

      • PSC_SUBNET_NAME é o nome da sub-rede PCS. Por exemplo, pscsub.
      • REGION é o local. Por exemplo: asia-northeast1

      Algo semelhante ao seguinte é retornado:

      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: precisam ser listados de acordo com a configuração de serviço de destino.
  3. Exemplo:

Resolução

Se a regra de firewall não estiver em vigor, crie uma sub-rede PSC, conforme descrito na etapa 2 em Criar um anexo de serviço.

Causa: configuração incorreta do anexo de serviço no projeto de destino

Diagnóstico

Verifique a região do Anexo de serviço usando um dos seguintes métodos:

  1. Use o Console do Cloud:
    1. No Console do Google Cloud, acesse a página do Private Service Connect.

      Acessar a página "Private Service Connect"

    2. Clique em Serviços publicados.
    3. Clique em um serviço.
    4. Verifique a linha Região do local.

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

    Em que:

    • SERVICE_ATTACHMENT é o nome do anexo de serviço. Por exemplo, gkebackend.
    • REGION é o local. Por exemplo, asia-northeast1.

    Algo semelhante ao seguinte é retornado:

    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. Verifique se o valor connectedEndpoints.endpoint está fazendo referência ao projeto de locatário da Apigee e se o status é ACCEPTED. É possível encontrar o projeto de locatário usando a 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.

    Algo semelhante ao seguinte é retornado. O ID está em um campo chamado 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 o Anexo de serviço tem conectividade com o Anexo do endpoint conforme descrito em Padrões de rede vinculados ao sul e Verificar e gerenciar a conectividade dos anexos. In the UI from step 1 , ensure that:
    1. A linha Sub-redes faz referência à sub-rede PSC. Por exemplo, pscsub.
    2. A linha Target faz referência ao balanceador de carga interno correto para os back-ends de destino.

Causa: estado incorreto do anexo de endpoint na Apigee

Diagnóstico

Veja o anexo do endpoint na Apigee usando uma chamada de API:

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

Em que:

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

Algo semelhante ao seguinte é retornado:

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

Confirme os seguintes itens:

  • state é ACTIVE
  • connectionState é ACCEPTED
  • serviceAttachment refere-se ao projeto de destino e nome de anexo de serviço corretos.

Causa: incompatibilidade na porta configurada em TargetEndpoint e ILB

Diagnóstico

  1. No projeto de destino, encontre a porta que a regra de encaminhamento está expondo usando o console do Cloud:
    1. No Console do Google Cloud, acesse a página do Private Service Connect.

      Acessar a página "Private Service Connect"

    2. Clique em Serviços publicados.
    3. Clique em um serviço. Como mostrado no exemplo a seguir, a porta 80 está exposta.

Resolução

Verifique se a mesma porta 80 é a porta em TargetEndpoint do proxy de API.

Para isso, navegue até o proxy de API e verifique o URL TargetEndpoint:

  1. Using the classic Apigee UI:
    1. Faça login na interface da Apigee.
    2. Clique em Desenvolver > Proxies de API
    3. Clique em um proxy.
    4. Clique em Desenvolver.
    5. Verifique o painel XML para ver o seguinte:
      <HTTPTargetConnection>
        <URL>http://7.0.4.2:80</URL>
      </HTTPTargetConnection>
  2. Using the Apigee UI in Google Cloud console:
    1. No console do Google Cloud, abra a página Apigee.

      Acessar a Apigee

    2. Na área Desenvolvimento de proxy, clique em Proxies de API.
    3. Clique em um proxy.
    4. Clique em Desenvolver.
    5. Verifique o painel XML para ver o seguinte:
        <HTTPTargetConnection>
          <URL>http://7.0.4.2:80</URL>
        </HTTPTargetConnection>

É necessário coletar informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, reúna as seguintes informações de diagnóstico e entre em contato com o Suporte da Apigee:

  • Organização da Apigee
  • O ambiente e o proxy de API veem o problema
  • Download da sessão de depuração (com todas as informações acima)
  • Anexo do endpoint em uso
  • Projeto de destino e anexo de serviço