Docker Swarm Nacos指定容器虚拟IP自定义网络

引用地址:https://blog.csdn.net/qierkang/article/details/114469609

Docker Swarm初始化集群
# 在manage机器初始化主节点
docker swarm init
得到:docker swarm join --token SWMTKN-1-0jluwrk0utcegtz87jg2s6f6rvblyfm2due5yjhun9lqc71yyv-9zrrbpept3qzy73ue98tr4ldm 192.168.3.63:2377
docker node ls #查看集群节点
# 在子节点node1加入集群
docker swarm join --token SWMTKN-1-0jluwrk0utcegtz87jg2s6f6rvblyfm2due5yjhun9lqc71yyv-9zrrbpept3qzy73ue98tr4ldm 192.168.3.xx:2377
# 在子节点node2加入集群
docker swarm join --token SWMTKN-1-0jluwrk0utcegtz87jg2s6f6rvblyfm2due5yjhun9lqc71yyv-9zrrbpept3qzy73ue98tr4ldm 192.168.3.xx:2377
# 在manage机器初始化集群网络
docker network create -d overlay --subnet=192.168.0.0/24 --gateway=192.168.0.254 --attachable by-sw-net
1
2
3
4
5
6
7
8
9
10
注意:我这边创建了一个自定义网络 by-sw-net

查看网络
# 创建初始化服务 该网络是我为项目而添加的
docker network inspect by-sw-net
# 查看Containers节点能看到目前注册进来的服务,问题是其他服务注册到哪里了?
# 原来是docker swarm 网络会有一个默认的网络 是 ingress
docker network inspect ingress
# 查看容器网卡信息
docker exec 0792caa53281 ip addr

1
2
3
4
5
6
7
8
问题:部分服务没有指定会被随机分配到这个网卡里面 也就是eth1,可以用命令查看 看图片发现 eth0是我们自定义网络 eth1是 默认 ingress网络 我们要保证每个服务切换到eth0这样集群服务内部访问就会正常 后面会做解释 先创建集群部署
 
先创建集群服务Service
# 创建初始化服务
docker service create --with-registry-auth --replicas 1 --publish published=9100,target=9100 --network by-sw-net --reserve-memory 512M --limit-memory 512M --name by-service-gateway-prod registry-vpc.cn-hangzhou.aliyuncs.com/by366-server/by-service-gateway-prod:2021_0305_0051

docker service create --with-registry-auth --replicas 1 --publish published=9200,target=9200 --network by-sw-net --reserve-memory 512M --limit-memory 512M --name by-service-securitys-prod registry-vpc.cn-hangzhou.aliyuncs.com/by366-server/by-service-securitys-prod:2021_0305_0051

docker service create --with-registry-auth --replicas 1 --publish published=9300,target=9300 --network by-sw-net --reserve-memory 512M --limit-memory 512M --name by-service-job-prod  registry-vpc.cn-hangzhou.aliyuncs.com/by366-server/by-service-job-prod:2021_0306_0129

docker service create --with-registry-auth --replicas 1 --publish published=9001,target=9001 --network by-sw-net --reserve-memory 512M --limit-memory 512M --name by-service-cust-prod registry-vpc.cn-hangzhou.aliyuncs.com/by366-server/by-service-cust-prod:2021_0305_0100

1
2
3
4
5
6
7
8
9
当创建多个比如10来个服务的时候会发现,服务注册的端口在Nacos显示不一致导致服务和服务之间调用会出现问题


这时候需要进行配置 我们可以进行查询,先查看Service网络
# 查询部署的服务
docker service ls
# 查看服务详情信息
docker inspect 0nc7v7f6oje2

1
2
3
4
5
可以查询VirtualIPs 能看到会有多个网卡 或查询
或者直接查询docker service inspect wcsmuap81i2q -f “{{ .Endpoint.VirtualIPs }}”

 
这时候会发现有的服务注册的IP是192有的服务注册是10开头(这里就会有问题 服务调用connect 调用不通)
这里有个比较蠢的方法可以解决暂时的需求
# 先断开网络
docker network disconnect by-sw-net f754aba2ea9c
# 在从新加入创建的自定义网络
docker network connect by-sw-net f754aba2ea9c
# 在重启网络,这样Nacos注册的IP会变成192开头的
docker restart f754aba2ea9c
1
2
3
4
5
6
但是会存在一个问题因为是容器 这时候原先的10端口注册进来不会被kill 这时候需要手动下线这个服务否则一样会存在问题 如图:

解决方案 :加入集群,初始化自定义网络后
在项目bootstrap.yml下手 增加配置:
spring:
  cloud:
      inetutils:
          ignored-interfaces: eth.*
          preferred-networks: 192.168.0
 
这时候从新更新启动service服务会发现就正常了 有哪些服务调用就要改哪些服务

————————————————
版权声明:本文为CSDN博主「薯条大爹」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qierkang/article/details/114469609

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值