gpt4 book ai didi

amazon-web-services - 如何通过 CloudFormation 在不同 Fargate 任务中运行的 Consul 服务器将 Consul 代理加入 Consul 集群?

转载 作者:行者123 更新时间:2023-12-03 07:26:59 26 4
gpt4 key购买 nike

我目前是一名实习生,必须托管一个微服务应用程序。我选择将 AWS ECS 与 Fargate 任务结合使用来托管 Consul Connect Service Mesh,为应用程序提供服务发现、意图、Mtls 等。我的设置如下:

  • 1 个带有 Consul 服务器容器的 Fargate 任务(在服务中)。
  • 使用 Consul 代理、Consul Connect sidecar 和微服务容器执行 x Fargate 任务(在服务中)。

我正在使用 CloudFormation 自动部署该基础设施。

问题:

我需要使用 CloudFormation 将在一个 Fargate 任务中运行的 Consul 代理加入到在另一个 Fargate 任务(服务器的任务)中启动的 Consul 集群。我这样做的问题是我没有找到任何方法来获取 IP 地址以将代理加入集群。

有谁知道如何获取 CloudFormation 中 Fargate 任务的 IP 地址或执行此操作的最佳实践方法?

如果我没记错的话,你只能使用 IP、DNS 名称或云元数据将 Consul 代理加入 Consul 集群。我无法使用 CloudFormation 检索第一个和第二个,而对于第三个,我发现这可能是不可能的(我可能是错的,但这就是我到目前为止读到的内容)。

我还尝试了 Consul agent -ui [...] -join 和 -retry-join 标志,但都不起作用。我还尝试使用 Consul 服务器为任务创建一个内部负载均衡器,我使用 DNS 名称尝试加入集群,但这也不起作用(我从未在 AWS 上正确设置过负载均衡器,所以我可能都做错了)。我尝试使用负载均衡器将流量转发到端口 8500(我认为这是错误的端口),然后使用端口 8301(我认为这是正确的端口)。但我不断收到消息说该地址上没有 Consul Cluster。

谁能告诉我如何继续?

提前谢谢您!

最佳答案

感谢我的一位非常聪明的同事,我发现通过 Consul Server Fargate 任务在 ECS 服务前面放置一个负载均衡器(我之前设置错误)解决了我的问题。负载均衡器监听器应监听 SERF 端口 8301 tcp_udp,并将流量转发到具有该协议(protocol)和端口的服务。

  ConsulServerTargetGroup8301:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
HealthCheckEnabled: true
HealthCheckIntervalSeconds: 30
UnhealthyThresholdCount: 3
HealthyThresholdCount: 3
Name: ConsulServerTargetGroup8301
Port: 8301
Protocol: TCP_UDP
TargetGroupAttributes:
- Key: deregistration_delay.timeout_seconds
Value: 60 # default is 300
TargetType: ip
VpcId: !Ref VPC

ConsulServerTargetGroupListener8301:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- TargetGroupArn: !Ref ConsulServerTargetGroup8301
Type: forward
Port: 8301
Protocol: TCP_UDP
LoadBalancerArn: !Ref ConsulServerLoadbalancer

ConsulServerLoadbalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: ConsulServerLoadbalancer
IpAddressType: ipv4
Type: network
Scheme: internal
SubnetMappings:
- SubnetId: !Ref PrivateSubnet1a
- SubnetId: !Ref PrivateSubnet1b

然后,您可以使用负载均衡器的 DNS 名称将 Consul 代理加入 Consul 集群:

        Command:
- !Sub >-
consul agent
-ui
-data-dir consul/data
-advertise '{{ GetPrivateInterfaces | include "network" "${pVPCIpRange}" | attr "address" }}'
-client 0.0.0.0
-retry-join ${ConsulServerLoadbalancer.DNSName}

关于amazon-web-services - 如何通过 CloudFormation 在不同 Fargate 任务中运行的 Consul 服务器将 Consul 代理加入 Consul 集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67331638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com