当使用 nginx 控制器访问使用 aks
Our services aren't available right now We're working to restore all services as soon as possible. Please check back soon.
部署的门户时,我收到以下信息
查看入口日志,我得到
Unexpected error validating SSL certificate certificate is valid for example-aks-dev.brazilsouth.cloudapp.azure.com, not endpoint endpoint-example-dev-h2a3adekfjkxgrfk.a01.azurefd.net
查看文档我发现
Ensure that the certificate order is leaf->intermediate->root, otherwise the controller will not be able to import the certificate, and you'll see this error in the log
(之前的错误),但我不知道如何修复它。我不是专家,入口和其他组件是使用舵图创建的。 ingress 的 tsl 部分被注释,这意味着(我猜)证书是自动生成和自签名的
查看秘密时,我得到一个列表:
NAME TYPE DATA AGE
cert-manager-webhook-ca Opaque 3 304d
dev-example-ingress-nginx-admission Opaque 3 304d
letsencrypt Opaque 1 304d
sh.helm.release.v1.cert-manager.v1 helm.sh/release.v1 1 304d
sh.helm.release.v1.dev-exing.v1 helm.sh/release.v1 1 304d
sh.helm.release.v1.dev-exing.v2 helm.sh/release.v1 1 304d
sh.helm.release.v1.dev-exing.v3 helm.sh/release.v1 1 293d
我找不到解决办法
这是因为入口控制器提供的 SSL 证书与预期的域不匹配,或者其信任链存在问题。
是什么让我这么想?
该错误表明证书对于 example-aks-dev.brazilsouth.cloudapp.azure.com 有效,但对于预期的域端点-example-dev-h2a3adekfjkxgrfk.a01.azurefd.net 无效。这表明证书的 CN 或 SAN 不匹配。
如何解决?
通过 使用 Let's Encrypt 提供的有效 SSL 证书,通过 cert-manager 进行管理。
安装 cert-manager,它将自动处理 Let's Encrypt 的 SSL 证书颁发。
确保您的域名指向 NGINX Ingress Controller 的外部 IP。您可以使用
检索IP地址更新您的 DNS 记录以反映此 IP。
接下来创建一个ClusterIssuer以允许证书管理器相应地颁发证书
取消注释入口配置中的 TLS 部分并定义您的域和证书密钥。 入口资源
类似这样的-
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
rules:
- host: dev.perfai.us
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
tls:
- hosts:
- dev.perfai.us
secretName: dev-perfai-us-tls
更新 Ingress 资源后,cert-manager 应自动向 Let's Encrypt 请求证书。