将nginx代理到ingress-nginx以进行迁移

时间:2018-08-04 17:47:01

标签: curl nginx kubernetes kubernetes-ingress

上下文

我正在从传统的docker主机迁移到kubernetes集群。

我希望在迁移期间保持服务的连续性。

为此,我将本地nginx代理到远程ingress-nginx。然后,我更新dns记录。这是一个不错的设置,有两个原因:

  • dns传播时流量继续流动
  • 我可以在ingress-nginx中生成一个让我们加密证书的证书,因此,一旦dns传播,我的客户便会获得适当的证书

在此期间,没有生成证书,nginx将获得默认的自签名证书。我知道,所以我想对此进行验证,但我无法做到这一点。

最小问题

无需过多讨论nginx配置,我们只能重现curl的问题。

这是我获取远程自签名证书的方式:

openssl s_client -showcerts -servername standard.ingress.indie.host -connect standard.ingress.indie.host:443 < /dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p' > server.pem

我希望以下命令能够正常工作:

curl --cacert ./server.pem https://standard.ingress.indie.host

但是没有。.我想知道我在做错什么,如果您能提供帮助,那太好了!谢谢!

PS:这是真正的主机,因此您可以进行测试,该问题是实时存在的。

1 个答案:

答案 0 :(得分:0)

我认为有两件事阻止curl命令按此顺序工作:

  1. X509v3 Basic Constraints: critical CA:FALSE
  2. X509v3 Subject Alternative Name: DNS:ingress.local

O=Acme Co, CN=Kubernetes Ingress Controller Fake Certificate证书不是CA,它是自签名的。因此,据我所知,--cacert no 值将表示X509层次结构中的“父”,并使curl能够信任CA证书的子证书。

但是,即使为该证书有一个假设的颁发CA,也只会为ingress.local的SAN颁发证书,而standard.ingress.indie.host肯定是不匹配的。

我无法从您的问题中得知是否curl --insecure是您的选择,还是您只是使用curl来指示浏览器正在发生的不良SSL结果(谁不容易拥有{{ 1}})。


话虽如此,我相信有可能实际生成一个伪造的CA,然后针对它颁发证书,将其安装在nginx中,然后将伪造的CA馈送到--insecure(或者,如果需要,将CA安装到操作系统的受信任证书存储中。

如果有更多细节对您有所帮助,请进行后续操作。