Os pods do gateway de entrada da Apigee mostram 1 de 2 contêineres em execução

Sintoma

Seus pods apigee-ingressgateway mostram apenas 1 de 2 contêineres em execução quando você recebe a lista de pods.

Por exemplo, ao executar o comando:

kubectl -n apigee get pods -l app=apigee-ingressgateway

Saída:

NAME                                                             READY   STATUS    RESTARTS   AGE
apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r         1/2     Running      0      6m48s
apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf         1/2     Running      0      123m

Além disso, executar um comando describe em um dos pods acima vai mostrar que a sondagem de prontidão falhou com um código de status 503.

Por exemplo, na seção Events da descrição do pod, você pode ver a seguinte mensagem:

Events:
  Type     Reason     Age                    From     Message
  ----     ------     ----                   ----     -------
  Warning  Unhealthy  76s (x32903 over 18h)  kubelet  Readiness probe failed: HTTP probe failed with statuscode: 503

Possível causa

Causa Descrição
A entrada da Apigee está configurada para detectar a porta 80 A configuração de entrada da Apigee na porta 80 não é mais compatível a partir da Apigee híbrida 1.9.

Causa: a entrada da Apigee está configurada para aguardar conexões na porta 80.

Esse problema ocorre porque o gateway de entrada da Apigee está configurado para ouvir na porta 80, que não é mais compatível a partir da Apigee híbrida 1.9.

Isso pode acontecer se você fez upgrade de uma versão anterior da Apigee híbrida que permitia a porta 80 ou se houver outra configuração incorreta que a ativou.

Diagnóstico

  1. Receba uma lista dos seus pods apigee-ingressgateway.

    Execute este comando:

    kubectl -n apigee get pods -l app=apigee-ingressgateway

    Exemplo de saída

    NAME                                                              READY   STATUS    RESTARTS   AGE
    apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r         1/2     Running   0          6m48s
    apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf         1/2     Running   0          123m
    
  2. Descreva um dos pods listados para verificar os eventos:
    kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD

    Em que APIGEE_INGRESSGATEWAY_POD é um pod apigee-ingressgateway listado na resposta ao comando anterior.

    Exemplo de resposta:

    Events:
      Type     Reason     Age                    From     Message
      ----     ------     ----                   ----     -------
      Warning  Unhealthy  76s (x32903 over 18h)  kubelet  Readiness probe failed: HTTP probe failed with statuscode: 503
    
  3. Acesse os registros do pod APIGEE_INGRESSGATEWAY_POD.
    kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD

    Talvez você veja uma entrada de registro mostrando que a vinculação da porta 80 falhou devido a um erro de permissão negada, seguida de uma mensagem informando que o envoy não está pronto.

    2025-09-11T06:16:45.457621Z     error   envoy config external/envoy/source/common/listener_manager/listener_manager_impl.cc:1186        listener '0.0.0.0_80' failed to bind or apply socket options: cannot bind '0.0.0.0:80': Permission denied
    ...
    2025-09-11T06:16:46.365818Z     warn    Envoy proxy is NOT ready: config received from XDS server, but was rejected: cds updates: 1 successful, 0 rejected; lds updates: 0 successful, 1 rejected
    
  4. Analise a configuração atual do apigeeroute para encontrar aquela que tem a porta 80 (HTTP) ativada.
    • Receba uma lista das rotas definidas da Apigee.
      kubectl -n apigee get apigeeroute

      Exemplo de resposta:

      NAME                                  STATE     AGE
      myorg-hyb-dev-grp-000-33620d0         running   2d1h
      non-sni                               running   17s
      
    • Verifique cada apigeeroute para saber onde a porta 80 está definida.

      Execute o seguinte comando para cada apigeeroute listado na resposta ao comando anterior:

      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml

      Em que APIGEE_ROUTE_NAME é o nome de um apigeeroute individual.

      Exemplo de comando:

            kubectl -n apigee get apigeeroute non-sni -o yaml
            

      Exemplo de resposta:

            apiVersion: apigee.cloud.google.com/v1alpha2
            kind: ApigeeRoute
            metadata:
              name: non-sni
              namespace: apigee
              resourceVersion: "240441468"
            spec:
              enableNonSniClient: true
              hostnames:
              - '*'
            ports:
              - number: 443
                protocol: HTTPS
                tls:
                  credentialName: myorg-hyb-dev-grp
                  minProtocolVersion: TLS_AUTO
                  mode: SIMPLE
              - number: 80
                protocol: HTTP
            selector:
              app: apigee-ingressgateway
            status:
              lastAppliedGeneration: 1
              state: running
            
      O apigeeroute não SNI mostra que a porta 80 está ativada como parte dessa rota.

Resolução

Para resolver esse problema, desative a porta 80 no arquivo YAML apigeeroute original removendo as seguintes linhas.

  - number: 80
    protocol: HTTP
      

Se você não tiver o arquivo yaml apigeeroute original, siga estas etapas:

  1. Exporte a configuração atual com o seguinte comando:
    kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml

    Em que APIGEE_ROUTE_NAME é o apigeeroute que está sendo atualizado para remover a configuração da porta 80.

    Em que APIGEE_ROUTE_FILENAME é o nome do arquivo de saída que contém o conteúdo yaml apigeeroute.

  2. Edite o arquivo yaml apigeeroute para remover a configuração da porta 80.

    Abra o arquivo APIGEE_ROUTE_FILENAME em um editor de texto e remova as seguintes linhas:

            - number: 80
              protocol: HTTP
                
  3. Substitua o apigeeroute atual pelo arquivo YAML modificado:
    kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
    

    em que APIGEE_ROUTE_FILENAME é o arquivo de saída que contém a configuração apigeeroute atualizada.

  4. Os pods apigee-ingressgateway agora devem ser executados com 2/2 contêineres. Caso contrário, exclua os pods para que novos sejam criados automaticamente.
            NAME                                                              READY   STATUS    RESTARTS   AGE
            apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r         2/2     Running   0          25h
            apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf         2/2     Running   0          26h
            

É 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 do Google Cloud:
  • Overrides.yaml
  • Saída dos seguintes comandos:
    • kubectl -n apigee get pods -l app=apigee-ingressgateway
    • kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
    • kubectl -n apigee get apigeeroutes
    • Para cada uma das rotas declaradas, execute:
      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
  • Como alternativa, execute e forneça as informações de necessidade da Apigee híbrida.