新機能: プロジェクトの最新情報についてはTwitterMastodonでご確認ください。

トラブルシューティング

このセクションでは、証明書の発行または更新に失敗した場合に根本原因を特定するのに役立つトラブルシューティングテクニックについて説明します。

このセクションには、次のガイドも含まれています。

概要

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 certificate
NAME READY AGE
example-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:22Z
Message: Issuing certificate as Secret does not exist
Reason: DoesNotExist
Status: False
Type: Ready
Next Private Key Secret Name: example-tls-wtlww
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Issuing 105s cert-manager Issuing certificate as Secret does not exist
Normal 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/v1
Kind: CertificateRequest
Spec:
Request: [...]
Issuer Ref:
Group: cert-manager.io
Kind: ClusterIssuer
Name: letencrypt-production
Status:
Conditions:
Last Transition Time: 2020-05-15T21:45:36Z
Message: Waiting on certificate issuance from order example-tls-fqtfg-1165244518: "pending"
Reason: Pending
Status: False
Type: Ready
Events:
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内にOrdersChallengesという2つの追加リソースがあります。これらのトラブルシューティングについては、「ACME証明書の発行に関するトラブルシューティング」で説明されています。