我有 2 个相同 Web 应用程序的实例在端口 8080 和 8081 上运行。我需要使用 ALB/CLB 进行负载平衡。这在旧的 apache Web 服务器中曾经是一件简单的事情。要求是对下面的实例进行负载平衡
实例 1 Web 应用程序 1 端口 8080
实例 1 Web 应用程序 2 端口 8081
实例 2 Web 应用程序 1 端口 8080
实例 2 Web 应用程序 2 端口 8081
我无法使用 ALB 执行此操作。我尝试创建 2 个目标组,一个用于端口 8080,另一个用于端口 8081。但在侦听器规则中,我可以根据路径将请求发送到不同的目标组。但这不会对整个站点进行负载平衡。参考截图
我在这里有什么选择?
提前致谢
我一直在按照演练为我的应用程序创建一个 AWS ALB 入口控制器,该控制器也部署在 EKS 集群中。
一切似乎都很好,与演练类似的答案,但是在设置外部 DNS 时,我收到错误消息:
kubectl logs -f $(kubectl get po | egrep -o 'external-dns[A-Za-z0-9-]+')
Run Code Online (Sandbox Code Playgroud)
time="2020-02-20T16:21:57Z" level=error msg="services is forbidden: User \"system:serviceaccount:tick:external-dns\" 无法在 API 组中列出资源 \"services\" \" 在集群范围" time="2020-02-20T16:22:58Z" level=error msg="services is forbidden: User \"system:serviceaccount:tick:external-dns\" cannot list resource \"services \" 在 API 组中 \"\" 在集群范围内"
每一分钟。我确保所有的权限都是需要的,所以不应该是因为这个。
我从这里尝试了解决方案,但没有任何帮助,我找不到任何其他解决方案。
这个错误实际上意味着什么?我应该怎么做才能修复它?
更新编辑我的external-dns
配置看起来像:
apiVersion: v1
kind: ServiceAccount
metadata:
name: external-dns
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::*my*account*id*:role/EKSRole
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: external-dns
rules:
- apiGroups: …
Run Code Online (Sandbox Code Playgroud) 我正在使用Terraform v0.12.26
和设置并aws_alb_target_group
作为:
resource "aws_alb_target_group" "my-group" {
count = "${length(local.target_groups)}"
name = "${var.namespace}-my-group-${
element(local.target_groups, count.index)
}"
port = 8081
protocol = "HTTP"
vpc_id = var.vpc_id
health_check {
healthy_threshold = var.health_check_healthy_threshold
unhealthy_threshold = var.health_check_unhealthy_threshold
timeout = var.health_check_timeout
interval = var.health_check_interval
path = var.path
}
tags = {
Name = var.namespace
}
lifecycle {
create_before_destroy = true
}
}
Run Code Online (Sandbox Code Playgroud)
当地人长这样:
locals {
target_groups = [
"green",
"blue",
]
}
Run Code Online (Sandbox Code Playgroud)
当我运行terraform apply
它返回以下错误:
Error: Missing resource instance key
on …
Run Code Online (Sandbox Code Playgroud) 目前,我在 AWS 上使用应用程序负载均衡器设置了一个应用程序,目标组中有 2 个 EC2:
DNS -> AWS-ALB -> EC2(2)
我需要帮助仅允许应用程序 URL 上下文路径上的某些 IP 地址。
例如:www.abc.com 应该可供所有人访问,但 www.abc.com/xyz 应该只能由某些 IP 地址访问。
我在 EC2 上尝试了 NGINX 解决方案,只有当我使用允许和拒绝规则直接访问 EC2 IP 时才有效。
reverse-proxy amazon-ec2 amazon-web-services aws-elb aws-alb
我在 AWS 中创建了一个环境,其中包括一个安装了 node js web-server 和 Nginx 的 EC2 实例,位于自签名应用程序负载均衡器后面。
我的 ALB 从 HTTPS (443) 获取请求并通过 HTTP (80) 将它们转发到 Nginx。我的 Nginx 应该从 ALB(在端口 80)获取请求并将它们转发到端口 9090(由节点 js Web 服务器使用)。
但是,我在将请求从 Nginx 转换为应用程序时遇到了问题。在 HTTP 上使用 ALB DNS 输入 URL 时,我能够访问上述页面(而不是我的网络服务器应用程序页面):
我所有的安全组都可以测试问题(在 443、80、9090 上)。所以端口不是问题,而是 Nginx 配置。
可能是什么问题/我应该做哪些进一步的配置?谢谢你。
nginx amazon-web-services node.js nginx-reverse-proxy aws-alb
aws-alb ×5
aws-elb ×2
amazon-ec2 ×1
external-dns ×1
kubernetes ×1
nginx ×1
node.js ×1
terraform ×1