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

### 在 Docker Swarm 中部署 Nacos 的最佳实践 在 Docker Swarm 中部署 Nacos 可以通过单机模式 (Standalone) 或者集群模式 (Cluster) 来实现。以下是两种方式的具体操作方法以及注意事项。 #### 单机模式部署 Nacos 对于开发环境或者轻量级应用,可以采用 Standalone 模式来快速启动 Nacos 服务。这种方式简单易用,适合测试场景。 运行以下命令即可完成单机模式的部署: ```bash docker stack deploy --compose-file nacos_standalone_swarm.yaml nacos ``` 此命令会基于 `nacos_standalone_swarm.yaml` 文件定义的服务配置,在 Docker Swarm 集群中启动 Nacos[^2]。 #### 集群模式部署 Nacos 如果需要高可用性和负载均衡,则应选择 Cluster 模式。这种模式下通常会在多个节点上分布 Nacos 实例,并共享数据存储。 1. **准备必要的目录结构** 在每个参与部署的节点上创建所需的目录并复制相应的配置文件到指定位置。例如: ```bash mkdir -p /mydata/nacos/cluster_logs/nacos1 mkdir -p /mydata/nacos/init.d/ mkdir -p /mydata/nacos/env/ cp ./custom.properties /mydata/nacos/init.d cp ./nacos-hostname.env /mydata/nacos/env ``` 这些步骤确保了各实例拥有独立的工作空间和一致的初始化参数设置[^3]。 2. **编写 Compose 文件** 创建一个名为 `docker-compose-swarm-nacos.yml` 的 YAML 文件用于描述服务架构。下面是一个简单的例子: ```yaml version: '3' services: nacos: image: nacos/nacos-server:latest ports: - "8848:8848" environment: MODE: cluster SPRING_DATASOURCE_PLATFORM: mysql MYSQL_SERVICE_HOST: db_host MYSQL_SERVICE_PORT: 3306 MYSQL_SERVICE_USER: root MYSQL_SERVICE_PASSWORD: password MYSQL_SERVICE_DB_NAME: nacos_config volumes: - /mydata/nacos/logs:/home/nacos/logs - /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties ``` 3. **执行部署指令** 使用如下命令加载上述 compose 文件并将服务发布到 Swarm 网络之中: ```bash docker stack deploy -c docker-compose-swarm-nacos.yml nacos ``` 此过程将会依据所给定的模板自动分配资源并启动容器化后的应用程序[^1]。 #### 注意事项 - 确认所有目标机器已加入同一个 Docker Swarm 组织; - 如果选用 MySQL 数据库作为持久层支持,请提前搭建好数据库服务器并与之建立连接关系; - 对于生产环境中建议启用 SSL/TLS 加密通信保护敏感信息传输安全;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值