使用Kubernetes YAML生成用户认证CSR失败求助
解决Kubernetes CSR创建失败的问题
从你提供的错误信息和YAML文件来看,有两个核心问题导致了创建失败:
1. CSR请求的Base64数据损坏
错误信息里明确提到 decode base64: illegal base64 data at input byte 76,这是因为你的spec.request字段中混入了大量无效的非Base64字符(比如中文乱码:击倒长时间Y二十这类内容)。Base64编码仅允许包含A-Z、a-z、0-9、+、/和=这些字符,任何其他字符都会直接导致解码失败。
修复方法:
- 先用OpenSSL生成合法的CSR文件:
# 生成私钥和对应的CSR文件,按提示填写信息即可 openssl req -new -newkey rsa:2048 -nodes -keyout akshay.key -out akshay.csr - 将生成的CSR文件转换为无换行的Base64编码(Kubernetes要求不能有换行):
cat akshay.csr | base64 | tr -d '\n' - 把上面命令输出的结果完全替换到YAML的
spec.request字段中。
2. API版本过时且字段取值不兼容
你使用的certificates.k8s.io/v1beta1版本已经被官方废弃(从Kubernetes 1.19开始,推荐使用v1版本),并且v1版本的spec.usages字段要求使用驼峰式枚举值,而不是v1beta1中的空格分隔字符串。
修复方法:
- 将API版本改为
certificates.k8s.io/v1 - 将
usages中的client auth修改为clientAuth(这是v1版本的合法取值)
修正后的完整YAML示例
apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: akshay spec: groups: - system:authenticated usages: - clientAuth # 替换成你自己生成的合法Base64编码的CSR内容 request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1ZqQ0NBVDRDQVFBd0VURVBNQTBHQTFVRUF3d0dZV3R6YUdGNU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRgpBQU9DQVE4QU1JSUJDZ0tDQVFFQTdoSWlVNHVyV0thdzliSStyK2MvWFh3clZjSGE2Y0ZFbTBrVElOOCtCcW05Ck5ZdW1T OHYrZVFab1NPWEFzdnliTHZWaHphMGZBSllPZzloOGpIZnFzM1ZubXJBa3FPdXJ6ZEdwSXR6aHlP S0IKaGZXVXcxZlpqUE85bUZVM3NaYzVHSVpOU3p0Q2M5eU5oNk1sN1ZUT1JqN1RSbDhrOWs9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=
验证创建
修复完成后,执行以下命令创建CSR:
kubectl apply -f cert.yaml
可以用这条命令查看CSR的状态:
kubectl get csr akshay
内容的提问来源于stack exchange,提问作者naveen
相关产品推荐
相关产品推荐

