[英]How can I join a Consul agent to a Consul cluster via a Consul server running in a different Fargate task with CloudFormation?
我目前是實習生,必須托管一個微服務應用程序。 我選擇結合使用 AWS ECS 和 Fargate 任務來托管 Consul Connect 服務網格,為應用程序提供服務發現、意圖、Mtls 等。 我的設置如下:
我正在使用 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 並將流量轉發到具有該協議和端口的服務。
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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.