事象
Ingress用に既存のTLS証明書を利用したSecretを作成しようと秘密鍵及びサーバ証明書を与えるも
$ kubectl create secret tls tls-secret --cert=test.crt --key=test.key
以下のエラーで失敗する。
error: failed to load key pair tls: failed to find any PEM data in key input
環境情報
- Docker Desktop 2.4(DE 19.03, K8s 1.18)
原因/解決策
証明書に格納されている公開鍵と秘密鍵のペアが合っていない。
同情報が正しく揃っていれば以下のようなSecretが作成できる。
apiVersion: v1 data: tls.crt: ... tls.key: ... kind: Secret metadata: creationTimestamp: null name: tls-secret type: kubernetes.io/tls
以下、補足です。
補足
証明書をIngressで利用する場合は証明書と鍵データをbase64でエンコードした形でSecretに保存し、当Secretを以下のようなIngressのYAMLで指定します。
spec: tls: - secretName: tls-secret backend: serviceName: hoge servicePort: 80
これによってクライアントとの通信をセキュアに行えますが、Secret作成時に証明書の公開鍵とそれに対応する秘密鍵をチェックする機構が働きペアがあっていない場合は表題のエラーとなります。
以上、ご参考になれば幸いです。