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

Kubernetes Ingress TLS配置问题:域名使用错误证书求助

解决K8s Ingress TLS证书匹配错误的问题

嘿,我看到你在配置K8s Ingress TLS时遇到了域名和证书不匹配的问题,别着急,咱们一步步排查和修复:

1. 先确认你的Secret配置是否正确

首先得确保你为两个域名创建的Secret是完全正确的:

  • 用命令查看Secret是否存在:kubectl get secrets,确认gateway.kamerbaas.nl和kamerbaas.nl这两个Secret都在列表里
  • 检查每个Secret的内容是否包含正确的证书和密钥:
    # 检查gateway域名的Secret
    kubectl get secret gateway.kamerbaas.nl -o yaml | grep -A2 tls.crt
    kubectl get secret gateway.kamerbaas.nl -o yaml | grep -A2 tls.key
    # 检查主域名的Secret
    kubectl get secret kamerbaas.nl -o yaml | grep -A2 tls.crt
    kubectl get secret kamerbaas.nl -o yaml | grep -A2 tls.key
    
    确保输出的内容是你从Let's Encrypt拿到的证书和密钥的base64编码值,没有错误。

2. 修正Ingress的TLS配置

你的Ingress配置可能存在格式或对应关系的问题,这里给你一个完整的正确配置示例(注意:extensions/v1beta1已经被废弃,推荐使用networking.k8s.io/v1):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gateway-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  # TLS配置部分:每个域名对应一个独立的条目,绑定正确的Secret
  tls:
  - hosts:
      - gateway.kamerbaas.nl
    secretName: gateway.kamerbaas.nl  # 这里必须和你创建的Secret名称完全一致
  - hosts:
      - kamerbaas.nl
    secretName: kamerbaas.nl  # 同样,和主域名的Secret名称严格匹配
  # 路由规则部分:确保每个域名对应到正确的后端服务
  rules:
  - host: gateway.kamerbaas.nl
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: YOUR_GATEWAY_SERVICE_NAME  # 替换成你的网关服务名称
            port:
              number: 80
  - host: kamerbaas.nl
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: YOUR_MAIN_SERVICE_NAME  # 替换成你的主服务名称
            port:
              number: 80

关键注意点:

  • 严格匹配Secret名称:secretName必须和你实际创建的Secret名称完全一致,K8s对名称大小写敏感,别打错字符
  • API版本兼容性:如果你的集群版本较老,确实需要用extensions/v1beta1,那把apiVersion改回去,但建议尽快升级到networking.k8s.io/v1
  • 路由规则和TLS的对应:每个host在rules和tls部分都要存在,不能有遗漏

3. 刷新Ingress Controller缓存

有时候修改Ingress配置后,控制器可能没及时更新证书缓存,你可以重启Ingress Controller的Pod来强制刷新:

# 假设你的Nginx Ingress Controller部署在kube-system命名空间,根据实际情况调整
kubectl rollout restart deployment nginx-ingress-controller -n kube-system

4. 验证修复效果

应用修改后的Ingress配置:

kubectl apply -f your-ingress-file.yaml

然后用以下方式验证:

  • 查看Ingress的状态和事件:kubectl describe ingress gateway-ingress,检查TLS部分是否正确绑定了对应的Secret,没有报错事件
  • 用curl测试证书:
    curl -v https://gateway.kamerbaas.nl 2>&1 | grep "subject:"
    curl -v https://kamerbaas.nl 2>&1 | grep "subject:"
    
    输出的subject应该分别对应各自的域名,说明证书匹配正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:20:09