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

0 投票
1 回答
3919 浏览

amazon-web-services - 为什么我必须在 AWS Application Load Balancer 中禁用 HTTP/2 以防止出现 ERR_SPDY_PROTOCOL_ERROR?

当我使用Application Load Balancer (ALB)将我的 Web 应用程序部署到 AWS 环境时,我的一些 Web 服务端点不会返回任何数据,并且我的 Chrome 浏览器会针对某些 http 调用报告此错误:ERR_SPDY_PROTOCOL_ERROR

找到此建议后,我在 ALB 配置中禁用了HTTP/2支持,现在一切正常。

为什么我必须在 ALB中禁用HTTP/2 ?这里的根本问题是什么?我是否需要更改我的 Web 服务代码中的某些内容以便可以使用HTTP/2

更新

以下是响应标头:

正如以下答案之一所建议的那样,罪魁祸首可能是我的一个标题(到达的位置)的名称中有一个空格,这是无效/格式错误的。我会确保空格被破折号代替。

0 投票
1 回答
4318 浏览

amazon-web-services - 从 http 重定向到 https 时,cloudfront 域被应用程序负载均衡器 dns 名称替换

我正在为我的应用程序使用 AWS cloudfront 和 AWS 应用程序负载均衡器 (ALB)。Alb 为端口 80 和 443 的两个侦听器配置,都将流量转发到 HTTP(默认规则)上的单个目标组(实例类型)。Cloudfront 设置为使用 ALB 作为具有给定设置的源。源协议策略 = HTTP,交付方法 = Web,查看器协议策略 = HTTP & HTTPS& 使用默认的 cloudfront ssl 证书。

由于我的 ALB 正在侦听端口 80 和 443,因此我的应用程序在 http 和 https 上都运行良好。现在,当我编辑端口 80 的侦听器的默认规则以将流量重定向到端口 443(之前设置为转发到 80 上的目标组,如前所述)以进行 https 重定向时,我的云端域被我的 ALB 域替换,并且资源(css ,图像等)无法加载。

例如,在重定向资源 URL 之前 - daxxxxxxxxxxxx.cloudfront.net/media/jdfghusfe/abc.png(使用云端域)

重定向后 -
资源的 URL -main-albxxxxxx-amazonaws.com/media/jdfghusfe/abc.png

任何人都可以帮忙吗?提前致谢。

0 投票
1 回答
3197 浏览

amazon-web-services - 验证 ALB + AWS Cognito 时出现 500 错误

我正在尝试通过 Aws ALB + Cognito 对 Lambda 进行身份验证。当我启动 DNS 服务器时,它会将我重定向到登录页面,我可以注册并验证用户。另外,我可以看到用户添加到用户池中的用户。登录后,它给出 500 Internal Server Error。转发到函数的默认操作正在后台执行,我可以在日志中看到。

不知道为什么在验证用户身份后它没有重定向/执行 lambda。您能否提供一些见解,我在此设置中会缺少什么。

我已经在 terraform 中设置了 Lambda、ALB 和 Cognito。

0 投票
1 回答
294 浏览

docker - 使用应用程序负载均衡器将流量路由到在 3 个 aws ecs ec2 实例上运行的不同微服务

我是微服务的新手。我的团队正在开发新的应用程序,它将有大约 20 个微服务分布在 3 个 aws ecs ec2 实例中。每个 docker 容器都将监听任何高端口(主机端口)并将请求转发到 docker 的 80 端口

我的要求是让 domain.com/core >> 应该路由到“core” docker 容器 domain/customer >> 应该路由到“customer” docker 容器

我正在测试应用程序负载平衡,以便将 domain.com/core 规则转发到相应的目标组,并且该目标组将由 docker 容器的相应高端口(主机端口)注册。

但它没有像我预期的那样工作

我猜当 domain.com/core 被调用时,它会路由到相应的 docker 容器,但不是查看“core”微服务的 doc root,而是实际上是在该 microservice 的 doc root 下查找目录“core”。有什么解决办法吗?

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 ”我甚至可以访问外部网址。这可能是一个问题吗?

0 投票
1 回答
146 浏览

kubernetes - 无法使用 AWS Elastic LoadBalancer 创建 Kubernetes 服务

我创建了 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 集群的主节点。

实际上,我的负载均衡器和 EC2 实例都在同一个 VPC 中。

现在,我可以从我的本地计算机访问此 URL https://internal-myservices-987070943.us-east-1.elb.amazonaws.com 我所做的是 - 1)HTTPS 443 端口和 2 中的健康检查失败) 在我的 EC2 实例中安装了 Web 服务器 nginx。所以安装 nginx 并打开 SSL 端口会自动解决健康检查问题,我可以使用 https 浏览内部 LB URL。

但是我使用 kubernetes svc 创建负载均衡器的主要问题仍然没有解决:( 它仍然显示<pending>为 EXTERNAL_IP。我的疑问是因为 EC2 实例和 LB 都在同一个 VPC 中,为什么不是 traceroute internal-myservices-987070943.us-east- 1.elb.amazonaws.com 没有跟踪它?我得到了所有 30 个跃点的所有 * * *。但是从我的本地计算机上我能够成功跟踪它。所以这就是它没有创建任何外部 ip 的原因?

我完成了 AWS 云与 kubernetes 集成所需的所有工作。

1) 我在 kube 集群中的主节点和工作节点的主机名与 EC2 实例 DNS 名称相同。

2) 为 EC2 实例和 kubelet 服务添加标签

3) 为 kube-api 和 kube-controller-manager POD 添加了 cloud-config 标签

4) 我看到 elasticloadbalancing:* 操作允许我在 AWS 中针对我的角色执行的策略。

另外我想知道当安装在我的 EC2 实例中的 nginx 能够访问我的 LoadBalancer 但 Traceroute 无法访问它时,情况如何。

是否可以使用我通过 AWS 控制台手动创建的负载均衡器直接访问我的服务?也许与 NodePort 或入口或其他东西..??

所以我坚持这个:(请帮助..

0 投票
1 回答
982 浏览

amazon-web-services - 适用于频繁更新的关键小文件的 AWS EFS

我们应用程序的用户群已达到 200 万用户,我们计划使用 AWS 扩展应用程序。

我们面临的主要问题是共享数据的处理,包括缓存、上传、模型、会话等。

一个选项是 AWS EFS,但它会降低应用程序的性能,因为文件非常小,从几字节到几 MB 不等,并且更新非常频繁。

我们可以使用 Memcache/Redis 进行会话,使用 S3 进行上传,但仍然需要管理缓存、模型和其他一些共享文件。

是否有任何替代 EFS 的方法或任何方法可以使 EFS 在这种小文件经常更新的情况下工作?

0 投票
1 回答
46 浏览

amazon-web-services - Drupal 7 非 www 到 www

我已经调整了 drupal 7 中的 .htaccess 文件以将非 www 转发到 www 域。当我将它部署到 AWS 弹性 beanstalk(使用应用程序负载均衡器)时,大约 50% 的流量(我有 2 个实例)会出现很多 3xx 错误。

知道为什么吗?知道如何解决这个问题或以另一种方式实现相同的重定向吗?

谢谢

0 投票
1 回答
210 浏览

amazon-web-services - 将所有非 www HTTPS 请求重定向到 www HTTPS

我想将所有请求从https://example.com重定向到https://www.example.com

我可以在没有 www 和 www 的情况下访问应用程序。

wwww.example.com 是应用程序负载均衡器的别名,还为应用程序配置了 ACM 证书。

目前,在 Route53 中配置了 DNS 实体。

请找到下面定义的网络负载均衡器规则。但是,如果有人像那样输入https://example.com,它不会指向https://www.example.com

规则:

请建议我如何实现这种情况。

0 投票
1 回答
504 浏览

python - ALBV2 登录 s3 存储桶并使用对流层启用删除保护

首先:我想为我的 ALB 创建访问权限以将日志存储在我的 s3 存储桶中,

在这里我定义了但这段代码是针对 ELBv1 但我使用的是 ELBv2 我该如何定义它。

第二:我想为我的 elb 创建另一个Deletion protection,我搜索了很多,但我没有找到任何使用对流层云形成的地方。

帮我解决这个问题。