最近在使用Spring Cloud Alibaba这一套微服务解决方案,可是在服务注册的时候,网关死活找不到微服务地址,本身的微服务经过网关怎么也访问不到。git
查找缘由
仔细一查才发现,网关去访问了一个莫名其妙的IP地址,
去Nacos服务详情去看,果真,个人微服务注册到Nacos的IP地址上也是这个地址,
而后我去我电脑查找这个IP地址,还真有这么一个地址,那么问题来了,Nacos为何会随意找个本机IP地址而后注册上去?github
Nacos服务注册的IP
Nacos注册中心是: https://github.com/alibaba/nacos正则表达式
各个服务经过Nacos客户端将服务信息注册到Nacos上
当Nacos服务注册的IP默认选择出问题时,能够经过查阅对应的客户端文档,来选择配置不一样的网卡或者IP
(参考org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties的配置
)spring
解决办法
例如,使用了Spring cloud alibaba(官方文档)做为Nacos客户端,服务默认获取了内网IP 192.168.1.21,能够经过配置spring.cloud.inetutils.preferred-networks=10.34.12,使服务获取内网中前缀为10.34.12的IP微服务
基本配置
# 若是选择固定Ip注册能够配置 spring.cloud.nacos.discovery.ip = 10.2.11.11 spring.cloud.nacos.discovery.port = 9090 # 若是选择固定网卡配置项 spring.cloud.nacos.discovery.networkInterface = eth0 # 若是想更丰富的选择,能够使用spring cloud 的工具 InetUtils进行配置 # 具体说明能够自行检索: https://github.com/spring-cloud/spring-cloud-commons/blob/master/docs/src/main/asciidoc/spring-cloud-commons.adoc spring.cloud.inetutils.default-hostname spring.cloud.inetutils.default-ip-address spring.cloud.inetutils.ignored-interfaces[0]=eth0 # 忽略网卡,eth0 spring.cloud.inetutils.ignored-interfaces=eth.* # 忽略网卡,eth.*,正则表达式 spring.cloud.inetutils.preferred-networks=10.34.12 # 选择符合前缀的IP做为服务注册IP spring.cloud.inetutils.timeout-seconds spring.cloud.inetutils.use-only-site-local-interfaces
更多配置
spring.cloud.nacos.discovery.server-addr #Nacos Server 启动监听的ip地址和端口 spring.cloud.nacos.discovery.service #给当前的服务命名 spring.cloud.nacos.discovery.weight #取值范围 1 到 100,数值越大,权重越大 spring.cloud.nacos.discovery.network-interface #当IP未配置时,注册的IP为此网卡所对应的IP地址,若是此项也未配置,则默认取第一块网卡的地址 spring.cloud.nacos.discovery.ip # 优先级最高 spring.cloud.nacos.discovery.port # 默认状况下不用配置,会自动探测 spring.cloud.nacos.discovery.namespace # 经常使用场景之一是不一样环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 spring.cloud.nacos.discovery.access-key # 当要上阿里云时,阿里云上面的一个云帐号名 spring.cloud.nacos.discovery.secret-key # 当要上阿里云时,阿里云上面的一个云帐号密码 spring.cloud.nacos.discovery.metadata #使用Map格式配置,用户能够根据本身的须要自定义一些和服务相关的元数据信息 spring.cloud.nacos.discovery.log-name # 日志文件名 spring.cloud.nacos.discovery.enpoint # 地域的某个服务的入口域名,经过此域名能够动态地拿到服务端地址 ribbon.nacos.enabled # 是否集成Ribbon 默认为true