1

我们在 ibm cloud cloud Foundry 上运行了两个应用程序(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。

按照我们的预期,让它全部启动并运行的最佳方式是什么?

4

1 回答 1

0

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

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

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

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

  2. 如果您想要一个快速但不理想的解决方案,您可以使用端口 61001。对于较新版本的 Cloud Foundry,Envoy 使用此端口来接受通过 HTTPS 传输到您的应用程序的流量。然后,Envoy 通过 HTTP 通过端口 8080 将请求代理到您的应用程序。您也可以将此端口用于容器到容器的流量,但是 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),或者可能创建自定义主机名匹配器。


对于它的价值,我认为您不需要或不需要更改 port。如果您的应用程序不灵活且无法侦听端口 8080,则通常使用该端口。它会更改入站流量的端口。由于您只使用 C2C 网络,因此您不需要该选项。

据我了解,您想要的是 C2C 流量需要 HTTPS。在这种情况下,公共交通无关紧要。它仍然可以通过 Gorouter 到达 8080 端口。对于您的容器到容器的流量,您可以选择任何您想要的端口。您只需要确保您选择的端口已设置网络策略以允许该流量(默认情况下所有 C2C 流量都被阻止)。设置网络策略后,您可以直接通过您指定的任何端口进行连接。

于 2020-03-18T12:57:40.463 回答