本方式使用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 lanheader@163.com
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
完畢!!!