【发布时间】: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