Pod gateway masuk Apigee menampilkan 1 dari 2 container yang berjalan

Gejala

Pod apigee-ingressgateway Anda hanya menampilkan 1 dari 2 container yang berjalan saat Anda mendapatkan listingan pod.

Misalnya, saat Anda menjalankan perintah berikut:

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

Output:

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

Selain itu, menjalankan perintah describe pada salah satu pod di atas akan menunjukkan bahwa pemeriksaan kesiapan gagal dengan kode status 503.

Misalnya, di bagian Events deskripsi pod, Anda mungkin melihat pesan berikut:

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

Kemungkinan penyebab

Penyebab Deskripsi
Ingress Apigee dikonfigurasi untuk memproses port 80 Konfigurasi ingress Apigee di port 80 tidak lagi didukung mulai dari Apigee Hybrid 1.9.

Penyebab: Ingress Apigee dikonfigurasi untuk memproses port 80

Masalah ini disebabkan oleh gateway ingress Apigee yang dikonfigurasi untuk memproses di port 80, yang tidak lagi didukung mulai dari Apigee Hybrid 1.9.

Hal ini dapat terjadi jika Anda mengupgrade dari Apigee Hybrid versi sebelumnya yang mengizinkan port 80, atau jika ada kesalahan konfigurasi lain yang mengaktifkannya.

Diagnosis

  1. Dapatkan listingan pod apigee-ingressgateway Anda.

    Jalankan perintah berikut:

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

    Contoh output

    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. Jelaskan salah satu pod yang tercantum untuk memeriksa peristiwa:
    kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD

    Dengan APIGEE_INGRESSGATEWAY_POD adalah pod apigee-ingressgateway yang tercantum dalam output perintah sebelumnya.

    Contoh output:

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

    Anda mungkin melihat entri log yang menunjukkan bahwa port 80 gagal terikat karena error izin ditolak, diikuti dengan pesan bahwa Envoy belum siap.

    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. Tinjau konfigurasi apigeeroute saat ini untuk menemukan konfigurasi yang mengaktifkan port 80 (HTTP).
    • Mendapatkan daftar rute Apigee yang ditentukan.
      kubectl -n apigee get apigeeroute

      Contoh output:

      NAME                                  STATE     AGE
      myorg-hyb-dev-grp-000-33620d0         running   2d1h
      non-sni                               running   17s
      
    • Periksa setiap apigeeroute untuk mengetahui tempat port 80 ditentukan.

      Jalankan perintah berikut untuk setiap apigeeroute yang tercantum dalam output perintah sebelumnya:

      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml

      Dengan APIGEE_ROUTE_NAME adalah nama apigeeroute individual.

      Contoh Perintah:

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

      Contoh output:

            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
            
      apigeeroute non-sni menunjukkan bahwa port 80 diaktifkan sebagai bagian dari rute ini.

Resolusi

Untuk mengatasi masalah ini, nonaktifkan port 80 di file yaml apigeeroute asli dengan menghapus baris berikut.

  - number: 80
    protocol: HTTP
      

Jika tidak memiliki file yaml apigeeroute asli, Anda dapat mengikuti langkah-langkah berikut:

  1. Ekspor konfigurasi saat ini dengan perintah berikut:
    kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml

    Dengan APIGEE_ROUTE_NAME adalah apigeeroute yang diperbarui untuk menghapus konfigurasi port 80.

    Dengan APIGEE_ROUTE_FILENAME adalah nama file output yang berisi konten yaml apigeeroute.

  2. Edit file yaml apigeeroute untuk menghapus konfigurasi port 80.

    Buka file APIGEE_ROUTE_FILENAME di editor teks dan hapus baris berikut:

            - number: 80
              protocol: HTTP
                
  3. Ganti apigeeroute yang ada dengan file YAML yang telah diubah:
    kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
    

    Dengan APIGEE_ROUTE_FILENAME adalah file output yang berisi konfigurasi apigeeroute yang diperbarui.

  4. Pod apigee-ingressgateway sekarang harus berjalan dengan 2/2 container. Jika tidak, hapus pod untuk memungkinkan pod baru dibuat secara otomatis.
            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
            

Harus mengumpulkan informasi diagnostik

Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Layanan Pelanggan Google Cloud:
  • Overrides.yaml
  • Output dari perintah berikut:
    • kubectl -n apigee get pods -l app=apigee-ingressgateway
    • kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
    • kubectl -n apigee get apigeeroutes
    • Untuk setiap rute yang dinyatakan, jalankan:
      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
  • Sebagai alternatif, Anda dapat menjalankan dan memberikan informasi pengumpulan data wajib Apigee Hybrid.