问题标签 [aws-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 - 如何从 AWS 负载均衡器获取 HTTP 协议版本
我正在尝试在 AWS Classic Load Balancer 后面构建反向代理,并且我想使用Via
标头。
据我了解 Via,我应该添加协议版本(例如HTTP/1.1
或只是1.1
)以指示上游客户端的请求协议版本。
但是,我在AWS 文档中没有看到负载均衡器将该信息传递给我的 EC2 实例的任何地方。事实上,显然没有X-Forwarded-Proto-Version
标题这样的东西。
那么如何从 AWS Classic 负载均衡器后面知道协议版本呢?新的 Application Load Balancer 怎么样?如果经典版不能做到这一点,我可以升级。
编辑(2019 年 4 月):我们因为其他原因升级到 Application Load Balancer (ALB),我可以确认 ALB 不发送Via
标头,也没有任何其他包含有关客户端信息的标头发送到 ALB HTTP 版本。但是 ALB(和 CLB)是代理,它们应该包含Via
标头,对吗?
amazon-web-services - 以编程方式编辑 AWS Application Load Balancer 侦听器规则
有没有办法以编程方式编辑 Application Load Balancer 的侦听器规则(例如主机名)?
grpc - Istio grpc 负载均衡在网格外
只是为了上下文,我有这个设置:
我有两个示例应用程序(客户端和服务器),客户端通过 grpc 持久连接向服务器发送请求,服务器返回其私有 IP。
我让它工作了,但是客户端总是向同一个应用程序发送请求,而不是在它的两个实例之间循环。
如果场景发生在网格内部而不是外部,则循环有效。我试图查看文档以找到一些东西,但这些示例都是关于 mysql 服务器的。
我在没有 istio 的情况下进行了测试,仅应用程序将其连接指向 envoy(将 envoy 配置为代理到 aws elb 的连接)并且发生了循环。我不知道为什么在 istio 控制流量时不会发生这种情况。
问题是,有谁知道如何在 istio 中为外部服务轮询 grpc 请求(相同的连接)?
谢谢
django - AWS ALB + Django + Gunicorn +- Nginx?
我正在 AWS 中构建一个环境来托管 django 应用程序。我想弄清楚我是否应该使用 nginx 作为构建的一部分。
出于示例/比较目的,我在下面列出了一些不同的环境。所有环境都使用 AWS ALB。
环境 1
ALB -> dockercontainer 运行 django
- +使用内置的 django 网络服务器,静态文件工作
- -inbuilt django webserver 不用于生产用途
环境 2
ALB -> dockercontainer 运行 django/gunicorn
- +使用 gunicorn(不是 django 网络服务器)
- -静态文件不工作
环境 3
ALB -> dockercontainer 运行 django/gunicorn + nginx
注意:我还没有测试过这个配置。
- +使用 gunicorn(不是 django 网络服务器)
- +使用 nginx
- 静态文件应该可以工作
我阅读了这篇stackoverflow 帖子并了解了 gunicorn 与 nginx 的不同角色。
一位同事告诉我,我只需要 ENV 2,我应该能够用它来提供静态文件,ALB 提供了与 NGINX 类似的功能。这个对吗?
amazon-web-services - AWS - WebSockets 未通过 HTTPS 连接
我在 aws elastic beanstalk 上部署了 django Web 应用程序,并且我也在其中一部分使用 websockets,我已经安装了应用程序负载均衡器,它应该默认支持 websockets
https://aws.amazon.com/elasticloadbalancing/details/
但是在建立连接时(仅在 HTTPS 中)我收到了这个
WebSocket 在连接建立之前关闭
HTTP没有问题,它工作得很好
这是负载均衡器配置
这是我在 js 中的连接方式
- 端口 5000 是 daphne 运行我的 django 应用程序的地方
和我的 apache 配置
和 ssl_config
rest - AWS ALB 后面的微服务(ish)设置中的健康检查路由组织
如何在 ALB 背后的几个服务之间命名健康检查路由?
我正在将我的 API 和数据库移动到 AWS。在搬家之前,我将我的单体 REST API 拆分为四个服务:
- 公共 API(应用程序和网站连接到的 API)
- 管理 API(用于管理网站)
- 消息传递 API(用于与应用程序实时通信的 Web 套接字服务器)
- 工人(基于队列的任务处理器)
我现在正试图找出路线的良好组织。起初创建了两个子域,api.mydomain.com 和 www.mydomain.com。
我将 api 子域定向到我的 ALB,它仅根据路径路由流量,如下所示:
- “/sockets”-> 消息传递 API
- “/管理员”-> 管理员 API
- “/” -> 公共 API
现在我正在尝试实施健康检查路线。我想将它们命名为“/health”。但健康检查需要针对每个目标群体。由于 ALB 仅基于路径进行路由,因此我不能在多个服务器上拥有 /health。
可能的解决方案:
1.通过子域分离服务
我可以为每个服务创建一个子域,例如: - api.mydomain.com - sockets.mydomain.com - admin.mydomain.com
有了这个设置,我可以在每个服务中都有一个 /health 而不会发生冲突。
2.通过命名分隔健康检查路由
我可以为每个服务命名不同的健康检查路由,例如:
- api.mydomain.com/health-public-api
- api.mydomain.com/health-messaging-api
- api.mydomain.com/health-admin-api
建议?
上述两种解决方案似乎都是可行的,但我想知道其中一个解决方案是否会在稍后咬我,例如添加更多服务时,或者我稍后添加 graphQL API 时。
编辑:
我只是遇到了解决方案 #1 的一个缺点。我的本地 dev-enviromnemt 设置了每个服务 的docker映像和用于路由请求的nginx 。最重要的是,我使用ngrok能够从 Internet 访问开发环境。
我认为很难解决基于子域的服务分离,但我真的不需要开发环境中的 /health 路由,所以我想我可以假装它们不存在。
amazon-web-services - 连接 AWS Api Gateway 和私有 ALB
我的任务是配置 API Gateway 以将流量路由到 Lambda 或负载均衡器(内部,在 VPC 下)。我认为可以使用简单的 HTTP 集成或 AWS 服务为 ALB 创建简单的集成。但经过一段时间的谷歌搜索后,我发现只有一种解决方案 - 配置 NLB,然后使用VPC_Link 集成。在这种情况下,一切看起来都正常。
但是我仍然发现了一些类似这样的文章,其中人们描述了如何在没有 VPC_links 的情况下集成 Api Gateway 和 LB。在我的情况下invalid endpoint address
,将我的内部 ALB 与我的 apigateway 集成时,我总是会看到错误。我想这仅适用于公共资源(面向互联网的 LB)?
问题的第二部分。当我配置 VPC_link 时,我仍然需要为证书检查和其他东西提供一些集成端点。但看起来这个端点仍然必须是可公开访问的?问题是我在 ALB 下的服务有多个端点,我需要在这个端点提供路径,Endpoint URL
并且这个端点应该是公共的,正如我现在看到的那样。因此,出于测试原因,我提供了我们需要执行的公共资源的 url 和端点路径。这可行,但对我来说看起来太丑了。可能有任何漂亮的解决方案。
amazon-web-services - 如何在具有私有拓扑和内部负载平衡器的 AWS 上连接到我的集群?
我正在使用以下命令创建集群:
kops 创建集群 --zones us-west-1c --master-size=m4.large --node-size=m5.large ${NAME} --associate-public-ip=false --topology private --api- loadbalancer-type internal --networking calico --vpc vpc-xxxxxxxx --cloud-labels="Creator=revor,Description=YM k8 cluster,ENV=int,Name=SMV_INT_YMK8,Requestor=Rey Reymond,code=5483"
集群在 aws 中创建。到目前为止,一切都很好。但问题是,当我跑步时,kops validate cluster
我得到:
验证期间验证集群 xxx.xxx.xx 出现意外错误:错误列出节点:获取https://api。xxx.xxx.xx/api/v1/nodes:拨号 tcp 172.30.xx.xx:443:getsockopt:连接被拒绝
当我跑步时,kubectl get nodes
我得到:
无法连接到服务器:拨打 tcp 172.30.xx.xx:443: i/o timeout
另外,当我跑步时,ssh -i ~/.ssh/id_rsa admin@api.xxx.xxx.xx
我得到:
sh:连接到主机 api。xxx.xxx.xx 端口 22:连接被拒绝
我的问题是为什么我无法连接到我的集群以及为什么会出现上述错误?
如上面的命令所示,我的集群被定义为具有私有拓扑,没有公共 IP 地址和内部负载均衡器。我想知道这是否意味着我不应该能够连接到我的集群并且预期会出现上述错误?
amazon-web-services - Aws 证书管理器 api 不显示导入的证书
虽然证书管理器 UI 显示我导入的证书状态为“已发布”,但当尝试从 ELB(应用程序 lb)使用它时,我得到:“没有可用的证书”(对 api 的 POST 请求返回空列表)
此外,当我运行 aws acm list-certificates --max-items 10 我没有得到导入的证书,只有我的第二个(未导入)一个
有什么想法吗?我应该配置的导入证书上有设置吗?