在一组实例上负载平衡多个容器化应用程序
Load Balancing multiple Containerized Applications on a Group of Instances
假设情况是您有 3 个容器化 (docker) Web 应用程序使用不同的端口 -- 1234、5678、7890。
是否可以让应用程序负载均衡器将来自 app1.example.com、app2.example.com 和 app3.example.com 的 HTTP/HTTPS 流量转发到 EC2 目标组上的特定端口?
示例:
来自 app1.example.com 的所有流量都应转到 EC2 目标组的端口 1234。
此外,由于 ELB 将具有多个子域,因此为此设置 SSL 证书的方法是什么?
为此,首先您需要创建 3 个单独的目标组,每个目标组都包含您要重定向到的相同 EC2,由每个应用程序的目标端口(1234、 5678 等)。
执行此操作后,您可以创建一个具有 2 个侦听器的新 ALB,一个用于端口 80 上的 HTTP,另一个用于端口 443 上的 HTTPS。如果您通过 AWS 控制台创建它,设置您要使用的可用性区域,为 HTTPS 侦听器选择安全策略和证书,然后选择或创建安全组。对于路由配置,只需创建一些新的任意目标组。我们稍后将简单地删除它(向导不会让您 select 在创建时使用适当的选项)。
创建 ALB 后,我们需要编辑 2 个侦听器的规则。所以 select ALB,转到侦听器选项卡,然后单击其中一个侦听器旁边的 'View/edit rules' link(注意这不是 select 侦听器并单击'Edit',这是完全不同的东西)。现在在这个新屏幕上,单击铅笔以编辑当前的默认规则,删除当前的 'THEN' 操作,并将其替换为 'Return fixed response...'。对于此处的字段,我只需将响应代码设置为 400,响应 body 类似于 'invalid host header'。仅当客户端尝试使用我们将明确设置的主机以外的主机访问此负载均衡器时,才会返回此信息。
现在单击 'Update' 按钮保存对此默认规则的更改,然后单击“+”按钮在默认规则之上添加新规则。对于此新规则,添加条件 'Host is...',并将其设置为应用域之一(即 app1.example.com)。现在将此规则的条件添加到 'Forward to...',以及 select 您之前创建的此应用程序的目标组。
现在为您需要为此负载均衡器服务的所有应用重复第 4 步
现在为 ALB 上的另一个侦听器重复步骤 3-5
您现在可以通过控制台中的向导删除之前在创建 ALB 期间创建的额外目标组。除此之外,你应该完成了。
注意:无法让单个 HTTPS 侦听器使用多个不同的证书,即使您可以根据主机 header 进行路由。为了使 SSL 在多个不同的应用程序中有效,您将需要使用同时对所有应用程序有效的通配符证书。如果您使用 ACM,您可以生成免费的通配符证书并在 ALB 上使用它们。
编辑 2019 年 9 月 12 日:
AWS Now 提供带有 NLB 的 SNI,这意味着您现在可以为单个负载均衡器使用多个不同的 TLS 证书:https://aws.amazon.com/about-aws/whats-new/2019/09/elastic-load-balancing-network-load-balancers-now-supports-multiple-tls-certificates-using-server-name-indication/
假设情况是您有 3 个容器化 (docker) Web 应用程序使用不同的端口 -- 1234、5678、7890。
是否可以让应用程序负载均衡器将来自 app1.example.com、app2.example.com 和 app3.example.com 的 HTTP/HTTPS 流量转发到 EC2 目标组上的特定端口?
示例: 来自 app1.example.com 的所有流量都应转到 EC2 目标组的端口 1234。
此外,由于 ELB 将具有多个子域,因此为此设置 SSL 证书的方法是什么?
为此,首先您需要创建 3 个单独的目标组,每个目标组都包含您要重定向到的相同 EC2,由每个应用程序的目标端口(1234、 5678 等)。
执行此操作后,您可以创建一个具有 2 个侦听器的新 ALB,一个用于端口 80 上的 HTTP,另一个用于端口 443 上的 HTTPS。如果您通过 AWS 控制台创建它,设置您要使用的可用性区域,为 HTTPS 侦听器选择安全策略和证书,然后选择或创建安全组。对于路由配置,只需创建一些新的任意目标组。我们稍后将简单地删除它(向导不会让您 select 在创建时使用适当的选项)。
创建 ALB 后,我们需要编辑 2 个侦听器的规则。所以 select ALB,转到侦听器选项卡,然后单击其中一个侦听器旁边的 'View/edit rules' link(注意这不是 select 侦听器并单击'Edit',这是完全不同的东西)。现在在这个新屏幕上,单击铅笔以编辑当前的默认规则,删除当前的 'THEN' 操作,并将其替换为 'Return fixed response...'。对于此处的字段,我只需将响应代码设置为 400,响应 body 类似于 'invalid host header'。仅当客户端尝试使用我们将明确设置的主机以外的主机访问此负载均衡器时,才会返回此信息。
现在单击 'Update' 按钮保存对此默认规则的更改,然后单击“+”按钮在默认规则之上添加新规则。对于此新规则,添加条件 'Host is...',并将其设置为应用域之一(即 app1.example.com)。现在将此规则的条件添加到 'Forward to...',以及 select 您之前创建的此应用程序的目标组。
现在为您需要为此负载均衡器服务的所有应用重复第 4 步
现在为 ALB 上的另一个侦听器重复步骤 3-5
您现在可以通过控制台中的向导删除之前在创建 ALB 期间创建的额外目标组。除此之外,你应该完成了。
注意:无法让单个 HTTPS 侦听器使用多个不同的证书,即使您可以根据主机 header 进行路由。为了使 SSL 在多个不同的应用程序中有效,您将需要使用同时对所有应用程序有效的通配符证书。如果您使用 ACM,您可以生成免费的通配符证书并在 ALB 上使用它们。
编辑 2019 年 9 月 12 日: AWS Now 提供带有 NLB 的 SNI,这意味着您现在可以为单个负载均衡器使用多个不同的 TLS 证书:https://aws.amazon.com/about-aws/whats-new/2019/09/elastic-load-balancing-network-load-balancers-now-supports-multiple-tls-certificates-using-server-name-indication/