(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】illegal base64 data at input byteというCSRオブジェクト生成エラー

スポンサーリンク

事象

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

同様のエラーになった方の参考になれば幸いです。