您正在查看 Apigee 和 Apigee Hybrid 文档。
查看 Apigee Edge 文档。
表现
API 代理部署失败,并显示以下错误消息。
错误消息
如果 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 证书,那么这可能就是此问题的原因。
解决方法
-
在 Apigee Hybrid 安装过程中,
apigee-serving-cert
由apigeectl init
命令创建。因此,请使用相关的overrides.yaml
文件执行该命令,以重新创建该证书:apigeectl init -f overrides/overrides.yaml
-
验证已创建
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"
如果显示类似如下的错误消息,则会阻止续订
apigee-serving-cert
证书。 -
列出
apigee-system
命名空间中的所有证书请求,并检查是否创建了多个证书请求以续订同一apigee-serving-cert
证书修订版本:kubectl -n apigee-system get certificaterequests
请参阅 cert-manager 创建了多个具有相同 certificate-revision 的 CertificateRequest 对象,了解与此问题相关的 cert-manager
问题。
解决方法
-
删除
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
Pod 健康状况良好,则所有cert-manager
Pod 都应准备就绪(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/*