我对条款及其用法有点困惑.你能帮我理解它们如何与Load Balancers一起使用吗?
我提到aws-doc徒劳无功:(
我有一个 ELB(以几个 Auto Scaling 组作为目标组的网络负载均衡器),其定期运行状况检查失败(即某些实例将被标记为不运行状况,然后在几分钟后恢复)。健康检查是一个简单的静态页面(即/health_check)。
时间似乎是在主机网络负载较重(从 S3 下载大文件)的同时,但我想了解更多信息(例如,它们未通过 https 中提到的主动健康检查或被动健康检查: //docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-health-checks.html)。
但是,我无法从 ELB 找到健康检查历史记录或日志。我的所有搜索发现都是关于 ELB 的访问日志 ( https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html ),它与实际的用户请求有关。
此健康检查历史记录/日志可以在任何地方访问吗?
在经典负载均衡器 (CLB) 和应用程序负载均衡器 (ALB) 中,可以选择将所有 http 流量重定向到 https 侦听器。
我没有找到将 tcp 端口 80 流量从 NLB(网络负载均衡器)重定向到 tls 端口 443 的选项
任何帮助深表感谢。
正如标题所说,我正在寻找一种方法来强制LoadBalancer服务在AWS中使用预定义的安全组.我不想手动编辑Kubernetes为ELB创建的安全组的入站/出站规则.我无法在文档中找到任何内容,也没有找到任何在线其他地方运行的内容.这是我目前的模板:
apiVersion: v1
kind: Service
metadata:
name: ds-proxy
spec:
type: LoadBalancer
ports:
- port: 8761 # the port that this service should serve on
targetPort: 8761
protocol: TCP
selector:
app: discovery-service
Run Code Online (Sandbox Code Playgroud) 我一直在 DAEMON 模式下测试 ECS 的滚动更新,但我无法避免偶尔出现“502 Bad Gateway”响应。这是我为测试所做的工作,这似乎指出了排水策略过程中的一个错误。
首先,我用 Kotlin/Jersey 编写了一个最小的 hello-world 程序来响应 curl GET(源代码)。我每约 300 毫秒循环一次到达终点:
while [ 1 ]; do curl -s http://...us-east-2.elb.amazonaws.com/helloWorld | ts '[%Y-%m-%d %H:%M:%S]'; echo ""; sleep 0.3; done
Run Code Online (Sandbox Code Playgroud)
接下来,我推送一个新的容器镜像(使用相同的标签),它会产生稍微不同的响应(110 与 1010),以便我可以观察推出进度。最后我强制更新服务:
aws ecs update-service --service service-helloworld-jersey --cluster cluster-helloworld-jersey --force-new-deployment
Run Code Online (Sandbox Code Playgroud)
我的服务中有两项任务,最低健康百分比为50% 。Bash 循环在滚动更新期间产生以下输出 - 在某些时候有两个输出,一个带有“110”(旧代码),另一个带有“1010”(新代码),这是在其中一个容器具有已更新,另一个仍未更新:
如果您将 Bash 控制台上的事件与 AWS 控制台中的事件相关联(两者都是 NTP 时间同步的),您可以看到大约 9:04:39,尽管“耗尽”,我们仍在使用旧代码/容器事件应该发生在 9:04:28 之后,我在下面用红色突出显示。在 9:04:39 任务最终停止,这与循环中的“502 Bad Gateway”响应相关。
我的结论是 ELB 没有正确排出最后一个目标,这导致了我们看到的错误。
如果有人有任何想法如何进一步诊断或配置不同,请告诉我。
通过将 ELB 的注销延迟从 10 秒增加到 30 秒,我能够避免任何服务中断。
使用 KOPS 在 AWS 上部署 k8s。我已经创建了 nginx 入口https://github.com/kubernetes/ingress-nginx nginx-ingress-controller 图像:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.18.0
一切都已启动并正在运行,我可以使用由 nginx 服务创建的 aws 经典负载均衡器从外部访问应用程序。
最近我们开始研究 websockets。我在 k8s 中部署了我的服务并尝试从外部访问。
我为我的应用程序创建了服务和入口。Ingress 现在指向负载均衡器(在 json 文件下方)。
我在 aws 中创建了 route53 条目并尝试连接到该条目,但是当我尝试通过 chrome 浏览器从我的客户端应用程序连接时出现以下错误
WebSocket 连接到“wss://blockchain.aro/socket.io/?EIO=3&transport=websocket”失败:WebSocket 握手期间出错:意外响应代码:400
我尝试创建应用程序负载均衡器,但无法连接到 wss://<host>
错误:
WebSocket 连接到“wss://blockchain.aro/socket.io/?EIO=3&transport=websocket”失败:WebSocket 握手期间出错:意外响应代码:400
const config: SocketIoConfig = { url: 'wss://blockchain.aro',
options: { autoConnect: false, transports: ['websocket']} };
Ingress:
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{},\"name\":\"blockchain\",\"namespace\":\"adapt\"},\"spec\":{\"rules\":[{\"host\":\"blockchain.aro\",\"http\":{\"paths\":[{\"backend\":{\"serviceName\":\"blockchain\",\"servicePort\":8097},\"path\":\"/\"},{\"backend\":{\"serviceName\":\"blockchain\",\"servicePort\":8097},\"path\":\"/socket.io\"},{\"backend\":{\"serviceName\":\"blockchain\",\"servicePort\":8097},\"path\":\"/ws/\"}]}}],\"tls\":[{\"hosts\":[\"blockchain.aro\"],\"secretName\":\"blockchain-tls-secret\"}]}}\n",
"nginx.ingress.kubernetes.io/proxy-read-timeout": "3600",
"nginx.ingress.kubernetes.io/proxy-send-timeout": "3600"
}
Run Code Online (Sandbox Code Playgroud)
包含tls
和secretname
和rules
在入口文件中。我尝试创建,ApplicationLoadbalancer
但我也无法与之建立联系。
对于 ALB - “您必须从至少两个可用区指定子网。”
对于 NLB - “您可以从一个或多个可用区指定子网。”
强制执行 2 个可用区作为 ALB 的 MUST 要求而不是 NLB 的原因是什么?
我正在尝试按照https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html?icmpid=docs_elbv2_console向我的负载均衡器添加认知身份验证。
当我设置身份验证过程时,我只有“oidc”类型,但我期望“cognito”类型:
当我尝试其余的 api 时,我遇到了同样的问题
操作类型“authenticate-cognito”必须是“redirect、fixed-response、forward、authenticate-oidc”之一
认知不可用。
我是否缺少一些权限?我是 AmazonCognitoPowerUser
您好我在7070端口创建了ALB侦听器443和目标组实例(not-ssl)
我可以访问instanceip:7070没有问题,但https://开头ELB的DNS名称不能访问..比如健康检查也失败,302码
ALB侦听器端口https和实例是http协议,
当我使用https:// dns-name浏览时,它会重定向到http:// elb-dns-name
我正在尝试部署仅使用 UDP 端口的 ECS 服务。通过 NetworkLoadBalancers 添加了对 UDP 负载平衡的支持,因此我部署了我的服务,允许为我的任务动态分配主机端口,并使用适当的侦听器和目标组设置 NLB。
我遇到的问题是NLB显然必须进行健康检查,并且必须基于 TCP。对于健康检查端口,您可以保留默认的“目标”端口(这适用于动态主机端口分配),或者您可以指定一个端口。我不能做的是为 TCP 公开的端口与我的负载均衡器目标 UDP 端口不同。我可以让我的容器在同一个端口上同时侦听用于生产的 UDP 和用于健康检查的 TCP,但即使 Docker 很好地支持它,任务定义似乎也不允许这样做。
这似乎会使 UDP NLB 对 ECS 服务无用,除非我遗漏了什么?我想出的唯一替代方法是使用静态配置的主机端口,以便我可以在受控主机端口上为 TCP 公开第二个端口,并将其作为 NLB 运行状况检查的目标。问题是我们现在已经失去了 ECS 的所有可扩展性优势,因为无法在一个实例上运行多个任务。
aws-elb ×10
amazon-ec2 ×3
amazon-ecs ×2
kubernetes ×2
amazon-elb ×1
aws-alb ×1
udp ×1
websocket ×1