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 masa berlaku sertifikat TLS layanan apigee-webhook-service.apigee-system.svc telah habis atau belum valid, pesan error berikut akan ditampilkan pada log apigee-watcher:

{"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 namespace apigee-system, masalah ini dapat terjadi.
Permintaan sertifikat duplikat dibuat untuk perpanjangan apigee-serving-cert Jika ada permintaan sertifikat duplikat yang dibuat untuk memperpanjang sertifikat apigee-serving-cert, 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 berikut akan terlihat:

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

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 sertifikat apigee-serving-cert sudah dibuat:
    kubectl -n apigee-system get certificates apigee-serving-cert

Penyebab: Permintaan sertifikat duplikat dibuat untuk memperpanjang apigee-serving-cert

Diagnosis

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

    Mencantumkan semua cert-manager pod:

    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 error yang serupa dengan ini ditampilkan, hal ini akan mencegah perpanjangan sertifikat apigee-serving-cert.

  2. Cantumkan semua permintaan sertifikat dalam namespace apigee-system dan periksa 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 yang sama.

Resolusi

  1. Hapus semua permintaan sertifikat di namespace apigee-system:
    kubectl -n apigee-system delete certificaterequests --all
  2. Pastikan bahwa permintaan sertifikat duplikat telah dihapus dan hanya satu permintaan sertifikat yang tersedia untuk sertifikat apigee-serving-cert di 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 performa pod cert-manager di namespace cert-manager:
    kubectl -n cert-manager get pods

    Jika pod cert-manager sehat, semua pod cert-manager seharusnya sudah siap (1/1) dan dalam status Running, jika tidak, hal itu mungkin menjadi penyebab masalah ini:

    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 dapat gagal karena berbagai alasan. Periksa log cert-manager dan identifikasi alasan kegagalan serta atasi log tersebut sebagaimana mestinya.

    Salah satu alasan yang diketahui adalah cert-manager akan gagal jika tidak dapat berkomunikasi dengan Kubernetes API. Dalam hal ini, pesan error yang mirip dengan berikut 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 respons cluster Kubernetes dan memperbaiki masalah apa pun yang ditemukan. Lihat Memecahkan Masalah Cluster.
  2. Lihat Pemecahan masalah untuk informasi pemecahan masalah cert-manager tambahan.

Harus mengumpulkan informasi diagnostik

Jika masalah terus berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Google Cloud Customer Care.

  1. ID Project Google Cloud
  2. Organisasi hybrid Apigee
  3. File overrides.yaml hybrid Apigee, yang 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/*