关键问题描述

在swarm mode 集群中,所有服务都挂接到自定义的overlay网络上,但是在服务注册到eureka的时候,会出现服务A注册到eureka时候,有些服务A的实例使用ingress网络地址,有些服务A的实例使用自定义的overlay网络地址。使用ingress网络地址的服务A实例不能被其他服务访问
10.255.xx.xx的是ingress网络地址,不能被其他服务访问
10.0.2.xx的是自创的overlay网络地址,可以被其他服务访问

原因

如果服务对外公布了端口,那么服务就会被挂接到ingress网络,因此服务会使用有多个网卡(ingress的,自定义网络的),所以在服务注册时,需要指定使用的网卡(或通过网段)来确保服务的可访问性。

解决方案

1.创建overlay网络时,指定网段:

  1. docker network create -d overlay --subnet 10.0.3.0/24 ecoupons-overlay

2.微服务指定网段:

eureka.instance.prefer-ip-address=true
spring.cloud.inetutils.preferred-networks=10.0.3