ecs中容器间的调用问题


  在不同虚拟机中的容器互相调用时,使用alb或者nlb都没有问题。

  但在同一台虚拟机中,如果有两个容器:容器A和容器B需要通信,则只能用4层NLB负载均衡进行通信,如下图,只有nlb支持保留源ip作为信息头。当在走负载均衡时,a和b给负载均衡的信息头的源ip都是本虚拟机的ip,所以当a发送给负载均衡信息后往b传,由于b识别到信息头的源ip与自己本机ip是相同的就会丢弃信息。因此,在负载均衡的目标群组中需要取消“保留信息头”这一功能。取消这一功能后,在a将消息传送给lb后,lb会把信息头的源ip改成自己的负载均衡器的ip,然后发送给b,由于信息头中的源ip不再是ab所在虚拟机的ip而是lb的ip,所以b可以正常接收到a的消息。

   在cf的AWS::ElasticLoadBalancingV2::TargetGroup字段中添加 

TargetGroupAttributes:
        - Key: preserve_client_ip.enabled
Value: false

  且在NLB中是没有安全组的,当负载均衡在不同子网中通信时,需要在配置中打开不同子网之间的负载均衡通信。

TargetGroupAttributes:
        - Key: preserve_client_ip.enabled
          Value: false

  aws的帮助文档当选择中文模式时,由于网站中很多文档没有翻译,所以这些没有翻译的文档会缺失,选择英文模式,就会显示全部文档。在帮助文档的cf中选择模板参考就可以看到所有的模板参数等。