Deployment proxy API gagal dengan apigee-serving-cert tidak ditemukan atau sudah tidak berlaku

Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat Dokumentasi Apigee Edge.

Gejala

Deployment proxy API gagal dengan pesan error berikut.

Pesan Error

Jika sertifikat TLS objek apigee-webhook-service.apigee-system.svc layanan telah berakhir atau belum valid, pesan {i>error<i} berikut akan ditampilkan pada apigee-watcher log:

{"level":"error","ts":1687991930.7745812,"caller":"watcher/watcher.go:60",
"msg":"error during watch","name":"ingress","error":"INTERNAL: INTERNAL: failed
to update ApigeeRoute [org-env]-group-84a6bb5, namespace apigee:
Internal error occurred: failed calling webhook
\"mapigeeroute.apigee.cloud.google.com\": Post
\"https://apigee-webhook-service.apigee-system.svc:443/mutate-apigee-cloud-google-com-v1alpha1-apigeeroute?timeout=30s\":
x509:
certificate has expired or is not yet valid: current time
2023-06-28T22:38:50Z is after 2023-06-17T17:14:13Z, INTERNAL: failed to update
ApigeeRoute [org-env]-group-e7b3ff6, namespace apigee 

Kemungkinan Penyebab

Penyebab Deskripsi
apigee-serving-cert tidak ditemukan Jika apigee-serving-cert tidak ditemukan dalam apigee-system, masalah ini dapat terjadi.
Permintaan sertifikat duplikat telah dibuat untuk memperpanjang apigee-serving-cert Jika ada permintaan sertifikat duplikat yang dibuat untuk memperpanjang apigee-serving-cert, status Sertifikat apigee-serving-cert mungkin tidak akan diperpanjang.
pengelola sertifikat tidak responsif Jika cert-manager tidak responsif, Sertifikat apigee-serving-cert mungkin tidak akan diperpanjang.

Penyebab: apigee-serving-cert tidak ditemukan

Diagnosis

  1. Periksa ketersediaan sertifikat apigee-serving-cert dalam namespace apigee-system:

    kubectl -n apigee-system get certificates apigee-serving-cert
    

    Jika sertifikat ini tersedia, output yang mirip dengan yang berikut ini akan dilihat:

    NAME                  READY   SECRET                AGE
    apigee-serving-cert   True    webhook-server-cert   2d10h
  2. Jika sertifikat apigee-serving-cert tidak ditemukan dalam apigee-system, yang mungkin menjadi penyebab masalah performa.

Resolusi

  1. apigee-serving-cert dibuat oleh perintah apigeectl init selama penginstalan hybrid Apigee. Oleh karena itu, jalankan perintah tersebut dengan file overrides.yaml yang relevan untuk membuatnya kembali:
    apigeectl init -f overrides/overrides.yaml
  2. Pastikan bahwa sertifikat apigee-serving-cert telah dibuat:
    kubectl -n apigee-system get certificates apigee-serving-cert

Penyebab: Permintaan sertifikat duplikat telah dibuat untuk memperpanjang sertifikat penayangan apigee

Diagnosis

  1. Periksa log pengontrol cert-manager dan lihat apakah terjadi error pesan yang serupa dengan yang berikut ini telah dikembalikan.

    Tampilkan daftar semua pod cert-manager:

    kubectl -n cert-manager get pods

    Contoh output:

    NAME                                       READY   STATUS    RESTARTS        AGE
    cert-manager-66d9545484-772cr              1/1     Running   0               6d19h
    cert-manager-cainjector-7d8b6bd6fb-fpz6r   1/1     Running   0               6d19h
    cert-manager-webhook-669b96dcfd-6mnm2      1/1     Running   0               6d19h

    Periksa log pengontrol cert-manager:

    kubectl -n cert-manager logs cert-manager-66d9545484-772cr | grep "issuance is skipped until there are no more duplicates"

    Contoh output:

    1 controller.go:163] cert-manager/certificates-readiness "msg"="re-queuing item due to error processing" "error"="multiple CertificateRequests were found for the 'next' revision 3, issuance is skipped until there are no more duplicates" "key"="apigee-system/apigee-serving-cert"

    Jika pesan {i>error<i} yang serupa dengan ini ditampilkan, itu akan mencegah memperpanjang sertifikat apigee-serving-cert.

  2. Mencantumkan semua permintaan sertifikat di namespace apigee-system dan periksa untuk melihat apakah ada beberapa permintaan sertifikat yang dibuat untuk memperpanjang revisi sertifikat apigee-serving-cert yang sama:
    kubectl -n apigee-system get certificaterequests

Lihat masalah cert-manager yang relevan dengan masalah ini di pengelola sertifikat membuat beberapa objek CertificateRequest dengan revisi sertifikat.

Resolusi

  1. Hapus semua permintaan sertifikat di namespace apigee-system:
    kubectl -n apigee-system delete certificaterequests --all
  2. Verifikasi bahwa permintaan sertifikat duplikat telah dihapus dan hanya satu permintaan sertifikat tersedia untuk apigee-serving-cert sertifikat dalam namespace apigee-system:
    kubectl -n apigee-system get certificaterequests
  3. Pastikan bahwa sertifikat apigee-serving-cert telah diperpanjang:
    kubectl -n apigee-system get certificates apigee-serving-cert -o yaml

    Contoh output:

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      creationTimestamp: "2023-06-26T13:25:10Z"
      generation: 1
      name: apigee-serving-cert
      namespace: apigee-system
      resourceVersion: "11053"
      uid: e7718341-b3ca-4c93-a6d4-30cf70a33e2b
    spec:
      dnsNames:
      - apigee-webhook-service.apigee-system.svc
      - apigee-webhook-service.apigee-system.svc.cluster.local
      issuerRef:
        kind: Issuer
        name: apigee-selfsigned-issuer
      secretName: webhook-server-cert
    status:
      conditions:
      - lastTransitionTime: "2023-06-26T13:25:11Z"
        message: Certificate is up to date and has not expired
        observedGeneration: 1
        reason: Ready
        status: "True"
        type: Ready
      notAfter: "2023-09-24T13:25:11Z"
      notBefore: "2023-06-26T13:25:11Z"
      renewalTime: "2023-08-25T13:25:11Z"
      revision: 1

Penyebab: pengelola sertifikat tidak responsif

Diagnosis

  1. Periksa kondisi pod cert-manager di Namespace cert-manager:
    kubectl -n cert-manager get pods

    Jika cert-manager pod responsif, semua cert-manager pod harus sudah siap (1/1) dan dalam Running jika tidak, itu bisa menjadi penyebab masalah ini masalah:

    NAME                                       READY   STATUS    RESTARTS   AGE
    cert-manager-59cf78f685-mlkvx              1/1     Running   0          15d
    cert-manager-cainjector-78cc865768-krjcp   1/1     Running   0          15d
    cert-manager-webhook-77c4fb46b6-7g9g6      1/1     Running   0          15d
  2. cert-manager bisa gagal karena berbagai alasan. Periksa cert-manager mencatat dan mengidentifikasi alasan kegagalan dan mengatasinya.

    Salah satu alasan yang diketahui adalah cert-manager akan gagal jika tidak dapat berkomunikasi dengan Kubernetes API. Dalam hal ini, {i>error<i} pesan yang mirip dengan berikut ini akan ditampilkan:

    E0601 00:10:27.841516       1 leaderelection.go:330] error retrieving
    resource lock kube-system/cert-manager-controller: Get
    "https://192.168.0.1:443/api/v1/namespaces/kube-system/configmaps/cert-manager-controller":
    dial tcp 192.168.0.1:443: i/o timeout

Resolusi

  1. Memeriksa kondisi cluster Kubernetes dan memperbaiki masalah apa pun yang ditemukan. Lihat Memecahkan Masalah Cluster.
  2. Rujuk ke Pemecahan masalah untuk cert-manager tambahan informasi pemecahan masalah.

Harus mengumpulkan informasi diagnostik

Jika masalah berlanjut bahkan setelah mengikuti instruksi di atas, kumpulkan informasi diagnostik berikut, dan kemudian hubungi Google Cloud Customer Care.

  1. ID Project Google Cloud
  2. Organisasi hybrid Apigee
  3. File overrides.yaml hybrid Apigee, menyamarkan informasi sensitif.
  4. Status pod Kubernetes di semua namespace:
    kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
  5. Dump cluster-info Kubernetes:
    # generate kubernetes cluster-info dump
    kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump
    # zip kubernetes cluster-info dump
    zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*