问题标签 [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.

0 投票
1 回答
3562 浏览

routing - 路径路由的 AWS 负载均衡器 404 错误

我正在尝试在我的应用程序负载均衡器中配置基于路径的路由。我针对单个 ECS 实例配置了三个目标组,但是当我调用 ALB 上的特定路径之一时,我只得到 404。

我可以直接调用这三个容器(即http://somehost:xxxx),我可以将最后一条规则的目标交换为我的任何目标,所以我认为我的路径搞砸了,但我想不通出去。

以下是 ALB 侦听器规则: HTTP : 80

  1. 路径是 /curly* ==> 转发到 app1-tg
  2. 路径是 /larry* ==> 转发到 app2-tg
  3. 路径是 /moe* ==> 转发到 app3-tg

有没有人有什么建议?

0 投票
1 回答
9653 浏览

kubernetes-ingress - 私有子网中的 EKS,公共子网中的负载均衡器

我在私有子网中运行 EKS,因此无法创建面向 Internet 的负载均衡器,但能够创建内部负载均衡器。

有什么方法可以在公共子网中创建负载均衡器(可能是手动)并指向私有子网中 EKS 中运行的 pod。

我正在考虑创建负载均衡器链,其中外部负载均衡器将指向内部负载均衡器,但这也是不可能的,因为内部负载均衡器的 IP 地址是保留 IP。

我可以尝试其他方式将流量从互联网路由到 Pod 吗?

0 投票
2 回答
196 浏览

python-3.x - 如何通过 boto3 查找在 AWS 中使用特定 VPC 的所有 ELB 名称?

我想使用 boto3 过滤和列出具有特定 vpcid 的 ELB。使用该 ELB 名称我想使用 boto3 删除该 ELB

0 投票
1 回答
38 浏览

amazon-web-services - HTTPS 在使用 URL 时不重定向,但在键入 IP 时有效

我有这个问题。似乎当我访问“foo.com”时它不会强制使用 https。但是当我访问“foo.com”的 IP 地址(例如 54.54.54.54)时,它会强制访问“ https://54.54.54.54 ”。请注意,我确实有一个 AWS 经典负载均衡器,并且两个实例在通过 IP 地址访问时都返回 https。有了这个,我的 .htaccess 似乎正在工作。我可以知道我是否错过了什么?

0 投票
1 回答
2222 浏览

amazon-web-services - AWS 负载均衡器 + NginX + EC2 AutoScaling 组

目前,我还没有设置 AWS 负载均衡器。

请求来自单个 ec2 实例:首先命中 nginx,然后将其转发到 node/express。

现在,我想创建一个自动缩放组,并附加 AWS 负载均衡器以分发进来的请求。我想知道这是否是一个好的设置:

Nginx 安装在运行 node.js 的同一 EC2 上。Nginx 配置具有使用 geoip 模块检测用户位置的逻辑,以及 gzip 压缩配置和 ssl 处理。

我还将 ssl 处理移至负载平衡器。

0 投票
2 回答
651 浏览

amazon-web-services - 在 AWS Cloudfront 中如何添加缓存控制?

我已经在 Cloud Ec2 实例中设置了我的 nopCommerce 4.10 (.net Core)。并且还使用负载均衡器为其设置 CDN CloudFront。

上云和cdn的主要目的是为客户提高页面速度(客户要求这样做)。

此后的页面速度没有提高,并且显示图像标题具有“缓存策略”无效。

为此,我需要在标题中设置缓存控制。我检查了原始图像有这个值,但是负载平衡器和 cdn 没有图像的这个值。

请让我知道如何在 CloudFront cdn 的标头中设置缓存控制。

0 投票
3 回答
320 浏览

http - 如何 AWS 将负载均衡器从 HTTP 路由到 TOMCAT 服务器的 HTTPS

我在 Tomcat 服务器上有 JAVA REST API Web 服务器,它在 AWS EC2 实例的端口 8080 上运行。

并且有一个 Classic Load Balancer 来管理此实例的所有流量。所以之前,ELB 是在 HTTP 上,之后有时,它会在 ELB 的 Listeners 上从HTTPS(443:ELB 端口)路由到HTTP(8080:实例端口)

我在 ELB 的安全组中为HTTPS(443)添加了入站规则。

弹性负载均衡器映像

Elastic Load Balancer 安全组

当我调用 HTTP 请求时,会收到响应,但是当我调用 HTTPS 时,它会显示Could not get any response

我添加了一些 Web UI 来检查,它同时显示 HTTP 和 HTTPS 请求,但 https 显示像直通(HTML 类型)的 https和URL 地址栏中的不安全

0 投票
1 回答
565 浏览

nginx - Routing based on request headers using AWS Load Balancer or nginx

Scenario: I have 2 clients. let's say client A and client B. Both clients have one common id (like UUID). My application(it's c++) is configured like both the clients have to connect in one server.

I am planning to add (AWS)ELB/nginx in front of my application. So Problem is when we received a request from client A it will pass through ELB and connect in one of the nodes. When client B sends the request to ELB then I am not sure that it will connect to the same node where client A is connected. Client B should connect on that node where Client A was connected.

在我的场景中,两个客户端都应该连接到同一个节点。 客户总是以一个共同的 ID 成对出现。在这种情况下应该使用什么?

我的应用程序是 dockerized,我正在使用 kubenetes 进行部署。

0 投票
1 回答
85 浏览

node.js - 需要外部防火墙的 NodeJS TLS/TCP 服务器

问题: 我有一个运行 FreeBSD 的 AWS EC2 实例。在那里,我正在运行一个 NodeJS TLS/TCP 服务器。我想创建一组规则(在我的 NodeJS 应用程序中),以便能够根据一些逻辑条件以编程方式单独阻止 IP 地址。

我想运行一个外部(不在同一台机器/实例上)防火墙或负载平衡器,我可以通过 NodeJS 以编程方式控制它,这样当给定某些条件时,我可以阻止特定的远程地址(IP)在它到达 NodeJS 实例之前。

我尝试过的事情: 我最初将nginx作为一种选择,在第二个实例上运行它,并将我的 NodeJS 服务器放在它后面,但是在浏览了NGINX Cookbook Advanced Recipes for High Performance Load Balancing之后,我了解到只有 NGINX Plus(付费版)允许远程/API 控制和定制。虽然我认为支付 3500 美元/许可证并不算多(考虑到 NGINX Plus 的所有功能),但我现在根本买不起;此外,我将使用的唯一功能(此时)将是远程 API 控制IP 地址阻止

我的第二个想法是通过将 AWS 的 SDK 集成到我的项目中来使用 AWS/ELB(弹性负载均衡器)。不幸的是,这听起来是可行的,在阅读了一些论坛主题和他们的部分文档之后(除非我弄错了),我需要的这两个功能似乎在 AWS/ELB 上不可用。AWS 似乎提供了一种完全不同的服务,称为 WAF,老实说,我不太了解它(无论是作为服务还是从功能的角度来看)。

我也(简要地)研究了 CloudFlare,正如在 Sackoverflow 上的一篇文章中所推荐的那样,尽管我无法确定他们的防火墙是否允许这种级别的(远程)控制。

问题: 我有哪些选择?你们会建议我做什么?

0 投票
1 回答
1243 浏览

kubernetes - 使用 AWS Elastic LoadBalancer 公开 kubernetes 应用程序

我创建了一个内部 AWS 弹性应用程序负载均衡器,并在 AWS 控制台中将其状态显示为活动。请注意,我使用 jenkins 作业创建了此 ALB,并且在作业中我指定了我的 AWS EC2 实例服务器,该服务器配置为我的 kubernetes 主服务器。

作业成功完成后,我可以看到以下详细信息。

在描述下的 AWS 控制台中,我可以看到以下详细信息 -

然后有一个 Listeners 选项卡,在该选项卡下我看到 Listener ID with HTTPS: 443

还显示具有以下 2 条规则的规则 -

此外,我还看到了其他选项卡,例如监控、集成服务和标签。

现在,我有一个 kubernetes 集群,它使用以下类型创建了以下服务:LoadBalancer - (来源参考:https ://github.com/kenzanlabs/kubernetes-ci-cd/blob/master/applications/hello-kenzan/k8s/manual-部署.yaml )

在我创建服务之后 -

它显示 External-IP 为<pending> 但是既然我已经创建了一个负载均衡器类型,为什么它不创建一个 ip?

仅供参考,我可以使用访问该应用程序,curl <master node>:<nodeport> 甚至可以通过代理转发访问它。

因此,如果没有创建 IP,就不可能使用 DNS 公开我的应用程序,对吧?请建议我可以做些什么,以便我可以使用 DNS 名称 internal-myservices-987070943.us-east-1.elb.amazonaws.com 公开我的服务

我需要使用 DNS 名称公开应用程序,例如http://internal-myservices-987070943.us-east-1.elb.amazonaws.com/#

提前致谢

更新于 29/1

我按照本文中提到的答案步骤操作kube-controller-manager don't start when using "cloud-provider=aws" with kubeadm

1)我通过在[服务]下添加以下命令来修改文件“/etc/systemd/system/kubelet.service.d/10-kubeadm.conf”

我创建了这个 cloud-config.conf 如下 -

我不确定这个标签和 ID 指的是什么,但是当我运行下面的命令时,我可以看到输出提到 clusterName 为“kubernetes”

然后我确实执行了,

2)然后如上所述,我--cloud-provider=aws在 kube-controller-manager.yaml 和 kube-apiserver.yaml 中都添加了

3)我还在我的应用程序的 manual-deployment.yaml 中添加了以下注释

https://github.com/kenzanlabs/kubernetes-ci-cd/blob/master/applications/hello-kenzan/k8s/manual-deployment.yaml

现在,当我使用 pod 进行部署kubectl apply -f k8s/manual-deployment.yaml时,当我检查时没有创建kubectl get po --all-namespaces

所以我尝试删除上面的第 2 步并再次进行部署,现在 pod 已成功创建。<pending>但是当我这样做时它仍然显示为EXTERNAL-IPkubectl get svc

我什至将我的主节点和工作节点重命名为与 EC2 实例私有 DNS 相同:ip-10-118-6-35.ec2.internal 和 ip-10-118-11-225.ec2.internal,如下面的帖子和重新配置了集群,但仍然没有运气。 https://medium.com/jane-ai-engineering-blog/kubernetes-on-aws-6281e3a830fe(在以下部分:正确的节点名称)

此外,在我的 EC2 实例中,我可以看到附加的 IAM 角色,当我看到该角色的详细信息时,我可以看到有 8 个策略应用于该角色。在其中一项政策中,我可以在下面看到这一点,还有许多其他我没有在此处发布的操作 -

如果我缺少其他一些设置,我将一无所知。请建议!

更新于 30/1

如本博客所述,我执行了以下附加步骤 - https://blog.scottlowe.org/2018/09/28/setting-up-the-kubernetes-aws-cloud-provider/

1) 将 AWS 标签添加到我的所有 EC2 实例(主节点和工作节点)作为“kubernetes.io/cluster/kubernetes”以及我的安全组

2)我没有在配置文件中手动添加apiServerExtraArgs、controllerManagerExtraArgs和nodeRegistration。但是我所做的是我完全重置了集群"sudo kubeadm reset -f",然后我在主节点和工作节点的 kubeadm conf 文件中添加了这个 -

cloud-config.conf -

然后在主节点和工作节点中执行 -

3)现在我在主节点中使用以下命令创建了集群

4)然后我能够成功地将工作节点加入集群并部署法兰绒CNI。

在此之后,获取节点显示就绪状态。

需要注意的重要一点是 /etc/kubernetes/manifests 路径中有 kube-apiserver.yaml 和 kube-controller-manager.yaml 文件。

当我--cloud-provider=aws在这两个 yaml 文件中添加时,我的部署没有发生,并且根本没有创建 pod。因此,当我--cloud-provider=aws从 kube-apiserver.yaml 中删除标签时,部署和 Pod 都成功了。

按照 Matthew 的要求,当我修改 kube-apiserver 和 kube-controller-manager 的 yaml 时,两个 pod 都再次成功创建。但是由于没有创建 pod,我只从 kube-apiserver.yaml 中删除了标签。

另外,我检查了日志kubectl logs kube-controller-manager-ip-10-118-6-35.ec2.internal -n kube-system

但我没有看到任何异常或异常。我可以在最后一部分看到这一点 -

甚至尝试将以下注释添加到 manual-deployment.yaml 但仍然显示相同<Pending>

更新于 1/31

终于有进步了!!问题看起来像标签映射。在 aws 标签的键值映射中,我将键作为 KubernetesCluster,将值作为 k8s,但在配置文件中,我使用键映射而不是值。

但现在我可以在 kube-controller-manager pod 中看到以下日志 -

` 1 aws.go:1041] 构建 AWS 云提供商

1 aws.go:1007] 配置文件中未指定区域;查询 AWS 元数据服务

1 控制器 manager.go:208] 构建控制器上下文时出错:无法初始化云提供商:无法初始化云提供商“aws”:查找实例 i-02dbgfghjf3e7 时出错:“列出 AWS 实例时出错:\”RequestError:发送请求失败\ ncaused by: Post https://ec2.us-east-1.amazonaws.com/ : dial tcp 54.239.28.176:443: i/o timeout\"" `

最近更新

我没有为 *.amazonaws.com 使用代理,现在似乎可以连接。从某种意义上说,“似乎连接”是通过检查我仅在日志下方看到的日志,而没有在添加此无代理之前发生的超时错误。我还确保控制器 pod 通过我的编辑和保存重新启动。在此之后我看到下面的日志 -

` 1 aws.go:1041] 构建 AWS 云提供商

1 aws.go:1007] 配置文件中未指定区域;查询 AWS 元数据服务`

所以我假设我的控制器能够连接到 aws 云,对吗?但不幸的是,<pending>当我再次创建我的服务时仍然得到:(

更新为 01/02

好的,为了简单起见,我创建了 aws 应用程序负载均衡器 myservices,并在 aws 控制台中列出了以下 DNS 名称 - internal-myservices-987070943.us-east-1.elb.amazonaws.com

我还在描述下创建了目标组并在下面显示 - 名称为 myservices-LB,协议为 HTTPS,端口为 443,目标类型为实例,负载均衡器为 myservices 在“目标”选项卡下我可以看到已注册的目标将我的实例 ID 显示为 i- 02dbf9b3a7d9163e7,端口为 443 和其他详细信息。此实例 ID 是我的 ec2 实例,我已将其配置为我的 kubernetes 集群的主节点。

现在,当我尝试使用 URL 直接访问 LB DNS 名称时 - internal-myservices-987070943.us-east-1.elb.amazonaws.com/api/v1/namespace s/default/services 我得到“这个站点可以”达不到”

而如果我使用 kubectl proxy 从我的主节点实例代理转发 -- 地址 0.0.0.0 --accept-hosts '.*' 然后如果我直接访问我的主节点 IP,如下所示,我可以浏览 - 10.118.6.35: 8001/api/v1/命名空间/默认/服务

是否可以使用直接 AWS Loadbalancer DNS 名称访问部署为 NodePort 或 Loadbalancer 类型的 kubernetes 服务?我什至使用 tracert internal-myservices-987070943.us-east-1.elb.amazonaws.com 测试了连接性,我可以在 18 个跃点内成功到达目的地 10.118.12.196

但是从我的 ec2 主节点实例中它没有跟踪。通常我用这个命令设置代理 - “export {http,https,ftp}_proxy= http://proxy.ebiz.myorg.com:80 ”我甚至可以访问外部网址。这可能是一个问题吗?