Spring Cloud Zookeeper和Feign与Fargate一起部署在AWS ECS上



我有两个Spring Boot应用程序,都使用Spring Cloud Zookeeper进行服务发现,其中一个使用Feign与另一个进行对话,如下所述

当通过docker-compose部署在localhost上并作为docker镜像时,一切都很好,但当作为单独的任务/服务部署到AWS ECS时(使用默认的awsvpc网络模式(,两者之间的通信不再有效,Feign客户端错误为:

feign.FeignException$NotFound: [404 ] during [GET] to [http://my-api/api/workspace-context] [APIKeyService#getContextFromAPIKey(String)]: [<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} ... (431 bytes)]

请注意,这里的响应看起来有点像标准的Tomcat404响应。

我已经看到了为这个AWS部署存储在Zookeeper中的值,它似乎将一个IP地址作为address的值,我不确定这是否正确。

{
"name": "my-api",
"id": "323be0b7-8ad8-4061-846e-abcdac2bbbca",
"address": "169.254.xxx.xxx",
"port": 8080,
"sslPort": null,
...

该IP地址与ECS任务关联的ENI的公共IP和私有IP都不匹配。

如果我手动将Zookeeper条目的address值替换为ENI的公共IP,它将再次正常工作(但不使用私有IP(。但很明显,在新的部署之后,它会再次被打破。

感谢的任何帮助

Spring Cloud猜测要使用什么主机或IP地址。如果在包含公共IP的主机上设置了env-var,则可以使用它来设置address

spring.cloud.zookeeper.discovery.instanceIpAddress=${MY_IP_ENV_VAR}

否则,根据文档,您可以将网络接口配置为忽略:

spring:
cloud:
inetutils:
ignoredInterfaces:
- docker0
- ecs-eth0 #ecs private network
- veth.*

或者更喜欢什么IP地址范围:

spring:
cloud:
inetutils:
preferredNetworks:
- 192.168
- 10.0

相关内容

  • 没有找到相关文章

最新更新