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

Docker Desktop Kubernetes本地开发:Ingress Controller无法找到TLS Secret

Ingress-Nginx 证书加载失败及HTTPS访问异常排查解决

问题场景

本地Docker Desktop Kubernetes环境部署ingress-nginx v1.11.2后,控制器日志提示无法找到default/tls-secret证书, fallback到默认证书;同时HTTPS访问出现异常,具体表现:

  • HTTP访问返回308永久重定向到HTTPS
  • 直接访问HTTPS时curl提示证书吊销检查失败
  • curl -kv访问出现Failure when receiving data from the peer
  • Chrome浏览器显示ERR_EMPTY_RESPONSE

控制器报错日志

W0828 06:55:47.990075       7 controller.go:1438] Error getting SSL certificate "default/tls-secret": local SSL certificate default/tls-secret was not found. Using default certificate
I0828 06:55:47.999359       7 main.go:107] "successfully validated configuration, accepting" ingress="default/ec-example-app"
I0828 06:55:48.001713       7 store.go:440] "Found valid IngressClass" ingress="default/ec-example-app" ingressclass="nginx"
I0828 06:55:48.002013       7 backend_ssl.go:67] "Adding secret to local store" name="default/tls-secret"

已执行操作

  1. 生成自签名证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=exampleapp/O=exampleapp" -addext "subjectAltName = DNS:exampleapp"
  1. 创建TLS Secret:
kubectl create secret tls tls-secret --cert tls.crt --key tls.key
  1. 验证Secret存在:
➜  ~ kubectl get secret
NAME            TYPE                DATA   AGE
client-id       Opaque              1      28h
client-secret   Opaque              1      28h
cookie-secret   Opaque              1      28h
tls-secret      kubernetes.io/tls   2      22m
  1. 查看Secret详情:
➜  ~ kubectl describe secret tls-secret
Name:         tls-secret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/tls

Data
====
tls.crt:  1216 bytes
tls.key:  1704 bytes
  1. 应用Ingress配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ec-example-app
  annotations:
    nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - exampleapp
      secretName: tls-secret
  rules:
    - host: exampleapp
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: ec-example-app
                port:
                  number: 80
  1. 配置/etc/hosts映射:
127.0.0.1   exampleapp

排查与解决步骤

1. 确认Ingress-Nginx控制器权限

Ingress-Nginx控制器需要具备访问default命名空间下Secret的权限,检查控制器关联的ClusterRole是否包含secrets的get/list/watch权限:

kubectl describe clusterrole ingress-nginx

若缺少相关权限,更新ClusterRole:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: ingress-nginx
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "watch"]

重新应用ClusterRole:

kubectl apply -f <clusterrole-file.yaml>

2. 修复自签名证书吊销检查问题

自签名证书默认无吊销列表,会触发curl的吊销检查失败,可通过以下方式处理:

  • 本地测试推荐:禁用Ingress的SSL吊销检查
    在Ingress注解中添加配置关闭检查:
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/ssl-verify-client: "off"
        nginx.ingress.kubernetes.io/ssl-crl: ""
    
    更新Ingress配置:
    kubectl apply -f ingress.yaml
    

3. 检查后端服务可用性

Failure when receiving data from the peer和ERR_EMPTY_RESPONSE通常是Ingress无法连接后端服务导致,执行以下验证:

  • 检查服务状态:
    kubectl get service ec-example-app
    
  • 检查Pod运行状态:
    kubectl get pods -l app=ec-example-app
    
  • 从Ingress控制器Pod内部测试后端连接:
    # 获取控制器Pod名称
    POD_NAME=$(kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}')
    # 进入Pod内部
    kubectl exec -it $POD_NAME -n ingress-nginx -- /bin/bash
    # 测试后端服务连通性
    curl http://ec-example-app.default.svc.cluster.local
    

若连接失败,排查Pod是否正常启动、服务端口配置是否正确、是否有网络策略限制访问。

4. 重启Ingress-Nginx控制器

日志显示控制器后续已将Secret加入本地存储,但可能存在缓存问题,重启控制器强制重新加载证书:

kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx

5. 验证Ingress配置生效

检查Ingress资源状态,确认TLS和规则配置正确:

kubectl describe ingress ec-example-app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:34:57