日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

主机overlay和网络overlay_Docker网络篇之overlay模式

發布時間:2024/10/12 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主机overlay和网络overlay_Docker网络篇之overlay模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

overlay網絡簡介

前面介紹過的host網絡模式和bridge網絡模式都是在單體的docker服務器上的容器間的網絡通信。對于多個docker服務器上的多個容器間網絡通信就需要使用到overlay網絡模式了。

overlay網絡常常用于docker swarm集群上的服務編排。當初始化docker swarm集群或者docker主機加入已存在的swarm集群時,會默認創建一個叫ingress的overlay網絡和一個叫docker_gwbridge的bridge網絡。其中docker_gwbridge的作用是將ingress跟宿主機的網絡接口連接,這樣才能將流量發送到swarm集群的每個節點上實現網絡通信。

如果創建一個swarm集群的服務而沒有自定義網絡,那么會默認將服務連接到ingress的overlay網絡上。建議每個swarm集群的服務都自定義overlay網絡,這樣可以實現不同的swarm集群服務間的網絡隔離。

接下來說明overlay網絡的使用,需要準備兩臺臺已安裝docker的服務器,一臺初始化為manager節點,另一臺加入swarm集群作為worker節點,可參考Docker系列之Docker Swarm容器管理與調度。

注:?swarm集群需要用2377、7946、4798端口,配置防火墻的端口白名單或關閉防火墻。

使用overlay網絡編排部署服務

使用swarm集群部署編排服務,其網絡可以先創建好,而后在docker-compose.yml中配置引用。也可以直接在docker-compose.yml中定義,部署服務時會自動創建網絡。

注:?swarm集群管理的相關命令只能在manager節點運行。

自定義overlay網絡:

$ docker network create -d overlay --subnet=10.11.0.0/16 my-overlay

定義一個overlay網絡,名為my-overlay,網段為10.11.0.0/16。

查看網絡列表:

$ docker network ls
NETWORK ID NAME DRIVER SCOPE
20706abe43b3 bridge bridge local
87e7be65d0ce docker_gwbridge bridge local
d2ad0895e4f3 host host local
3rrki5qjsbr4 ingress overlay swarm
qse9xsv76lbp my-overlay overlay swarm
8e5de9308b80 none null local

在manager節點可以看到新創建的my-overlay在列表中,如果此時直接在worker節點上執行docker network ls是看不到my-overlay網絡的,當部署swarm集群服務并且引用my-overlay網絡,將服務部署在worker節點上時,就可以看到my-overlay網絡已創建。

下面以一個tomcat與redis的服務編排來驗證一下跨宿主機的網絡通信。

在docker-compose.yml中引用網絡,如下:

version: '3'
services:
tomcat:
image: tomcat:8.5
networks:
- tc-net
ports:
- 8080:8080
deploy:
replicas: 2
restart_policy:
condition: any
redis:
image: redis:5.0
networks:
- tc-net
deploy:
replicas: 1
restart_policy:
condition: any
networks:
tc-net:
driver: overlay
external:
name: my-overlay

作為參考,在docker-compose.yml中定義網絡:

...
networks:
tc-net:
driver: overlay
ipam:
config:
- subnet: 10.15.0.0/26

在docker-compose.yml中定義tomcat和redis兩個服務,使用external屬性來引用已經創建好的網絡my-overlay。

部署服務:

# manager節點
docker stack deploy -c docker-compose.yml tc

查看服務:

# manager節點
$ docker stack ps tc

ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
1l0pkds2izjh tc_tomcat.1 tomcat:8.5 docker-manager Running Running 5 minutes ago
6icmjpn4wugt tc_redis.1 redis:5.0 docker-manager Running Running 5 minutes ago
z2j2nahaxe3j tc_tomcat.2 tomcat:8.5 docker-worker Running Running 5 minutes ago

可以看到tomcat服務在manager和worker節點各有一個,redis服務在manager節點。

接下來分別在manager節點和worker節點上進入到tomcat容器中ping一下redis服務,來驗證一下跨docker主機的網絡通信。

manager節點

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
739058b19824 tomcat:8.5 "catalina.sh run" About a minute ago Up 58 seconds 8080/tcp tc_tomcat.1.1l0pkds2izjhju9phcil1mv02
a59d511157f4 redis:5.0 "docker-entrypoint.sh..." About a minute ago Up About a minute 6379/tcp tc_redis.1.6icmjpn4wugtx22xqie0bofq2
$ docker exec -it 739058b19824 bash
root@739058b19824:/usr/local/tomcat# ping -c 2 redis

PING redis (10.11.40.60) 56(84) bytes of data.
64 bytes from 10.11.40.60 (10.11.40.60): icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from 10.11.40.60 (10.11.40.60): icmp_seq=2 ttl=64 time=0.040 ms

--- redis ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 134ms
rtt min/avg/max/mdev = 0.040/0.046/0.052/0.006 ms

在manager節點上是可以ping通redis服務的。

worker節點

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd3e3301de7d tomcat:8.5 "catalina.sh run" About a minute ago Up About a minute 8080/tcp tc_tomcat.2.z2j2nahaxe3j403j21at7j9a6
$ docker exec -it dd3e3301de7d bash
root@dd3e3301de7d:/usr/local/tomcat# ping -c 2 redis

PING redis (10.11.40.60) 56(84) bytes of data.
64 bytes from 10.11.40.60 (10.11.40.60): icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from 10.11.40.60 (10.11.40.60): icmp_seq=2 ttl=64 time=0.067 ms

--- redis ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.053/0.060/0.067/0.007 ms

可以看到在worker節點上同樣可以ping通redis服務。

以上也能說明通過自定義overlay網絡實現了跨宿主機的網絡通信,這也是常用swarm集群部署服務的原因所在。

使用overlay實現單個容器服務與swarm集群服務的通信

在compose file的3.2版本后增加了對網絡設置的attachable屬性,將其設置為true,可以實現單個容器連接swarm集群服務的overlay網絡,從而實現單個容器與swarm集群的服務間的網絡通信。

注:?單個容器與swarm集群服務進行網絡通信的前提是,單個容器所在的宿主機需要加入到swarm集群作為一節點。

下面以tomcat的swarm集群為例,在外部啟動redis服務,將redis連接到tomcat所在的overlay網絡,而后驗證他們之間的網絡通信。

manager節點

tomcat服務的compose file如下:

version: '3.2'
services:
tomcat:
image: tomcat:8.5
networks:
- tc-net
ports:
- 8080:8080
deploy:
replicas: 2
restart_policy:
condition: any
networks:
tc-net:
driver: overlay
attachable: true
ipam:
config:
- subnet: 10.15.0.0/26

部署服務:

$ docker stack deploy -c docker-compose.yml tc

查看網絡:

$ docker network ls

NETWORK ID NAME DRIVER SCOPE
927ca7d69973 bridge bridge local
87e7be65d0ce docker_gwbridge bridge local
d2ad0895e4f3 host host local
3rrki5qjsbr4 ingress overlay swarm
pknwl0oj3iu2 my-overlay overlay swarm
8e5de9308b80 none null local
650m9x2wl04j tc_tc-net overlay swarm

在網絡列表中新增了一個tc_tc-net,這也是我們在compose file中定義的overlay網絡。

在manager節點上運行一個redis的單容器服務,指定其連接到tomcat所在的overlay網絡:

$ docker run --name my_redis -it -d -p 6379:6379 --network tc_tc-net redis:5.0
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
481fbb0e5b78 redis:5.0 "docker-entrypoint.sh..." 4 seconds ago Up 2 seconds 0.0.0.0:6379->6379/tcp my_redis
254e161ae63c tomcat:8.5 "catalina.sh run" 34 seconds ago Up 33 seconds 8080/tcp tc_tomcat.2.ttonphlbithf2g2ocgsqltnna

接下來驗證網絡通信,進入tomcat服務,ping一下redis的服務,如下:

$ docker exec -it 254e161ae63c bash
root@254e161ae63c:/usr/local/tomcat# ping -c 2 my_redis

PING my_redis (10.15.0.7) 56(84) bytes of data.
64 bytes from my_redis.tc_tc-net (10.15.0.7): icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from my_redis.tc_tc-net (10.15.0.7): icmp_seq=2 ttl=64 time=0.066 ms

--- my_redis ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.066/0.066/0.066/0.000 ms

worker節點

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58083e1ac1c7 tomcat:8.5 "catalina.sh run" 2 minutes ago Up 2 minutes 8080/tcp tc_tomcat.1.ecdd4yhm2wrnqjeobi2j6c7f5
$ docker exec -it 58083e1ac1c7 bash
root@58083e1ac1c7:/usr/local/tomcat# ping -c 2 my_redis

PING my_redis (10.15.0.7) 56(84) bytes of data.
64 bytes from my_redis.tc_tc-net (10.15.0.7): icmp_seq=1 ttl=64 time=0.569 ms
64 bytes from my_redis.tc_tc-net (10.15.0.7): icmp_seq=2 ttl=64 time=0.424 ms

--- my_redis ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.424/0.496/0.569/0.075 ms

以上,實現和驗證了單個容器與swarm服務集群間的網絡通信。

如果有收獲歡迎分享給你的朋友一起學習和討論,也歡迎掃碼關注公眾號進擊的極客。

相關鏈接:

Docker系列之Docker Swarm容器管理與調度

Docker網絡篇之bridge網絡

總結

以上是生活随笔為你收集整理的主机overlay和网络overlay_Docker网络篇之overlay模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。