現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
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 Namespace に apigee-serving-cert が見つからない場合、この問題が発生する可能性があります。 |
apigee-serving-cert の更新用に証明書リクエストが重複して作成された |
apigee-serving-cert 証明書の更新用に証明書リクエストが重複して作成されると、apigee-serving-cert 証明書が更新されない場合があります。 |
cert-manager は正常でない |
cert-manager が正常な状態でないと、apigee-serving-cert 証明書が更新されない場合があります。 |
原因: apigee-serving-cert が見つからない
診断
-
apigee-system
Namespace での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-serving-cert 証明書が
apigee-system
Namespace で見つからない場合、それが原因でこの問題が発生している可能性があります。
解決策
-
apigee-serving-cert
は、Apigee ハイブリッドのインストール時に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
Namespace のすべての証明書リクエストを一覧表示して、同じapigee-serving-cert
証明書リビジョンを更新するために複数の証明書リクエストが作成されているかどうかを確認します。kubectl -n apigee-system get certificaterequests
この問題に関連する cert-manager
の問題については、cert-manager が同じ証明書リビジョンを持つ複数の CertificateRequest オブジェクトを作成したをご覧ください。
解決策
-
apigee-system
Namespace のすべての証明書リクエストを削除します。kubectl -n apigee-system delete certificaterequests --all
-
重複する証明書リクエストが削除され、
apigee-system
Namespace のapigee-serving-cert
証明書で使用できる証明書リクエストが 1 つだけであることを確認します。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
Namespace の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
解決策
- Kubernetes クラスタの正常性を確認し、見つかった問題を修正します。クラスタのトラブルシューティングをご覧ください。
-
cert-manager
のトラブルシューティングの追加情報については、トラブルシューティングをご覧ください。
診断情報の収集が必要な場合
上記の手順でも問題が解決しない場合は、次の診断情報を収集し Google Cloud カスタマーケアに連絡してください。
- Google Cloud プロジェクト ID
- Apigee ハイブリッド組織
-
Apigee ハイブリッド
overrides.yaml
ファイル。機密情報をマスキングします。 - すべての Namespace の 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/*