如何通过Rancher解决Kubernetes Ingress Controller伪证书错误
问题原因
你的RKE2工作集群中未部署cert-manager,也未配置Let's Encrypt证书签发规则,导致Ingress无法获取有效SSL证书,只能使用Ingress Controller自带的伪造证书。
解决步骤
1. 在RKE2集群中安装cert-manager
需要在应用所在的RKE2集群中安装与Rancher集群版本一致的cert-manager(v1.7.1):
helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.7.1 --set installCRDs=true --create-namespace
2. 创建Let's Encrypt集群级签发器
在RKE2集群中创建ClusterIssuer,用于和Let's Encrypt通信申请证书。创建cluster-issuer.yaml文件:
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: cert@mydomain.org # 与Rancher配置的邮箱保持一致 privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: nginx # 与你的Ingress Controller类名一致
执行部署:
kubectl apply -f cluster-issuer.yaml
3. 修改Ingress关联证书
更新hello-world应用的Ingress配置,添加TLS规则并关联上述签发器,示例配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: hello-world-ingress annotations: cert-manager.io/cluster-issuer: letsencrypt-prod # 绑定ClusterIssuer spec: ingressClassName: nginx # 必须与ClusterIssuer中指定的Ingress类一致 tls: - hosts: - hello.mydomain.org secretName: hello-world-tls # cert-manager会自动创建该Secret存储证书 rules: - host: hello.mydomain.org http: paths: - path: / pathType: Prefix backend: service: name: hello-world-service # 替换为你的应用Service名称 port: number: 80
执行更新:
kubectl apply -f hello-world-ingress.yaml
4. 验证证书状态
执行以下命令检查证书是否成功签发:
kubectl get certificates
当状态显示为Ready时,说明证书已生效,此时访问https://hello.mydomain.org即可使用有效的Let's Encrypt证书。
关键注意事项
- 确保
hello.mydomain.org的DNS记录已正确解析到RKE2集群Ingress Controller的节点IP(或负载均衡IP)。 - 确认RKE2集群的nginx Ingress Controller正常运行,且80/443端口对外开放(Let's Encrypt的HTTP-01挑战需要访问80端口)。
内容的提问来源于stack exchange,提问作者Tristate
相关产品推荐
相关产品推荐

