使用GoDaddy SSL证书配置Azure K8s Ingress后域名仍未安全化的问题
问题分析与解决步骤
你当前的核心问题是TLS Secret创建方式错误,Kubernetes的Ingress要求TLS Secret必须包含特定格式的tls.crt(完整证书链)和tls.key(私钥),而你用CSR文件和错误的命令创建了无效的Secret,导致证书无法被Ingress Controller识别。以下是修正后的完整配置流程:
1. 确认GoDaddy提供的完整证书文件
从GoDaddy获取SSL证书时,除了你已有的generated-private-key.txt(私钥),还应该收到以下文件:
- 你的域名证书文件(例如
d.example.in.crt) - GoDaddy的中间证书 bundle(例如
gd_bundle-g2-g1.crt)
需要将域名证书和中间证书合并为完整的证书链:
cat d.example.in.crt gd_bundle-g2-g1.crt > fullchain.crt
注意:
generated-csr.txt是证书申请请求文件,颁发证书后无需再使用它,不要将其加入证书链。
2. 删除错误创建的Secret
先清理之前无效的Secret:
kubectl delete secret my-tls-secret
3. 创建符合Kubernetes要求的TLS Secret
使用Kubernetes专门的tls类型Secret创建命令,自动处理证书和私钥的编码:
kubectl create secret tls my-tls-secret \ --cert=fullchain.crt \ --key=generated-private-key.txt
该命令会自动将证书和私钥编码为base64,并以
tls.crt和tls.key作为Secret的key,这是Ingress Controller识别证书的标准格式。
4. 优化Ingress配置(可选但推荐)
在你的Ingress配置中添加强制HTTPS跳转的注解,确保所有HTTP请求自动转向HTTPS:
kind: Ingress apiVersion: networking.k8s.io/v1 metadata: name: nginx-ingress namespace: default annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-redirect: "true" # 添加这一行 spec: tls: - hosts: - d.example.in secretName: my-tls-secret rules: - host: d.example.in http: paths: - path: / pathType: Prefix backend: service: name: d-frontend port: name: http
更新Ingress配置:
kubectl apply -f your-ingress-file.yaml
5. 验证配置是否生效
- 检查Secret内容,确认包含
tls.crt和tls.key:kubectl describe secret my-tls-secret - 检查Ingress状态,确认TLS关联正常:
kubectl describe ingress nginx-ingress - 查看Nginx Ingress Controller日志,排查证书加载错误:
kubectl logs -n kube-system $(kubectl get pods -n kube-system -l app=nginx-ingress -o name)
内容的提问来源于stack exchange,提问作者kunal gaikwad
相关产品推荐
相关产品推荐

