我们有一个AngularJS应用程序,其中我们有一个nodejs应用程序,仅当HTTPS端口为443时才为服务主机名创建证书和密钥。然后创建的证书在nginx中使用,如下所示:
<% if ENV["HTTPS__ENABLED"] == "true" %>
listen <%= ENV["HTTPS__PORT"] %> ssl;
# These files are generated by the node app
ssl_certificate /cert.csr;
ssl_certificate_key /tls_private_key.csr;
ssl_protocols TLSv1.2;
<% end %>
但是当我在路由中设置443端口并重新加密终止时,它在访问应用程序时出现以下错误
Application is not available
The application is currently not serving requests at this endpoint. It may not have been started or is still starting.
请求甚至没有到达 pod。如果我创建带有边缘终端的路由是错误的
400 Bad Request
The plain HTTP request was sent to HTTPS port
与 Edge 终止一样,路由器到 Pod 之间没有加密。 我无法使用直通终止策略,因为我们的路由中有路径不受直通终止支持。
有人可以让我知道如何在 OpenShift 4.3 中实现端到端加密。我们在这里不使用自定义域。
我正在检查创建重新加密路由的方法oc create route reencrypt --service=frontend --cert=tls.crt --key=tls.key --dest-ca-cert=destca.crt --ca-cert=ca.crt --hostname=www.example.com
但是由于我们不使用自定义域,我们的路由应该使用默认证书和密钥,对吗?所以没有必要提供这些权利吗?我不知道如何为这条路线创建 --dest-ca-cert。
TLS已经在我们的AngularJS应用程序中启用了nodejs应用程序,该应用程序创建证书和密钥,这些证书和密钥由集群内的Nginx.Pod使用TLS,它由CA颁发,这是我们应该放在destinationCACert中的证书。CA 证书是路由器确定它是否可以信任上游 POD 进行 TLS 通信的方式。
我们在创建重新加密路由时使用位于/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
的 ca.cert 作为目标证书。我们在创建路由时选择了 HTTPS 端口。oc create route reencrypt --service=frontend --cert=tls.crt --key=tls.key --dest-ca-cert=destca.crt --ca-cert=ca.crt --hostname=www.example.com
在这里,我们不需要tls.cert和tls.key,因为我们使用的是openshift集群的默认域。我们唯一使用的证书是--dest-ca-cert
它也在openshift-service-ca
命名空间的秘密service-serving-cert-signer-sa-token-l42lm
中找到
对于重新加密路由,Pod 需要使用 TLS 证书进行配置,因为它必须响应源自 Openshift 路由器的 TLS 请求。从尝试使用边缘路由时遇到的错误中,您已经可以明显看出这一点。
现在,必须使用要在实际路由中使用的相同主机名创建此 TLS 证书。此 TLS 证书不一定是 CA 签名的证书,但主机名必须与路由匹配。只有这样,路由才能将流量转发到容器。