Cloud Foundry通过https实现容器到容器的网络连接



我们有两个应用程序在ibm云计算代工平台上运行(appA和appB(。appA通过容器到容器的网络访问appB,而appB也可以通过Gorouter路由从外部访问。问题是,虽然我们的应用程序公开了http-8080,但一切都很好。

现在我们必须通过https进行容器到容器的网络连接。我们将应用程序配置为公开https-8080。8080用作https://docs.cloudfoundry.org/devguide/custom-ports.html声明:

By default, apps only receive requests on port 8080 for both HTTP and TCP routing, 
and so must be configured, or hardcoded, to listen on this port

容器到容器的网络现在使用https可以正常工作。但是我们不能再通过外部Gorouter路由使用appB了。

按照我们的期望,最好的方式是什么?

这个问题没有一个好的答案,至少在我写这篇文章的时候是这样。

不过,你确实有几个选择:

  1. 手动为内部路由设置HTTPS。为此,您需要使用所选应用程序/服务器的说明来配置HTTPS。然后使用构建包提供的任何功能将此确认注入到应用程序容器中。这还需要您将TLS证书与应用程序捆绑并推送。如果您选择此选项,平台将不会为您提供TLS证书。

    使内部和公共路由都工作的诀窍是,您需要应用程序同时侦听端口8080和您为HTTPS流量选择的端口。只要您继续在端口8080上接收HTTP流量,那么您的公共路由就应该继续工作。

  2. 如果您想要一个快速但不理想的解决方案,可以使用端口61001。对于较新版本的Cloud Foundry,Envoy使用此端口通过HTTPS接受应用程序的流量。Envoy然后通过8080端口上的HTTP将请求代理到您的应用程序。您也可以将此端口用于容器到容器的通信,但是TLS证书上配置的使用者名称与您的路由不匹配。

    下面是一个主题名称的示例。

    subject: OU=organization:639f74aa-5d97-4a47-a6b3-e9c2613729d8 + OU=space:10180e2b-33b9-44ee-9f8f-da96da17ac1a + OU=app:10a4752e-be17-41f5-bfb2-d858d49165f2; CN=b7520259-6428-4a52-60d4-5f25
    

    因为它使用这种格式,您需要让客户端忽略证书使用者名称匹配错误(这并不理想,因为这会削弱HTTPS(,或者创建一个自定义的主机名匹配器。


值得一提的是,我认为您不想也不需要更改端口。如果您的应用程序不灵活,无法在8080端口上侦听,通常会使用此端口。它会更改入站通信的端口。由于您只使用C2C网络,因此不需要该选项。

据我所知,你想要的是C2C流量的HTTPS。在这种情况下,公共交通并不重要。它仍然可以通过Gorouter到达8080端口。对于您的集装箱到集装箱运输,您可以选择任何您想要的端口。您只需要确保您选择的端口设置了允许该流量的网络策略(默认情况下,所有C2C流量都被阻止(。一旦设置了网络策略,您就可以直接通过指定的任何端口进行连接。

相关内容

  • 没有找到相关文章

最新更新