Azure nginx 控制器:验证 SSL 证书时出现意外错误

问题描述 投票:0回答:1

当使用 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

我找不到解决办法

azure azure-aks nginx-ingress
1个回答
0
投票

这是因为入口控制器提供的 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 证书颁发。

enter image description here

确保您的域名指向 NGINX Ingress Controller 的外部 IP。您可以使用

检索IP地址

enter image description here

更新您的 DNS 记录以反映此 IP。

接下来创建一个ClusterIssuer以允许证书管理器相应地颁发证书

enter image description here

取消注释入口配置中的 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

enter image description here

更新 Ingress 资源后,cert-manager 应自动向 Let's Encrypt 请求证书。

© www.soinside.com 2019 - 2024. All rights reserved.