如何使用GoDaddy证书为Nginx Ingress控制器创建Kubernetes Secret
Kubernetes TLS Secret创建报错修复方案
该报错error: tls: failed to find any PEM data in key input核心原因为私钥文件不符合Kubernetes要求的PEM格式规范,可按照以下步骤排查修复:
1. 修复私钥格式与有效性
- 首先检查
generated-private-key.txt内容:标准PEM私钥必须以-----BEGIN PRIVATE KEY-----/-----BEGIN RSA PRIVATE KEY-----开头,以对应的-----END PRIVATE KEY-----/-----END RSA PRIVATE KEY-----结尾,中间为无多余空格、换行、特殊字符的base64编码内容,需移除文件中所有GoDaddy附带的说明文字。 - 如果私钥开头为
-----BEGIN ENCRYPTED PRIVATE KEY-----,说明是加密私钥,需要先解密:openssl rsa -in generated-private-key.txt -out tls.key - 验证私钥有效性:
执行返回openssl rsa -in tls.key -checkRSA key ok则私钥本身有效,否则说明私钥文件损坏,需要重新从GoDaddy原始邮件下载,不要手动复制粘贴内容避免引入多余字符。 - 修复换行符编码问题:如果私钥是在Windows系统下下载/编辑过,执行命令转换换行符格式:
dos2unix tls.key
2. 验证证书链与私钥的匹配性
- 确认证书拼接顺序正确,必须先放域名证书,再放GoDaddy中间证书:
cat xxxx.crt gd_bundle-g2-g1.crt > chain.crt - 验证证书和私钥匹配,两条命令返回的MD5值必须完全一致:
如MD5值不匹配,说明你下载的证书和当前私钥不是对应 pair,需要确认下载证书时选择的CSR和生成该私钥的CSR为同一个。openssl x509 -noout -modulus -in chain.crt | openssl md5 openssl rsa -noout -modulus -in tls.key | openssl md5
3. 重新创建TLS Secret
所有验证通过后执行创建命令:
kubectl create secret tls organization-tls --key tls.key --cert chain.crt
创建成功后可执行命令查看Secret是否正常:
kubectl get secret organization-tls -o yaml
4. Ingress配置验证
确认Ingress资源中正确引用该Secret,配置示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: your-ingress spec: tls: - hosts: - 你的域名 secretName: organization-tls rules: - host: 你的域名 http: paths: - path: / pathType: Prefix backend: service: name: 你的业务服务名 port: number: 服务端口
配置更新后等待Nginx Ingress控制器重载即可生效。
内容的提问来源于stack exchange,提问作者RPT102020
相关产品推荐
相关产品推荐

