Os pods do gateway de entrada do Apigee mostram 1 de 2 contentores em execução

Sintoma

Os seus pods apigee-ingressgateway mostram apenas 1 de 2 contentores em execução quando recebe a lista de pods.

Por exemplo, quando executa o seguinte 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, a execução de um comando describe num dos pods acima mostra que a sondagem de disponibilidade falha com um código de estado 503.

Por exemplo, na secção Events da descrição do podcast, 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

Causa possível

Causa Descrição
O acesso de entrada do Apigee está configurado para ouvir na porta 80 A configuração de entrada do Apigee na porta 80 já não é suportada a partir do Apigee Hybrid 1.9.

Causa: o acesso de entrada do Apigee está configurado para ouvir na porta 80

Este problema é causado pela configuração do gateway de entrada do Apigee para escutar na porta 80, que já não é suportada a partir do Apigee Hybrid 1.9.

Isto pode acontecer se tiver atualizado a partir de uma versão anterior do Apigee Hybrid que permitia a porta 80 ou se existir outra configuração incorreta que a tenha ativado.

Diagnóstico

  1. Receba uma lista dos seus apigee-ingressgatewaypods.

    Execute o seguinte 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 apresentado na saída do comando anterior.

    Exemplo de saída:

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

    Pode ver uma entrada de registo que mostra que a porta 80 não conseguiu associar devido a um erro de acesso negado, seguido de uma mensagem a indicar 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. Reveja a configuração apigeeroute atual para encontrar a que tem a porta 80 (HTTP) ativada.
    • Aceda a uma lista dos trajetos do Apigee definidos.
      kubectl -n apigee get apigeeroute

      Exemplo de saída:

      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 indicado no resultado do comando anterior:

      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml

      Onde APIGEE_ROUTE_NAME é o nome de um indivíduo apigeeroute.

      Exemplo de comando:

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

      Exemplo de saída:

            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 non-sni apigeeroute mostra que a porta 80 está ativada como parte desta rota.

Resolução

Para resolver este problema, desative a porta 80 no ficheiro apigeeroute yaml original removendo as seguintes linhas.

  - number: 80
    protocol: HTTP
      

Se não tiver o ficheiro apigeeroute yaml original, pode seguir os passos seguintes:

  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á a ser atualizado para remover a configuração da porta 80.

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

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

    Abra o ficheiro APIGEE_ROUTE_FILENAME num editor de texto e remova as seguintes linhas:

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

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

  4. Os pods apigee-ingressgateway devem agora ser executados com 2/2 contentores. Se não o fizer, elimine os pods para permitir que sejam criados novos 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
            

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 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 indicadas, execute:
      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
  • Em alternativa, pode executar e fornecer as informações must-gather do Apigee hybrid.