簡體   English   中英

如何通過在 CloudFormation 的不同 Fargate 任務中運行的 Consul 服務器將 Consul 代理加入 Consul 集群?

[英]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 等。 我的設置如下:

  • 1 個帶有 Consul 服務器容器的 Fargate 任務(在服務中)。
  • 帶有 Consul 代理、Consul Connect 邊車和微服務容器的 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 並將流量轉發到具有該協議和端口的服務。

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM