【问题标题】:Proxy nginx to ingress-nginx for migration purpose将 nginx 代理到 ingress-nginx 以进行迁移
【发布时间】:2018-08-04 17:47:01
【问题描述】:

上下文

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

我希望在迁移期间继续提供服务。

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

  • 在 dns 传播时流量继续流动
  • 我可以在 ingress-nginx 中生成一个 let's encrypt 证书,因此一旦 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:这是真正的主机,所以你可以测试,问题是实时的。

【问题讨论】:

    标签: curl nginx kubernetes kubernetes-ingress


    【解决方案1】:

    我认为有两件事阻止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 结果(他们不容易拥有--insecure) .


    话虽如此,我相信实际上可以生成一个假 CA,然后针对它颁发证书,将其安装在 nginx 中,然后将假 CA 提供给 curl --cafile(或者,如果需要,安装CA 到操作系统的受信任证书存储中)。

    如果有更多对您有帮助的细节,请继续跟进。

    【讨论】:

    • 非常感谢您的洞察力。我想你已经搞定了。我主要关心的是验证上游服务器的身份。我不想使用insecure 标志。我现在很好奇,我会同时尝试看看哪个参数对 curl 很重要。
    猜你喜欢
    • 2021-05-13
    • 2021-12-08
    • 2021-03-26
    • 2014-06-04
    • 2020-01-08
    • 2019-07-02
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多