问题标签 [aws-application-load-balancer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
amazon-web-services - ALB Ingress Kubernetes 安全组注释不起作用
我在security-groups
注释中使用现有的安全组。但是在通过 Ingress 创建 ALB 时,它附加了一个默认 SG。为什么它没有附加我注释中使用的现有 SG。我正在使用alb-ingress-controller
.
amazon-web-services - AWS 负载均衡器将流量路由到具有多个微服务的目标组
我有一个在端口 80 上侦听 HTTP 流量的 ALB,我在 ALB 侦听器中添加了一个目标组,它由一台 EC2 机器组成。我的 EC2 实例在不同的端口上运行多个微服务,例如。App1 在 8080 上运行,App2 在 8001 上运行,App3 在 8004 上运行……EC2 再次在端口 80 上侦听任何通过 ALB 传入的请求。我想根据路径为到 EC2 的传入流量到不同的应用程序端口做一个基于路径的路由,例如,
“/users” -> 8080 上的应用程序;“/get/info”-> 8001 等
. 有没有办法实现它?或者有什么更好的方法来做我正在尝试的事情?现在我已经完成了基于 ip-tables 的路由,将流量从 EC2 的端口 80 路由到单个端口,即 8080,但这仅服务于我众多微服务中的一个。我如何配置它来为所有这些服务?
amazon-web-services - Amazon ALB - 重定向将 http 方法更改为 GET
我有一个 AWS ALB 配置为它应该将https://example.com/api/v1/ * 的请求重定向 (302) 到另一个区域。然而,事实证明,hte AWS ALB 的 REDIRECT 功能正在将所有 http: 方法(POST、PUT、...)更改为 GET - 所以在目标服务器上,我只收到“GET”请求。
现在不知道这是不是
- 预期行为
- AWS 中的一个错误
- 设置问题
任何人都可以帮助解决这个难题吗?
amazon-web-services - 私有子网未与公共通信 - 健康检查失败
我正在尝试实现此博客中描述的以下架构
我有一个使用 ENI(私有 IP 为 10.0.241.85)在私有子网(我们称之为“ subnet-1 ”)中运行的 Fargate 服务。ENI 也有一个弹性 IP,因为如果没有,它就无法从 ECR 中提取图像。我不认为这会很重要吗?我服务中的容器暴露了 3000/4000 端口。然后我将我的 ALB 和 NAT 网关放在公共子网中(我们称之为“子网 2 ”)。ALB 将端口 80/443 上的流量转发到必要的目标组。目标组有2 个针对 ENI 上的私有 IP 的已注册任务(1 个在端口 3000 上,另一个在 4000 上)。据我所知,这应该允许流量,对吗?
对于流出的流量,subnet-1有一条默认路由 ( 0.0.0.0/0 ) 到subnet-2中的 NAT 网关,这应该允许流出,对吗?
所有服务都在同一个VPC 和同一个可用区(如果适用)
这些服务使用了2 个安全组:
- 测试
- api
我们利用临时端口在 2 个安全组之间进行通信
注意:我在这里删除了目的地,但是,是的,目的地是测试安全组
注意:覆盖的路由只是一个对等连接,因此与此无关
据我所知,这两个子网应该能够使用其中服务的私有 IP 进行通信,这就是我在这里所做的。
运行状况检查失败并显示以下通用消息:
任务未通过 ELB 健康检查
我还查看了这个博客以获得更多帮助,但无济于事。
任何帮助将不胜感激 :)
amazon-web-services - 如何使用 Amazon ALB 端口转发在单个 EC2 实例上运行多个服务
我在单个AWS EC2
实例的多个端口上运行多个服务。我一直在使用两个ALBs
来运行这些服务,但我想将它们组合成一个 ALB,根据主机名转发到正确的服务。一个服务是运行端口 80 的节点应用程序,另一个是运行端口 5001 的烧瓶应用程序。
到目前为止,我已经为mywebsite
端口 80 上的节点应用程序和api-service
端口 5001 上的烧瓶应用程序设置了目标组。
我将这些目标组添加到 ALB,my-alb
并设置转发规则,以便端口 80 和 5001 将转发到端口 443。在端口 443 上,我设置转发规则,以便如果主机匹配api.*
,它将转发到目标组api-service
,否则它将默认为my-website
.
我还将我的 alb 设置为 53 号路线的别名,api.mywebsite.com
并www.mywebsite.com
设置了证书。我的两个目标群体的所有健康检查都通过了。
这是问题所在:
www.mywebsite.com
工作正常。我被转发到该https
网站的版本,一切看起来都很好。当我尝试使用api.mywebsite.com
它时,它不会加载并且我收到 504 Bad Gateway 错误。
总而言之,以下是我已完成的步骤:
- 为我的服务设置两个目标组
port 80 and 5001
- 将这两个目标组添加到
ALB
并设置路由规则以重定向到port 443
port 5001
如果主机匹配api.*
其他路由到端口 80 上的服务,则为路由 443 设置转发规则以转发到服务。- 将 ALB 设置为
api.mywebsite.com
和www.mywebsite.com
in的别名route 53
。
任何帮助将不胜感激,谢谢!
编辑:让它工作。
我错误地配置了我的安全组。那是我缺少的步骤:D。一旦我将端口 5001 添加到分配给我的 ALB 和 EC2 的安全组,它就开始正常工作。
谢谢!
amazon-web-services - 如何将 AWS 应用程序负载均衡器配置为超过 25 个 SSL 证书限制
AWS 应用程序负载均衡器有 25 个 SSL 证书安装限制。
我想配置我的弹性 beanstalk 环境,可能有多个负载均衡器,这样我就可以超越这个限制并安装更多证书,每个负载均衡器 25 个。我相信这对大多数 SaaS 开发人员来说是一个有用的问题。
是否有人制作了允许超过 25 个 SSL 证书/域的配置?
一种方法可能是对于未安装在端口 443 上的 HTTPS 侦听器上的主机,我可能会创建一个转发到例如端口 40443 的规则,但是,我需要为每个新的 SSL 证书/主机/添加一个规则租户。此外,我不确定浏览器客户端是否会注意到端口更改并转到 domain.com:40443 而不是隐藏端口。
无论如何,如果您有其他解决方案,我很想听听。
限制是每个“监听器”,所以我尝试在同一个端口 443 上创建一个新的监听器,但这是不允许的。
这是限制页面的参考:https ://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html
apache - 如何在 AWS Elastic Container Service 上运行 Apache 的 Docker 容器中检索客户端 IP?
我有一个运行 Apache 2.4.25 (Debian) PHP 7.3.5 的 Docker 服务器。此容器“托管”在 Amazon Elastic Container Service 中。默认 AWS EC2 位于 AWS 应用程序负载均衡器后面。
我希望能够在 PHP 中获取用户/客户端 IP 地址。
基于我有限的知识,我的假设是这个 IP 地址需要从 ALB 传递到 EC2,然后传递到 Docker 容器,最后由 Apache 获取。
我试图通过尝试在本地计算机上运行的 Docker 容器中获取 IP 来缩短堆栈,但是我仍然无法找到 Docker 获取 IP 并将其传递给 Apache 的方法。
我通常知道您会从 ALB 获得 X-Forwarded 标头,但我无法弄清楚 Docker 如何将其传递给 Apache。
我希望客户端 IP 位于$_SERVER['REMOTE_ADDR']
or中$_SERVER['X_FORWARDED']
。
在 AWS 托管的 Docker 容器
$_SERVER['REMOTE_ADDR']
中包含 VPC 子网中的 IP
$_SERVER['X_FORWARDED']
不存在
amazon-web-services - 带有 ECS 的 AWS 应用程序负载均衡器
我有以下 AWS 设置:
- 具有 2 个 EC2 实例的 ECS 集群,每个实例在不同 AZ 内的自己的子网中运行
- 几个微服务,它们只运行每个任务,因为它们是有状态的
- 一个内部应用程序负载均衡器,每个微服务的目标组按端口映射
现在想象以下场景:服务 1 想要与在另一个 AZ 中的另一个 EC2 实例上运行的服务 2 通信。作为服务 2 的 URL,我使用负载均衡器的 DNS 名称和端口:internal-load-balancer:8082/path
。这是必要的,因为我正在使用滚动部署,因此每次部署后微服务在两个 EC2 实例之间移动。
现在,如果我执行host internal-load-balancer
,我会返回 2 个 IP 地址,一个用于运行在子网 1 中的负载均衡器,一个用于运行在子网 2 中:
- 10.0.0.11
- 10.0.32.11
如果我现在在服务 1 上执行以下 curl 命令:
curl 10.0.0.11:8082/
我找回了网关超时curl 10.0.32.11:8082/
按预期工作,我得到了 200curl 10.0.32.10:8082/
也有效
那么,如果我在同一个子网中使用负载均衡器而不是在另一个子网中,那么为什么这会起作用呢?如果我直接联系其他 AZ 中的 EC2 实例,它也可以工作。问题是 DNS 记录解析为两个 IP 地址,而微服务只是随机使用其中一个,所以我的一半请求在另一半超时。
那么我在这里做错了什么???在此先感谢您的支持:)
amazon-web-services - AWS Application Load Balancer 究竟如何执行运行状况检查?
我在一个位于两个 AZ 中的 ALB 后面有一个 Web 服务器实例(因为 ALB 需要两个 AZ)。一段时间以来,我们在监控中得到了 0.5 个健康实例的结果。
最终,我们能够通过修改安全组规则以允许来自 ALB 安全组的所有流量进入 Web 服务器端口来解决此问题,现在我们的健康检查始终成功。
我的问题是:运行状况检查是否在不同 AZ 中的 ALB 实例之间交替进行?我只是很好奇最终如何通过 0.5 的运行状况检查,我的猜测是,在我们明确允许的安全组规则更改之前,只有一个 ALB 实例能够访问网络服务器实例来自 ALB sg 的端口 80 上的所有流量。