Les pods de passerelle d'entrée Apigee affichent 1 conteneur sur 2 en cours d'exécution

Problème constaté

Lorsque vous obtenez la liste des pods, vos pods apigee-ingressgateway n'affichent qu'un seul conteneur en cours d'exécution sur deux.

Par exemple, lorsque vous exécutez la commande suivante :

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

Résultat :

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

De plus, l'exécution d'une commande describe sur l'un des pods ci-dessus affichera l'échec de la vérification d'aptitude avec un code d'état 503.

Par exemple, le message suivant peut s'afficher dans la section Events de la description du pod :

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

Cause possible

Cause Description
L'entrée Apigee est configurée pour écouter sur le port 80 La configuration de l'entrée Apigee sur le port 80 n'est plus compatible avec Apigee hybrid 1.9.

Cause : l'entrée Apigee est configurée pour écouter sur le port 80.

Ce problème est dû au fait que la passerelle d'entrée Apigee est configurée pour écouter sur le port 80, qui n'est plus compatible à partir d'Apigee Hybrid 1.9.

Cela peut se produire si vous avez effectué une mise à niveau à partir d'une version antérieure d'Apigee Hybrid qui autorisait le port 80, ou s'il existe une autre erreur de configuration qui l'a activé.

Diagnostic

  1. Obtenez la liste de vos pods apigee-ingressgateway.

    Exécutez la commande suivante :

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

    Exemple de sortie

    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. Décrivez l'un des pods listés pour vérifier les événements :
    kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD

    APIGEE_INGRESSGATEWAY_POD est un pod apigee-ingressgateway listé dans le résultat de la commande précédente.

    Exemple de résultat :

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

    Il est possible qu'une entrée de journal indique que le port 80 n'a pas pu être lié en raison d'une erreur d'autorisation refusée, suivie d'un message indiquant qu'Envoy n'est pas prêt.

    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. Examinez la configuration actuelle de apigeeroute pour trouver celle qui a le port 80 (HTTP) activé.
    • Obtenez la liste des routes Apigee définies.
      kubectl -n apigee get apigeeroute

      Exemple de résultat :

      NAME                                  STATE     AGE
      myorg-hyb-dev-grp-000-33620d0         running   2d1h
      non-sni                               running   17s
      
    • Vérifiez chaque apigeeroute pour voir où le port 80 est défini.

      Exécutez la commande suivante pour chaque apigeeroute listé dans le résultat de la commande précédente :

      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml

      APIGEE_ROUTE_NAME est le nom d'un apigeeroute individuel.

      Exemple de commande :

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

      Exemple de résultat :

            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
            
      Le apigeeroute non-sni indique que le port 80 est activé dans cette route.

Solution

Pour résoudre ce problème, désactivez le port 80 dans le fichier YAML apigeeroute d'origine en supprimant les lignes suivantes.

  - number: 80
    protocol: HTTP
      

Si vous ne disposez pas du fichier YAML apigeeroute d'origine, vous pouvez procéder comme suit :

  1. Exportez la configuration actuelle à l'aide de la commande suivante :
    kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml

    APIGEE_ROUTE_NAME correspond à la apigeeroute mise à jour pour supprimer la configuration du port 80.

    APIGEE_ROUTE_FILENAME est le nom du fichier de sortie contenant le contenu YAML apigeeroute.

  2. Modifiez le fichier YAML apigeeroute pour supprimer la configuration du port 80.

    Ouvrez le fichier APIGEE_ROUTE_FILENAME dans un éditeur de texte et supprimez les lignes suivantes :

            - number: 80
              protocol: HTTP
                
  3. Remplacez le fichier apigeeroute existant par le fichier YAML modifié :
    kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
    

    APIGEE_ROUTE_FILENAME est le fichier de sortie contenant la configuration apigeeroute mise à jour.

  4. Les pods apigee-ingressgateway doivent maintenant s'exécuter avec 2/2 conteneurs. Si ce n'est pas le cas, supprimez les pods pour que de nouveaux soient créés automatiquement.
            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
            

Vous devez collecter des informations de diagnostic

Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez Google Cloud Customer Care :
  • Overrides.yaml
  • Résultats des commandes suivantes :
    • kubectl -n apigee get pods -l app=apigee-ingressgateway
    • kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
    • kubectl -n apigee get apigeeroutes
    • Pour chacun des itinéraires indiqués, exécutez la commande suivante :
      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
  • Vous pouvez également exécuter et fournir les informations Must-Gather Apigee Hybrid.