本方式使用docker Swarm集群的方式創建overlay 網路進行打通 背景 因java微服務使用nacos做配置中心,為瞭解決Nacos服務註冊使用Docker容器內網ip問題,使用此方案 前置條件 1、宿主機之間需要開通埠 管理埠: 2377/tcp: 用於管理 Swarm 模式集群。 ...
本方式使用docker Swarm集群的方式創建overlay 網路進行打通
背景
因java微服務使用nacos做配置中心,為瞭解決Nacos服務註冊使用Docker容器內網ip問題,使用此方案
前置條件
1、宿主機之間需要開通埠
管理埠:
2377/tcp: 用於管理 Swarm 模式集群。這是 Swarm Manager 和 Worker 節點之間進行通信的主要埠,用於集群管理和任務調度。
節點間通信埠:
2375/tcp: 用於 Docker API 的通信。在 Swarm 模式下,這個埠通常只在 Manager 節點上開啟,供外部客戶端訪問。
2376/tcp: 與 2375 類似,但使用了 TLS 加密。如果啟用了 TLS,那麼 2376 埠將被用於安全的 Docker API 訪問。
網路埠:
4789/udp: 用於 VXLAN 通信,當使用 overlay 網路驅動時會用到此埠。這是 Swarm 用於跨節點容器通信的主要埠之一。
7946/tcp and/or 7946/udp: 用於節點間的服務發現和心跳消息。這兩個埠用於 Raft 協議中的通信,以便維護集群狀態的一致性。
2、docker版本
Swarm 在 Docker 1.12 版本之前屬於一個獨立的項目,在 Docker 1.12 版本發佈之後,該項目合併到了 Docker 中,成為 Docker 的一個子命令。目前,Swarm 是 Docker 社區提供的唯一一個原生支持 Docker 集群管理的工具。它可以把多個 Docker 主機組成的系統轉換為單一的虛擬 Docker 主機,使得容器可以組成跨主機的子網網路。因此,docker版本必須大於1.12,以下我使用的docker版本為 27.1.1
安裝docker
因為docker源被屏蔽以後,安裝docker需要從阿裡源進行安裝,如果需要詳細安裝過程,請參考文檔:https://www.cnblogs.com/lanheader/p/14260710.html
前期只需要替換源即可,這裡不做過多的描述,系統我使用的是ubuntu 22
# 安裝GPG證書
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 安裝源
sudo sh -c 'echo "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list'
# 驗證是否成功安裝了docker
sudo systemctl status docker
docker --version
安裝Swarm集群
master執行
docker swarm init --advertise-addr=192.168.0.1 # 註意替換這裡的IP,IP為master的ip
Swarm initialized: current node (maw28ll7mlxuwp47z5c5vo2v1) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.0.1:2377 # 註意保存此行命令
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
work節點執行
這個是加入節點的命令,刪除節點使用 docker swarm leave
docker swarm join --token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.0.1:2377
在 manager 節點,查看當前網路集群的節點情況
root@ubuntu22:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
7r4vvml8kd2jem850rqfl158h * ubuntu22 Ready Active Leader 27.1.1
lrvsq6quwaxleqejf0w1nawvu ubuntu22 Ready Active 27.1.1
u4v4os8zats4ro795a4l6lw3y ubuntu22 Ready Active 27.1.1
root@ubuntu22:~#
在 manager 節點,創建 overlay 網路
註意,這裡強調使用--attachable參數,否則docker-compose不能使用此網路
docker network create -d overlay --attachable test
在 master 節點的查看是否創建成功
正常情況下,如果網路未激活,則節點不會有test網路,需要執行後才會出現網路
root@ubuntu22:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
28d3903acdb2 bridge bridge local
c2147e916c72 docker_gwbridge bridge local
7jczo6vw7mig test overlay swarm
63fa0e285c02 host host local
ypqnzuafqukz ingress overlay swarm
b0e97299b587 none null local
激活網路,使節點存在overlay網路
創建一個鏡像
busybox 鏡像可能拉取不到,各位大佬自行想辦法解決...,
再次感謝 方老師~
FROM busybox
MAINTAINER [email protected]
ENTRYPOINT ["tail","-f","/etc/hosts"]
打包鏡像
docker build -t busybox-swarm . swarm
激活overlay 網路
docker service create --replicas 3 --name busybox-net --network test busybox-swarm
查看服務
root@ubuntu22:~# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
iicn2h7rw3af busybox-net replicated 3/3 busybox-swarm:latest
查看節點容器工作狀態
# 查看節點
root@ubuntu22:~# docker service ps busybox-net
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
s9reawp6seu5 busybox-net.1 busybox-swarm:latest ubuntu22 Running Running 41 minutes ago
iw3fvcy3tu14 busybox-net.2 busybox-swarm:latest ubuntu22 Running Running about an hour ago
vn16j18a2jzd busybox-net.3 busybox-swarm:latest ubuntu22 Running Running about an hour ago
測試
使用docker inspect xxx 查看容器IP地址
在docker exec -it xxx sh 進入容器進行測試
Docker-compose 配置文件中添加網路
容器中執行使用test網路即可
networks:
test:
external: true
完畢!!!