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

Kubernetes Ingress加载指定证书失败,返回虚假证书求助

问题描述

通过预封装Helm Chart部署应用时,Ingress与关联的Secret均部署成功,且Ingress正确指定了tls.secretName,但执行以下命令时,始终返回Kubernetes Ingress Controller的虚假证书:

openssl s_client -showcerts -servername connectivity-proxy.cs-dev.transparent-proxy.eurekacloud.io -connect connectivity-proxy.cs-dev.transparent-proxy.eurekacloud.io:443
CONNECTED(00000004)
depth=0 O = Acme Co, CN = Kubernetes Ingress Controller Fake Certificate
verify error:num=18:self signed certificate
verify return:1
depth=0 O = Acme Co, CN = Kubernetes Ingress Controller Fake Certificate
verify return:1

由于使用预封装Helm Chart,无法通过--default-ssl-certificate参数配置默认证书,且集群中存在其他使用不同证书的Ingress,需排查其他可能原因。

已部署的Ingress片段:

spec:
  rules:
  - host: connectivity-proxy.cs-dev.transparent-proxy.eurekacloud.io
    http:
      paths:
      - backend:
          service:
            name: connectivity-proxy-tunnel-0
            port:
              number: 8042
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - connectivity-proxy.cs-dev.transparent-proxy.eurekacloud.io
    secretName: pr-ingress-secret

Secret片段:

apiVersion: v1
data:
  ca.crt: <Base 64 encoded value of CA Cert>
  tls.crt: <Base 64 encoded value of TLS Cert>
  tls.key: <Base 64 encoded value of TLS Key>
kind: Secret
metadata:
  annotations:
    meta.helm.sh/release-name: connectivity-proxy
    meta.helm.sh/release-namespace: connectivity-proxy
  creationTimestamp: "2024-03-02T07:32:56Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: pr-ingress-secret
  namespace: connectivity-proxy
  resourceVersion: "3674684903"
  uid: 401e2621-789b-4ecd-803c-8e3ceb56513b
type: Opaque
排查方向
  • 修正Secret类型:当前Secret的type为Opaque,但Ingress TLS要求Secret必须是kubernetes.io/tls类型,否则控制器无法识别并加载证书。需修改Secret的类型:
    kubectl patch secret pr-ingress-secret -n connectivity-proxy -p '{"type":"kubernetes.io/tls"}'
    
  • 验证证书与密钥匹配性:解码Secret中的tls.crt和tls.key,确认证书对应目标域名,且密钥与证书配对:
    # 解码证书到本地文件
    kubectl get secret pr-ingress-secret -n connectivity-proxy -o jsonpath='{.data.tls\.crt}' | base64 -d > tls.crt
    # 解码密钥到本地文件
    kubectl get secret pr-ingress-secret -n connectivity-proxy -o jsonpath='{.data.tls\.key}' | base64 -d > tls.key
    # 对比证书和密钥的模数MD5值,需完全一致
    openssl x509 -noout -modulus -in tls.crt | openssl md5
    openssl rsa -noout -modulus -in tls.key | openssl md5
    
  • 检查Ingress控制器日志:查看Ingress控制器(如NGINX Ingress Controller)的Pod日志,排查是否存在加载该Secret的错误(如权限不足、证书格式无效):
    # 替换为实际的Ingress控制器Pod名称和命名空间
    kubectl logs -n kube-system <nginx-ingress-controller-pod> | grep pr-ingress-secret
    
  • 确认Ingress资源状态:检查Ingress的status字段,确认负载均衡端点正常关联,控制器已成功处理该Ingress:
    kubectl get ingress -n connectivity-proxy -o yaml
    
  • 排查域名解析与链路:确认目标域名解析到Ingress控制器的入口IP/域名,443端口未被其他代理或负载均衡拦截。
  • 检查Ingress域名冲突:确认集群中没有其他Ingress资源匹配同一域名,导致证书被优先级更高的规则覆盖:
    kubectl get ingress --all-namespaces | grep connectivity-proxy.cs-dev.transparent-proxy.eurekacloud.io
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:37:44