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

Kubernetes Ingress不接受自签名SSL证书问题求助

问题:Minikube部署Ingress后无法加载自定义自签名SSL证书

在VMware虚拟机的Kali Linux环境中,使用minikube本地部署Kubernetes Ingress时,出现Ingress不加载自定义自签名SSL证书的问题:通过Firefox或curl访问时,返回的是Kubernetes Ingress Controller Fake Certificate,而非自行配置的证书。

相关配置与操作

Ingress YAML配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: first-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
      - example.com
    secretName: myssl
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: first-service
            port:
              number: 8080

自签名证书生成命令

openssl genrsa -out s.key 2048
openssl req -new -key s.key -out s.csr -subj "/CN=example.com"
openssl x509 -req -days 365 -in s.csr -signkey s.key -out s.crt

创建Secret命令

kubectl create secret tls myssl --cert s.crt --key s.key

curl验证输出(关键片段)

* Server certificate:
*  subject: O=Acme Co; CN=Kubernetes Ingress Controller Fake Certificate
*  start date: Oct 22 09:57:19 2022 GMT
*  expire date: Oct 22 09:57:19 2023 GMT
*  issuer: O=Acme Co; CN=Kubernetes Ingress Controller Fake Certificate

调试发现:通过minikube addons enable ingress安装的Ingress Controller位于ingress-nginx命名空间,而存储证书的Secret在default命名空间。


问题原因与解决方案

原因确认

是的,这就是导致证书无法加载的核心问题。Nginx Ingress Controller运行在ingress-nginx命名空间,默认只能读取同一命名空间下的Secret资源。如果证书Secret在其他命名空间,Controller无法访问到该资源,就会自动使用内置的Fake Certificate作为 fallback。

解决方法

方法1:将Secret迁移至Ingress Controller所在命名空间(推荐)

  1. 删除default命名空间下的旧Secret:
kubectl delete secret myssl -n default
  1. 在ingress-nginx命名空间重新创建证书Secret:
kubectl create secret tls myssl --cert s.crt --key s.key -n ingress-nginx
  1. 更新Ingress配置,指定Secret所在的命名空间:
    修改Ingress YAML的tls段,添加secretNamespace字段:
spec:
  tls:
  - hosts:
      - example.com
    secretName: myssl
    secretNamespace: ingress-nginx  # 新增字段,指定Secret的命名空间
  1. 应用更新后的Ingress配置:
kubectl apply -f your-ingress-file.yaml

方法2:扩展Ingress Controller权限,允许跨命名空间读取Secret

适用于需要在多个命名空间共享证书的场景,但需注意权限范围:

  1. 编辑Ingress Controller的ClusterRole,添加读取所有命名空间Secret的权限:
kubectl edit clusterrole ingress-nginx
  1. 在rules节点下添加以下规则:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "watch"]
  1. 重启Ingress Controller Pod,使权限变更生效:
kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx

验证步骤

  1. 配置本地域名映射:在/etc/hosts中添加一行,将example.com指向Ingress的IP:
192.168.49.2 example.com
  1. 用curl验证证书是否生效:
curl -kv https://example.com

此时输出中应显示你自定义的example.com证书信息,而非Fake Certificate。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:10:32