无法在 openshift 4.3 路由中实现端到端加密
Not able to achieve end to end encryption in openshift 4.3 route
我们有一个 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
与边缘终端一样,从路由器到 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。
对于重新加密路由,pod 需要配置 TLS 证书,因为它必须响应源自 Openshift 路由器的 TLS 请求。从尝试使用边缘路由时出现的错误可以看出,您已经拥有它。
现在必须使用您要在实际路由中使用的相同主机名创建此 TLS 证书。此 TLS 证书不一定是 CA 签名的证书,但主机名必须与路由匹配。只有这样路由才能将流量转发到您的 pod。
TLS 已经在我们的 AngularJS 应用程序中启用,使用 nodejs 应用程序创建证书和密钥,集群内部 Nginx.Pod 使用 TLS,它由 CA 颁发,这就是证书我们应该为 route.The 输入 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 cluster.Only 的默认域 cluster.Only 我们使用的证书是 --dest-ca-cert
,也可以在openshift-service-ca
命名空间
的秘密 service-serving-cert-signer-sa-token-l42lm
我们有一个 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
与边缘终端一样,从路由器到 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。
对于重新加密路由,pod 需要配置 TLS 证书,因为它必须响应源自 Openshift 路由器的 TLS 请求。从尝试使用边缘路由时出现的错误可以看出,您已经拥有它。
现在必须使用您要在实际路由中使用的相同主机名创建此 TLS 证书。此 TLS 证书不一定是 CA 签名的证书,但主机名必须与路由匹配。只有这样路由才能将流量转发到您的 pod。
TLS 已经在我们的 AngularJS 应用程序中启用,使用 nodejs 应用程序创建证书和密钥,集群内部 Nginx.Pod 使用 TLS,它由 CA 颁发,这就是证书我们应该为 route.The 输入 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 cluster.Only 的默认域 cluster.Only 我们使用的证书是 --dest-ca-cert
,也可以在openshift-service-ca
命名空间
service-serving-cert-signer-sa-token-l42lm