我想在同一空间/组织内的两个应用程序之间创建一条安全的内部路由。永远都不可能从外部访问Node.js应用程序。我的Java应用程序通过HTTP连接到Node应用程序(在express上运行)。
我现在已经尝试通过创建名为 private static void CallAsynch2()
{
var tasks = new List<Task<KeyValuePair<int,string>>();
for (int i = 0; i < Iterations; i++)
tasks.Add(Task<KeyValuePair<int, string>>.Factory.StartNew(GetValueAction(i)));
}
private static Func<KeyValuePair<int, string>> GetValueAction(int i)
{
return new KeyValuePair<int, string>(i, i.ToString());
//return ClassLibraryService.RandomValue.GetRandomValue(i);
}
的路由并将其分配给Node应用程序来设置所需的配置。下一步,我在Java应用程序的网络配置中打开了端口(我尝试过example-route.apps.internal
,443
,80
)(目标是Node app) )。我重新处理了两个应用程序。
然后,我打开了与链接8080
的Java连接。我也尝试使用http://example-route.apps.internal/test123
。结果是一样的。 Java拒绝使用此URL。
现在,以下问题:
谢谢!
答案 0 :(得分:3)
我认为你快到了。
然后,我打开了与链接http://example-route.apps.internal/test123的Java连接。我也尝试过使用https。结果是一样的。 Java拒绝使用此URL。
您应该使用http://example-route.apps.internal:8080/test123
。您的应用程序设置为监听$ PORT,在当前版本的CF中,该端口始终为8080。
通常,您不必担心这一点,因为您的流量通过Gorouter进入,后者为您转换(映射外部端口80->内部8080)。对于内部路线,交通是直接的,因此没有任何变化。因此,您需要在URL中使用端口8080。
或者,您可以使用诸如Eureka或Consul之类的服务发现机制,但这不是必需的。在这种情况下,服务将知道它正在监听8080,并将其注册到注册表中。
就HTTPS而言,这很棘手。您的应用仅监听80 / HTTP。您必须将其更改为侦听443 / HTTPS,但随后需要证书和其他服务器配置。从技术上讲这是可行的,但它完全是蠕虫。
在某些较新的版本中,Envoy存在并且可以将HTTPS流量接受到容器中,可以使HTTPS变得更容易,但是它仍然不是灌篮(至少在撰写本文时)。我希望将来会更好。
我应该以某种方式解决此内部DNS吗?
内部DNS可以帮助您找到其他应用程序,而不是端口。否则,您将需要管理经常更改的IP地址,并且需要诸如Eureka或Consul之类的东西。
如果仅使用env变量的端口,哪个端口是正确的端口?
见上文。
我应该如何从其他应用程序读取此端口?
此刻始终是8080,已经使用了很多年。它不太可能更改,因此您可以硬编码或安全地将其设置在配置文件中。
如果使用HTTP代替HTTPS,则通信的安全性如何? (我认为内部无法使用HTTPS)。 它和外部的HTTPS连接一样安全吗?哪些设备在之间,连接能走多远?
无法从外部访问流量,因为在某些情况下甚至在最坏的情况下流量都不会离开Cell,但在两个Cell之间却可以看到流量,因为流量未经加密。这意味着您需要对可以访问内部流量的CF提供商更加信任。
如果是HTTPS,则只有拥有密钥的人才能解密它。您仍然必须信任您的提供商,因为他们可能会获得密钥并使用它来解密流量。对于他们来说,与不加密流量相比,这将是更多的工作。
希望有帮助!