Kubernates、Ingress 控制器和证书

Kubernates, Ingress controller and certificate

提问人:Dr.Gonzo 提问时间:11/16/2023 最后编辑:Dr.Gonzo 更新时间:11/19/2023 访问量:61

问:

早上好, 我的问题是部署我的应用程序。在解释我的问题之前,我给你一个背景:

  • 我有.net rest api应用程序
  • 我的应用程序范围是为最终用户制作中间件而不是另一个应用程序(MotherAPP)
  • 我的应用程序向我的 SPA 应用公开 REST API(面向最终用户)
  • 我的应用程序公开了 2 个 SOAP 服务,以允许 MotherAPP 向我发送通知

现在,MotherAPP强制我为这个SOAP服务创建自签名证书。这样一来,与MotherAPP之间的通信是安全的。我的证书有公用名 (CN):xxxxxxx(CN 名称是从 MotherAPP 强制的。我无法更改它)

我想在 kubernates/docker 上部署我的应用程序。

我的问题是:

  • 我构建了我的“部署”。此时此刻只有一个副本
  • 我构建了我的 clusterIP 服务以将我的 POD 暴露到集群中
  • 我想公开两个入口控制器。一个用于我的 API,带有我的域提供商的证书,另一个用于自签名证书。

我安装了 nginx 控制器,但似乎不可能构建一个入口控制器,其主机与证书的通用名称不同。Ingress Controller 不返回该证书。nginx 返回的错误是:

“X509:证书对任何名称都无效,但希望匹配 [主机]”

如何使用我的自签名证书在外部公开我的集群?

我希望找到我的想法的解决方案或替代方案

更新:我尝试安装 minikube,并按照谷歌步骤创建入口控制器和入口 [minikube 指南][1]

当我添加证书和注释以绕过公用名检查入口控制时,返回但默认的 kubernates 证书。

用于绕过检查的注释包括:

  • nginx.ingress.kubernetes.io/proxy-ssl-verify:“关闭”
  • nginx.ingress.kubernetes.io/proxy-ssl-server-name:“fe.com”
  • nginx.ingress.kubernetes.io/proxy-ssl-name:“fe.com”
Kubernetes NGINX 自签名证书 入口控制器

评论


答:

1赞 Yvan G. 11/18/2023 #1

您能否尝试此注释 nginx.ingress.kubernetes.io/proxy-ssl-name 然后放置自签名证书的 CN。确保您还使用注释 nginx.ingress.kubernetes.io/proxy-ssl-verify 然后设置为“关闭”。

如果这些注解不起作用,您也可以点击此链接作为有关如何将自签名证书配置为 nginx-ingress 的指南。该链接使用 nginx-ingress 和自签名证书作为此配置的示例。

0赞 findmyname 11/19/2023 #2

我想我有点理解你想要实现的目标。请阅读下面的内容。

我想公开两个入口控制器。一个用于我的 API,带有我的域提供商的证书,另一个用于自签名证书。

您很少需要两个 Ingress Controller。您很可能需要一个 Ingress Controller 和两个 Ingress 资源。您可以在此处找到有关差异的解释。此外,这里是 Ingress Class 官方文档的链接

拥有 Ingress Controller 后,需要创建 TLS Kubernetes 密钥并部署 Ingress 资源。您需要在入口 TLS 配置中指定密钥名称。可以在 Ingress 的官方 Kubernetes 文档中找到示例。