トラブルシューティング
このセクションでは、証明書の発行または更新に失敗した場合に根本原因を特定するのに役立つトラブルシューティングテクニックについて説明します。
このセクションには、次のガイドも含まれています。
- ACME/Let's Encrypt 証明書のトラブルシューティング:ACME 発行者のしくみと、その問題の診断方法について詳しく説明します。
- Webhook のトラブルシューティング:cert-manager Webhook の問題の診断方法について説明します。
概要
cert-managerのトラブルシューティングにおいて、最も頼りになるのはkubectl describe
です。これにより、リソースに関する情報と最近のイベントを確認できます。ログは非常に冗長なため、以下の手順で解決しない場合にのみ参照することをお勧めします。
cert-managerは、Kubernetesクラスタ内に存在する複数のカスタムリソースで構成されています。これらのリソースは互いにリンクされており、多くの場合、互いに作成されます。このようなイベントが発生すると、Kubernetesイベントに反映されます。これらは、kubectl get event
を使用して名前空間ごとに確認するか、単一のリソースを確認する際にkubectl describe
の出力で確認できます。
証明書リクエストの失敗のトラブルシューティング
証明書のリクエストには、いくつかのリソースが関係しています。
( +---------+ )( | Ingress | ) Optional ACME Only!( +---------+ )| || +-------------+ +--------------------+ | +-------+ +-----------+|-> | Certificate |----> | CertificateRequest | ----> | | Order | ----> | Challenge |+-------------+ +--------------------+ | +-------+ +-----------+|
cert-managerのフローはすべて、Certificate
リソースから始まります。これは自分で作成することも、適切なアノテーションを設定していれば、Ingressリソースが自動的に作成することもできます。
1. Certificateリソースの確認
まず、名前空間にCertificate
リソースが作成されているかどうかを確認する必要があります。kubectl get certificate
を使用して確認できます。
$ kubectl get certificateNAME READY AGEexample-com-tls False 1h
ingress-shimを使用する予定で、リソースが存在しない場合は、Ingressアノテーションを確認してください。詳細はIngressトラブルシューティングガイドを参照してください。ingress-shimを使用していない場合は、証明書を作成するために使用したコマンドの出力を確認してください。
ステータスがFalse
のCertificateリソースが見つかった場合は、kubectl describe certificate
を使用して詳細情報を取得できます。ステータスがTrue
の場合は、cert-managerが正常に証明書を発行したことを意味します。
$ kubectl describe certificate <certificate-name>[...]Status:Conditions:Last Transition Time: 2020-05-15T21:45:22ZMessage: Issuing certificate as Secret does not existReason: DoesNotExistStatus: FalseType: ReadyNext Private Key Secret Name: example-tls-wtlwwEvents:Type Reason Age From Message---- ------ ---- ---- -------Normal Issuing 105s cert-manager Issuing certificate as Secret does not existNormal Generated 105s cert-manager Stored new private key in temporary Secret resource "example-tls-wtlww"Normal Requested 104s cert-manager Created new CertificateRequest resource "example-tls-bw5t9"
ここでは、Status
セクションで現在の証明書のステータスに関する詳細情報、およびEvents
セクションで発生した内容に関する詳細情報を確認できます。どちらも、証明書の現在の状態を判断するのに役立ちます。最後のステータスがCreated new CertificateRequest resource
の場合は、CertificateRequest
の状態を確認して、Certificate
が発行されない理由を詳しく調べる価値があります。
2. CertificateRequest
の確認
CertificateRequest
リソースは、cert-manager内のCSRを表し、このCSRを発行元に渡します。Certificate
のイベントログ、またはkubectl get certificaterequest
を使用して、CertificateRequest
の名前を見つけることができます。
詳細情報を取得するには、再びkubectl describe
を実行します。
$ kubectl describe certificaterequest <CertificateRequest name>API Version: cert-manager.io/v1Kind: CertificateRequestSpec:Request: [...]Issuer Ref:Group: cert-manager.ioKind: ClusterIssuerName: letencrypt-productionStatus:Conditions:Last Transition Time: 2020-05-15T21:45:36ZMessage: Waiting on certificate issuance from order example-tls-fqtfg-1165244518: "pending"Reason: PendingStatus: FalseType: ReadyEvents:Type Reason Age From Message---- ------ ---- ---- -------Normal OrderCreated 8m20s cert-manager Created Order resource example-tls-fqtfg-1165244518
ここでは、発行者の構成に関する問題と、発行者の応答を確認できます。
3. 発行者の状態の確認
上記の手順で、発行者が準備完了でないエラーが表示された場合は、(クラスタ)発行者リソースに対して同じ手順を繰り返すことができます。
$ kubectl describe issuer <Issuer name>$ kubectl describe clusterissuer <ClusterIssuer name>
これにより、発行者に関するアカウントやネットワークの問題に関するエラーメッセージを取得できます。ACME発行者のトラブルシューティングについては、「ACME証明書の発行に関するトラブルシューティング」で詳しく説明されています。
4. ACMEのトラブルシューティング
ACME(例:Let's Encrypt)発行者には、cert-manager内にOrders
とChallenges
という2つの追加リソースがあります。これらのトラブルシューティングについては、「ACME証明書の発行に関するトラブルシューティング」で説明されています。