在使用Spring Cloud多人协作开发时有一个场景:我本机启动了Eureka注册中心,其他人机器需要将服务注册到我本机的Eureka。(服务端和客户端在不同机器上)

  这时出现了一个问题:服务成功注册到Eureka,但是该服务接口无法访问。

  查看日志:gateway下的日志显示服务找不到。

  查找问题:尝试telnet该服务的IP地址,发现网络不通。为了确认IP地址无误,找到那台机器,发现机器上还启动了虚拟机,存在多个网卡。服务启动在PC本地,注册时将虚拟机的IP注册到了Eureka,所以无法访问。

  为了解决这个问题,网上查找了一些资料,并做了一些尝试。有以下几种方案:

一、忽略指定网卡

  在Eureka客户端加上配置:

spring:
cloud:
inetutils:
# 忽略指定网卡,支持正则表达式(这里使用正则表达式忽略所有虚拟机网卡)
ignoredInterfaces: ['VMware.*'] eureka:
instance:
#注册时使用ip而不是主机名
prefer-ip-address: true

  

二、客户端指定IP

  指定IP有三种方式:

  • 在Eureka客户端加上配置:
eureka:
instance:
#注册时使用ip而不是主机名
prefer-ip-address: true
# 指定此客户端的ip
ip-address: 127.0.0.1
  • 或
spring:
cloud:
inetutils:
# 指定此客户端的ip
default-ip-address: 127.0.0.1
eureka:
instance:
#注册时使用ip而不是主机名
prefer-ip-address: true
  • 客户端启动时指定IP(未测试)
java -jar -Dspring.cloud.inetutils.preferred-networks=127.0.0.1
三、配置hosts文件

  配置本机的主机名,然后再/etc/hosts文件中将本机的主机名映射到指定有效的IP地址。

四、使用本地网卡

  这个方法在我测试的时候的无效的,但是看到很多文章有写,不知道是不是我哪里配置还有问题,所以在这里也列出来。

  在Eureka客户端加上配置:

spring:
cloud:
inetutils:
# 是否启用本地回环网卡
use-only-site-local-interfaces: true eureka:
instance:
#注册时使用ip而不是主机名
prefer-ip-address: true
  总结

  这些配置的目的就一个,使客户端注册时使用真实有效的IP。需要通过一些配置,使它注册时使用我们理想的IP,这跟Eureka Client探测本机IP的逻辑有关。查找资料,Eureka Client探测本机IP的实现是调用了Spring的InetUtils工具类的findFirstNonLoopbackAddress()方法。该方法会获取所有网卡,取ip地址合理、索引值最小且不在忽略列表的网卡的IP地址作为结果。如果没有找到合适的IP, 就调用InetAddress.getLocalHost()方法。

Eureka客户端注册多网卡下IP选择问题的更多相关文章

  1. 记一次eureka客户端注册失败的问题

    最近老大给了一台新服务器,做测试用,从装软件开始,到把整个环境搭起来,因为之前没有完成搭过,所以费了几天时间,最后总算是成功跑起来了.昨天早上来更新下项目,在测试服务器上重新发布了一下,结果发现服务注 ...

  2. java框架之SpringCloud(3)-Eureka服务注册与发现

    在上一章节完成了一个简单的微服务案例,下面就通过在这个案例的基础上集成 Eureka 来学习 Eureka. 介绍 概述 Eureka 是 Netflix 的一个子模块,也是核心模块之一.Eureka ...

  3. [SpringCloud教程]3. Eureka服务注册中心集成

    新微服务项目多半采用Nacos作为服务注册与发现中心,但是旧项目可能使用Eureka.zookeeper.Consul.Nacos作为服务注册中心. 新项目建议使用Nacos作为服务注册中心 Spri ...

  4. 多网卡环境下Eureka服务注册IP选择问题

    一.问题场景 服务器上分别配置了eth0, eth1和eth2三块网卡,只有eth1的地址可供其它机器访问,eth0和eth2的 IP 无效.在这种情况下,服务注册时Eureka Client会自动选 ...

  5. Spring Cloud Netflix Eureka: 多网卡环境下Eureka服务注册IP选择问题

    https://blog.csdn.net/neosmith/article/details/53126924 通过源码可以看出,该工具类会获取所有网卡,依次进行遍历,取ip地址合理.索引值最小且不在 ...

  6. Eureka客户端网卡和网段选择

    当机器上有多个网卡或者机器上配置了回环地址的时候,Eureka客户端呈报给服务端的IP将不可预见,为了指定IP我们需要增加以下配置: 在bootstrap.yml中增加配置内容: spring: cl ...

  7. Eureka在有虚拟网卡的情况下获取正确的IP

    发现问题 最近项目在Eureka注册时,发现一个问题:注册的IP地址不是 192.168.0.XXX 的网络IP,而是另外一个网段的地址,如图 通过 ipconfig 命令查看本机的IP地址发现,该I ...

  8. SpringCloud系列六:Eureka的自我保护模式、IP选择、健康检查

    1. 回顾 前面讲了很多Eureka的用法,比如Eureka Server.Eureka Server的高可用.Eureka Server的用户认证(虽然未完全实现).元数据等, 这章将讲解剩下的自我 ...

  9. Spring Cloud Eureka 服务注册列表显示 IP 配置问题

    服务提供者向 Eureka 注册中心注册,默认以 hostname 的形式显示,Eureka 服务页面显示的服务是机器名:端口,并不是IP+端口的形式 ,可以通过修改服务提供者配置自己的 IP 地址, ...

随机推荐

  1. 关于Visual Studio调试C/C++,JS,PHP,JAVA,Python等语言的方法

    我在开始接触vs code后,确实对它的高颜值和小巧灵活而着迷,但是有一个非常现实的问题,相对于vs来说,vscode是一个代码编辑器,而不是一个IDE,在代码编译运行上存在着极大的问题,尤其是开始编 ...

  2. Swift 加载 xib 崩溃问题

    新版本用 Swift开发 遇到的坑 解决方法

  3. mui getJSON实现jsonp跨域

    //刚开始做APP的时候,后台给的方式是jsonp,然后就百度mui框架的jsonp跨域,看了好多文章,都说可以支持,但是大部分都是直接把别人复制来的,都不知道是不是真的能支持,做好打包完的时候,下载 ...

  4. Embedding层

    示例解释: model = Sequential() model.add(Embedding(1000, 64, input_length=10)) #输入中的数值最大值是1000,输出的第三维度是6 ...

  5. ubuntu 安装vue+element

    1.安装npm sudo apt install npm 检测安装npm -v 因为npm安装软件慢,可设置淘宝镜像 npm config set registry https://registry. ...

  6. .Net WebApi开发SharePoint出现System.IO.FileNotFoundException: 找不到位于的 Web 应用程序

    System.IO.FileNotFoundException: 找不到位于 http://xxx/sites/xxxx 的 Web 应用程序.请确认正确键入了此 URL.如果此 URL 需要提供现有 ...

  7. mysql的like子句

    直接上例子 查询字段以 php 开头的信息. SELECT * FROM position WHERE name LIKE 'php%'; 查询字段包含 php 的信息. SELECT * FROM ...

  8. poj 3468 A Simple Problem with Integers(线段树区间更新)

    Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...

  9. 洛谷P2689 东南西北

    https://www.luogu.org/problemnew/show/P2689 #include<iostream> #include<algorithm> using ...

  10. 微软develop apps在QQ上部分功能的实现

    最近我对微软的develop apps的文档进行了简读,在感叹UWP在支持服务上的全面的同时,我不禁在在常用的APP上对于这些功能支持进行了部分的寻找对应.而我进行功能对照的,就是平时很常用的一款手机 ...