【问题标题】:Setting up development kubernetes cluster with Docker For Mac and SSL使用 Docker For Mac 和 SSL 设置开发 kubernetes 集群
【发布时间】:2019-12-18 14:17:10
【问题描述】:

我正在设置一个 kubernetes 集群以使用 Docker for Mac 进行开发。我有一些私有 grpc 微服务和几个使用 SSL 的 Rails 公共 REST API。我希望我的开发环境尽可能接近生产环境,因此我宁愿不需要特殊的 Dockerfile 来为开发人员构建。有人可以给我一个让 SSL 与我的两个 REST 服务一起工作的分步方法,包括如何信任自签名证书以便这两个服务可以相互通信?我对 SSL 或 TLS 不是很熟悉。

我使用通过以下方式生成的自签名证书让 HTTPS 服务器与浏览器一起工作:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./app1.localhost.key -out ./app1.localhost.crt -subj "/CN=app1.localhost"

然后

kubectl create secret tls app1-tls --key ./app1.localhost.key --cert ./app1.localhost.crt

然后我运行 nginx-ingress 并配置了类似的 Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app1
spec:
  rules:
  - host: app1.localhost
    http:
    paths:
    - path: /
      backend:
        serviceName: app1
        servicePort: 443
  tls:
  - hosts:
    - app1.localhost
      secretName: app1-tls

我已更新我的主机文件以将域映射到本地主机。

通过“您的连接不是私人的”页面中的高级链接接受 Chrome 中的证书,这可以在浏览器中运行。但是,由于证书通常不受信任,因此服务无法相互通信。尝试从一个向另一个发出请求时,我收到 RestClient::SSLCertificateNotVerified 错误。

我在网上找到的很多东西都是指客户端证书和服务器证书,但我不确定如何生成这两个证书(上面我得到一个 .crt 和一个 .key 文件,是为了客户端还是服务器?)。而且我不确定如何信任他们。

【问题讨论】:

    标签: ssl https kubernetes nginx-ingress docker-for-mac


    【解决方案1】:

    如何信任自签名证书以便两个服务可以相互通信?

    这取决于你的 HTTP 客户端,对于 ruby​​,它看起来像:

    File.open( "client_certificate.pem", 'rb' ) { |f| cert = f.read }
    File.open( "client_key.pem", 'rb' ) { |f| key = f.read }
    http_session.cert = OpenSSL::X509::Certificate.new(cert)
    http_session.key = OpenSSL::PKey::RSA.new(key, nil)
    

    Ingress TLS 仅用于服务器,使用自签名证书是个坏主意。

    如果您希望您的两个服务通过 TLS 相互通信,并且不想手动配置 CA/Cert/Key(或称其为证书分发),我推荐 istio,它支持之间的透明 TLS 代理两个豆荚。

    【讨论】:

    • “自签名证书是个坏主意”——这只是为了开发。生产中的设置使用正确签名的证书,但我希望在我的开发机器上设置它而不需要进行任何代码更改。如果所有流量都通过 localhost,有没有办法在主机上批准证书?
    • 另外,即使 istio 不用于生产,您是否建议在开发中使用它?
    • "有没有办法在主机上批准证书?"恐怕没有简单的方法可以信任您机器上运行的所有程序的证书。
    • 您的疑虑解决了吗? here 您可以找到有关自签名证书的更多信息,here 您可以找到如何将其应用于 pod 的信息。如果有帮助,请告诉我。
    • @Hanx 感谢您的回复。但我认为它也需要手动分发证书。
    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2016-10-10
    • 2019-05-04
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多