Spring Cloud Zookeeper 和 Feign 使用 Fargate 部署在 AWS ECS 上
Spring Cloud Zookeeper and Feign deployed on AWS ECS with Fargate
我有两个 Spring 启动应用程序,都使用 Spring Cloud Zookeeper 进行服务发现,其中一个使用 Feign 与另一个进行通信,如所述 here
当部署在本地主机上并通过 docker-compose
作为 docker 图像时一切正常,但是当作为单独的 Tasks/Services 部署到 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)]
请注意,此处的响应有点像标准 Tomcat 404 响应。
我已经看到为这个 AWS 部署存储在 Zookeeper 中的值,它似乎将 IP 地址作为 address
的值,我不确定这是否正确。
{
"name": "my-api",
"id": "323be0b7-8ad8-4061-846e-abcdac2bbbca",
"address": "169.254.xxx.xxx",
"port": 8080,
"sslPort": null,
...
此 IP 地址既不匹配 public 也不匹配与 ECS 任务关联的 ENI 的私有 IP。
如果我用 ENI 的 public IP 手动替换 Zookeeper 条目的 address
值,它会再次正常工作(但不是私有 IP)。但是很明显,重新部署后又会坏掉。
感谢任何帮助
Spring Cloud 猜测要使用的主机或 IP 地址。如果在包含 public IP 的主机上设置了环境变量,您可以使用它来设置 address
.
spring.cloud.zookeeper.discovery.instanceIpAddress=${MY_IP_ENV_VAR}
否则,根据documentation,您可以配置网络接口忽略:
spring:
cloud:
inetutils:
ignoredInterfaces:
- docker0
- ecs-eth0 #ecs private network
- veth.*
或首选的 IP 地址范围:
spring:
cloud:
inetutils:
preferredNetworks:
- 192.168
- 10.0
我有两个 Spring 启动应用程序,都使用 Spring Cloud Zookeeper 进行服务发现,其中一个使用 Feign 与另一个进行通信,如所述 here
当部署在本地主机上并通过 docker-compose
作为 docker 图像时一切正常,但是当作为单独的 Tasks/Services 部署到 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)]
请注意,此处的响应有点像标准 Tomcat 404 响应。
我已经看到为这个 AWS 部署存储在 Zookeeper 中的值,它似乎将 IP 地址作为 address
的值,我不确定这是否正确。
{
"name": "my-api",
"id": "323be0b7-8ad8-4061-846e-abcdac2bbbca",
"address": "169.254.xxx.xxx",
"port": 8080,
"sslPort": null,
...
此 IP 地址既不匹配 public 也不匹配与 ECS 任务关联的 ENI 的私有 IP。
如果我用 ENI 的 public IP 手动替换 Zookeeper 条目的 address
值,它会再次正常工作(但不是私有 IP)。但是很明显,重新部署后又会坏掉。
感谢任何帮助
Spring Cloud 猜测要使用的主机或 IP 地址。如果在包含 public IP 的主机上设置了环境变量,您可以使用它来设置 address
.
spring.cloud.zookeeper.discovery.instanceIpAddress=${MY_IP_ENV_VAR}
否则,根据documentation,您可以配置网络接口忽略:
spring:
cloud:
inetutils:
ignoredInterfaces:
- docker0
- ecs-eth0 #ecs private network
- veth.*
或首选的 IP 地址范围:
spring:
cloud:
inetutils:
preferredNetworks:
- 192.168
- 10.0