【发布时间】:2016-09-12 05:08:21
【问题描述】:
我们正在尝试托管一个服务,该服务需要在 GCE 上的同一地址上公开至少两个不同的端口。
在我们的例子中,这是 GitLab,它至少应该提供 SSH(端口 22)和 HTTPS(端口 443)访问。但实际上,这可能是任何需要同一域或 IP 地址上的两个或多个端口的服务。
该服务在 GCE VM 实例中运行良好,我正在寻找最明智的方式将其公开给全世界。当然 HTTPS 是强制性的,对于像这样的任何生产部署。出于方便和安全原因,我不想在实例上处理 TLS。
我们发现公开此服务的所有不同选项都不完美:
- 在实例上使用公共 IP
- 使用 L4 负载均衡器 (TCP)
- 使用 L7 负载平衡器 (HTTPS)
在实例上使用公共 IP
这意味着直接暴露服务端口。在这种情况下,VM 上的服务需要绑定到众所周知的端口(22、443)。在我们的例子中,这有点烦人,因为服务在 Docker 中运行,并且端口 22 与主机上的 SSH 服务器发生冲突。所以我们必须为主机使用另一个 SSH 端口并自己处理 TLS 证书。不太好。
使用 L4 负载平衡器 (TCP)
基本上,同样的限制也适用,因为 L4 LB 似乎将流量转发到它接收流量的相同端口。此选项还为 LoadBalancer 配置增加了相当多的开销。而且我们仍然需要在实例上管理 HTTPS。
使用 L7 负载平衡器 (HTTPS)
这是一个相当灵活的方法,但我们会失去提供 SSH 的能力,这对我们来说是不行的。
我的问题:有没有更好的方法在 GCE 上公开这种服务?
在 AWS 上,您可以只拥有一个带有多个侦听器(HTTPS 和 TCP:22)的 ELB,指向单个实例上的任意端口。 ELB 也可以为您终止 HTTPS。我真的无法想象 GCE 不提供这样的功能。
【问题讨论】:
标签: gitlab google-compute-engine google-cloud-platform