您正在查看 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
問題
API Proxy 部署失敗,並顯示下列錯誤訊息。
錯誤訊息
如果 apigee-webhook-service.apigee-system.svc
服務的 TLS 憑證已過期或尚未生效,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
可能的原因
原因 | 說明 |
---|---|
找不到 apigee-serving-cert | 如果在 apigee-system 命名空間中找不到 apigee-serving-cert ,就可能發生這個問題。 |
為續訂 apigee-serving-cert 而建立重複的憑證要求 |
如果為續購 apigee-serving-cert 憑證而建立重複的憑證要求,apigee-serving-cert 憑證可能無法續購。 |
cert-manager 健康狀態不佳 |
如果 cert-manager 處於不健康狀態,apigee-serving-cert 憑證可能無法續約。 |
原因:找不到 apigee-serving-cert
診斷
-
檢查
apigee-system
命名空間中是否有apigee-serving-cert
憑證:kubectl -n apigee-system get certificates apigee-serving-cert
如果這個憑證可用,您應該會看到類似以下的輸出內容:
NAME READY SECRET AGE apigee-serving-cert True webhook-server-cert 2d10h
-
如果在
apigee-system
命名空間中找不到 apigee-serving-cert 憑證,可能是這個問題的原因。
解決方法
-
使用 Helm 更新
apigee-serving-cert
:helm upgrade ENV_NAME apigee-env/ \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f OVERRIDES_FILE
請務必加入所有顯示的設定,包括
--atomic
, -
確認已建立
apigee-serving-cert
憑證:kubectl -n apigee-system get certificates apigee-serving-cert
原因:為續訂 apigee-serving-cert 而建立重複的憑證要求
診斷
-
檢查
cert-manager
控制器記錄,看看是否傳回類似以下的錯誤訊息。列出所有
cert-manager
Pod:kubectl -n cert-manager get pods
輸出內容範例:
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
檢查
cert-manager
控制器記錄:kubectl -n cert-manager logs cert-manager-66d9545484-772cr | grep "issuance is skipped until there are no more duplicates"
輸出內容範例:
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"
1 controller.go:167] cert-manager/certificates-readiness "msg"="re-queuing item due to error processing" "error"="multiple CertificateRequests were found for the 'next' revision 683, issuance is skipped until there are no more duplicates" "key"="apigee/apigee-istiod"
如果您看到上述任一訊息,系統就不會續約
apigee-serving-cert
和apigee-istiod-cert
憑證。 -
請根據上述記錄項目中顯示的命名空間,列出
apigee-system
命名空間或apigee
命名空間中的所有憑證要求,並檢查是否有為續訂相同apigee-serving-cert
或apigee-istiod-cert
憑證修訂版本而建立多個憑證要求:kubectl -n apigee-system get certificaterequests
請參閱與此問題相關的 cert-manager
問題,請見
cert-manager 使用相同的憑證修訂版本建立多個 CertificateRequest 物件。
解決方法
-
刪除
apigee-system
命名空間中的所有憑證要求:kubectl -n apigee-system delete certificaterequests --all
-
確認已刪除重複的憑證要求,且
apigee-system
命名空間中apigee-serving-cert
憑證只有一個憑證要求:kubectl -n apigee-system get certificaterequests
-
確認
apigee-serving-cert
憑證已更新:kubectl -n apigee-system get certificates apigee-serving-cert -o yaml
輸出內容範例:
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
原因:cert-manager 的健康狀態不佳
診斷
-
檢查
cert-manager
命名空間中cert-manager
pod 的健康狀態:kubectl -n cert-manager get pods
如果
cert-manager
容器運作正常,所有cert-manager
容器都應處於(1/1)
狀態,並處於Running
狀態,否則可能會發生以下問題: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
-
cert-manager
可能會因為許多原因而失敗,請檢查cert-manager
記錄檔,找出失敗原因並加以解決。其中一個已知原因是,如果
cert-manager
無法與 Kubernetes API 通訊,就會失敗。在這種情況下,系統會顯示類似以下的錯誤訊息: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
解決方法
必須收集診斷資訊
如果問題在您按照上述操作說明後仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 團隊聯絡。
- Google Cloud 專案 ID
- Apigee Hybrid 機構
-
Apigee Hybrid
overrides.yaml
檔案,遮蓋任何機密資訊。 - 所有命名空間中的 Kubernetes Pod 狀態:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
-
Kubernetes
cluster-info
傾印:# 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/*