Amazon web services AWS路由53-到应用程序负载平衡器不同端口的域名路由

Amazon web services AWS路由53-到应用程序负载平衡器不同端口的域名路由,amazon-web-services,amazon-ec2,amazon-route53,amazon-elb,Amazon Web Services,Amazon Ec2,Amazon Route53,Amazon Elb,我们正在AWS中实现微服务体系结构。我们有几个EC2实例,它们在不同的端口上部署了微服务。我们还有一个面向internet的应用程序负载均衡器,它根据端口路由到不同的服务 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号公路的几乎所有资

我们正在AWS中实现微服务体系结构。我们有几个EC2实例,它们在不同的端口上部署了微服务。我们还有一个面向internet的应用程序负载均衡器,它根据端口路由到不同的服务

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号公路的几乎所有资源都使用alias,它执行以下操作:

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以外的其他提供商,是否可以使用此设置。

重要更新

因为这个答案最初是写的,所以应用程序负载平衡器

传入主机标头现在可以用于将请求路由到特定实例和端口

此外,允许您将多个TLS(SSL)证书与单个平衡器关联,并且在协商TLS时,将根据客户端提供的SNI自动选择正确的证书。来自Amazon证书管理器的多域和通配符证书也可以与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并随机选择代理,代理检查
主机:
头并选择请求将路由到的后端(一组1个或多个实例)。它是ELB和应用程序之间的一个薄层,通过检查主机头或请求的任何其他特征来处理请求路由

这是一种解决方案,但根据您的专业知识,这是一种稍微高级的配置


如果您正在寻找一个开箱即用、无服务器、以AWS为中心的解决方案,那么答案实际上可以在CloudFront中找到。是的,它是一个CDN,但它还有其他几个应用程序,包括作为反向代理

  • 对于每个服务,从域中选择要分配给该服务的主机名foo.api.example.com或bar.api.example.com

  • 对于每个服务,创建一个CloudFront发行版

  • 配置每个分发版的备用域名以使用该服务分配的主机名

  • 将源域名设置为ELB主机名

  • 将设置为ALB上服务的特定端口,例如8090

  • 配置默认缓存行为以转发所需的任何标头。如果不需要CloudFront的缓存功能,请选择“转发所有头”。如果需要,还可以转发查询字符串和cookie

  • 在Route 53中,创建foo.api.example.com作为特定CloudFront发行版主机名的别名,例如dxxxexample.CloudFront.net

你的问题解决了

你看到我在那里做了什么吗


对于您配置的每个主机名,专用CloudFront发行版在标准端口(80/443)上接收请求而且--根据主机头匹配的分布--CloudFront将请求路由到相同的ELB/ALB主机名,但有一个自定义的端口号。

我认为他有可能构建他所描述的内容。我在同一条船上呆了一段时间,这里有一些选项供您考虑:

  • 在R53中,创建一个托管分区-一个