我们正在AWS中实现一种微服务架构。我们有几个EC2实例,其中的微服务部署在不同的端口上。我们还有一个面向应用程序负载均衡器的互联网,它根据端口将不同的服务路由到不同的服务。
eg:
xxxx-xx.xx.elb.amazonaws.com:8080/ go to microservice 1
xxxx-xx.xx.elb.amazonaws.com:8090/ go to microservice 2我们需要有一个域名而不是ELB,端口不应该公开通过域名以及。几乎我找到的关于53号路由的所有资源都使用别名,它执行以下操作:
xx.xxxx.co.id -> xxxx-xx.xx.elb.amazonaws.com or
xx.xxxx.co.id -> 111.111.111.11 (static ip)( 1)我们是否需要为每项微型服务提供不同的域名?
2)如何使用别名将域指向ELB的特定端口?
3)如果域来自AWS以外的其他提供者,是否可以使用此设置。
发布于 2017-01-24 12:15:41
重要更新
由于这个答案是最初编写的,所以应用程序负载均衡器传入请求的标头。
现在可以使用传入的主机头将请求路由到特定的实例和端口。
此外,ALB引入SNI支持允许您将多个TLS (SSL)证书与单个均衡器相关联,并且在协商TLS时,将根据客户端提供的SNI自动选择正确的证书。来自的多域和通配符证书也可以用于ALB。
基于这些因素,不需要单独的端口或不同的侦听器--只需为每个服务分配主机名和/或路径前缀,并将这些模式映射到适当的实例目标组。
原来的答案不再准确,但如下所示。
1.)我们是否需要为每个微服务单独的域名?
不,这帮不了你。ALB不解释附加到传入请求的主机名。
同一域中单独的主机名也不能直接实现您的目标。
2.)如何使用别名将域指向ELB的特定端口?
域不指向端口。主机名不指向端口。DNS仅用于地址解析。互联网上的每一个地方都是如此。
3.)如果域来自AWS以外的其他提供程序,是否可以使用此设置。
这不是AWS的限制。DNS根本不是这样工作的。
服务端点不知道指向它的DNS记录。DNS条目本身严格用于发现可用于访问端点的IP地址。之后,端点实际上不知道任何关于DNS的信息,也无法通过DNS告诉浏览器使用不同的端口。
对于HTTP,隐式端口为80。对于HTTPS,是443。除非URL中提供了一个端口,否则这些端口是唯一可用的端口。
但是,在HTTP和HTTPS中,每个请求都带有一个Host:头,由web浏览器与每个请求一起发送。这是地址栏中的主机名。
为了区分到达设备(如ELB/ALB)的不同主机名的请求,端点上的设备必须解释传入主机头并将请求路由到提供该服务的后端系统。
ALB目前不支持此功能。
但是,ALB支持基于路径前缀选择端点。所以microservices.example.com/api/foo可以路由到一组服务,而microservices.example.com/api/bar可以路由到另一组服务。
但是ALB不直接支持主机头的路由。
在我的基础架构中,我们使用ELB或ALB的组合,但是负载均衡器背后的实例是而不是应用程序。相反,它们是运行HAProxy负载均衡器软件并将请求路由到后端的实例。
重要配置元素的一个简单示例如下所示:
frontend main
use_backend svc1 if { hdr(Host) -i foo.example.com }
use_backend svc2 if { hdr(Host) -i bar.example.com }
backend svc1
server foo-a 192.168.2.24:8080
server foo-b 192.168.12.18:8080
backend svc2
....ELB终止SSL并随机选择代理,代理检查Host:头,并选择将请求路由到的后端(一组或多个实例)。它是ELB和应用程序之间的一个薄薄的层,它通过检查主机头或请求的任何其他特性来处理请求路由。
这是一种解决方案,但这是一种有点高级的配置,取决于您的专业知识。
如果您正在寻找一个开箱即用、无服务器、以AWS为中心的解决方案,那么答案实际上是在CloudFront中找到的。是的,它是一个CDN,但它还有其他几个应用程序,包括作为反向代理。
你的问题解决了。
你看到我在那做了什么吗?
对于您配置的每个主机名,一个专用的CloudFront发行版在标准端口(80/443)上接收请求,并且--基于哪个发行版与主机头匹配-- CloudFront将请求路由到相同的 ELB/ALB主机名,但使用自定义端口号。
发布于 2017-10-29 18:27:21
我认为他有可能建立他所描述的东西。我在同一条船上待了一段时间,这里有一些可供你考虑的选择:
我没有使用SLA,但这肯定会指向那个方向。
https://stackoverflow.com/questions/41821505
复制相似问题