事象
KubernetesにてYAMLファイルを用いてCSRを作成しようとした際に以下エラーで生成に失敗する。
Error from server (BadRequest): error when creating "test-csr.yaml": CertificateSigningRequest in version "v1beta1"cannot be handled as a CertificateSigningRequest: v1beta1.CertificateSigningRequest.Spec: v1beta1.CertificateSigningRequestSpec.Usages: []v1beta1.KeyUsage: Request: decode base64: illegal base64 data at input byte 1184, errorfound in #10 byte of ...|Qo=master","usages":|..., bigger context ...|S0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=master","usages":["server auth"]}}
環境情報
- kubectl v1.18.0
原因
YAMLのrequestに入れる情報を以下で出力した際の
cat hoge.csr | base64 | tr -d '\n'
末尾のホスト名情報まで入れていた。
LS0tLS1....Qo=instance-1
上記を以下に修正すると
LS0tLS1....Qo=
kubectlコマンドが通る
$ kubectl apply -f hoge-csr.yaml certificatesigningrequest.certificates.k8s.io/hoge created
以下、補足です。
補足
ユーザ認証をすべく、以下のようなユーザのCSRが作成済の場合に
$ openssl req -text -noout -in 1.csr Certificate Request: Data: Version: 0 (0x0) Subject: CN=hoge Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: ...
YAMLファイルである以下のrequest箇所に入れるデータを作成すべく冒頭のbase64でエンコードを行います。
apiVersion: certificates.k8s.io/v1beta1 kind: CertificateSigningRequest metadata: name: hoge groups: - system:authenticated request: usages: - digital signature - key encipherment - server auth
ここに入れる情報に上で述べたホスト名部分が入ると冒頭のエラーになったので、その部分を外すと問題なく通りました。
通った場合は以下コマンドにてPending状態となっていることが確認できます。
$ kubectl get csr
同様のエラーになった方の参考になれば幸いです。