You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建K8S Ingress TLS Secret报错:非法base64数据及PEM数据问题

Kubernetes Ingress TLS Secret 创建错误排查与解决

问题场景

通过kubectl create secret tls命令生成YAML示例后,手动编写自定义YAML文件执行kubectl apply -f时出现报错:

Error from server (BadRequest): error when creating ".\tls-secret.yaml": Secret in version "v1" cannot be handled as a Secret: illegal base64 data at input byte 1548

尝试对证书和密钥内容手动base64编码后,又出现警告:

警告:tls: 未能在证书输入中找到任何PEM数据

错误原因分析

  1. 复制编码内容时的格式错误:kubectl create secret ... -o yaml输出的tls.crt和tls.key值已经是base64编码后的字符串,手动复制时容易引入换行、空格或截断内容,导致编码格式不合法。
  2. 手动编码方式错误:直接复制PEM文件的明文内容(带-----BEGIN CERTIFICATE-----这类头信息)进行编码,或是编码过程中混入多余字符,导致Kubernetes无法识别为合法的PEM数据。

解决方案

方案1:基于命令行输出整理合法YAML

执行kubectl create secret tls tls-secret --namespace demo --key=cert/private.pem --cert=cert/certificate.crt -o yaml后,复制输出内容,清理自动生成的冗余字段(resourceVersion、uid),补充kind和type字段,确保data字段缩进正确:

apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
  namespace: demo
type: kubernetes.io/tls
data:
  tls.crt: 【粘贴命令行输出的CERT_TEXT,确保完整无修改】
  tls.key: 【粘贴命令行输出的KEY_TEXT,确保完整无修改】

方案2:正确手动生成base64编码内容

直接对证书和密钥文件执行base64编码(避免复制内容导致的格式错误),命令如下:

# 生成证书的base64编码(-w 0 确保输出无换行)
base64 -w 0 cert/certificate.crt
# 生成密钥的base64编码
base64 -w 0 cert/private.pem

将命令输出的编码结果直接粘贴到YAML的data字段中,确保字符串无换行、无多余空格。

方案3:直接通过命令创建Secret(最可靠)

跳过手动编写YAML的步骤,直接用kubectl命令创建Secret:

kubectl create secret tls tls-secret --namespace demo --key=cert/private.pem --cert=cert/certificate.crt

错误说明

  • illegal base64 data at input byte 1548:表示base64字符串存在格式问题,可能是内容不完整、包含非base64字符(如换行、空格)。
  • 警告:tls: 未能在证书输入中找到任何PEM数据:说明编码后的内容无法解析为合法的PEM格式证书/密钥,大概率是编码了错误的内容,或者原始文件本身不是PEM格式。

内容的提问来源于stack exchange,提问作者hh54188

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:12:51