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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker 新网络 overlay 网络

發(fā)布時間:2025/7/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker 新网络 overlay 网络 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Overlay網(wǎng)絡(luò)是指在不改變現(xiàn)有網(wǎng)絡(luò)基礎(chǔ)設(shè)施的前提下,通過某種約定通信協(xié)議,把二層報文封裝在IP報文之上的新的數(shù)據(jù)格式。

?

這樣不但能夠充分利用成熟的IP路由協(xié)議進(jìn)程數(shù)據(jù)分發(fā),而且在Overlay技術(shù)中采用擴(kuò)展的隔離標(biāo)識位數(shù),能夠突破VLAN的4000數(shù)量限制,

?

支持高達(dá)16M的用戶,并在必要時可將廣播流量轉(zhuǎn)化為組播流量,避免廣播數(shù)據(jù)泛濫。

?

因此,Overlay網(wǎng)絡(luò)實際上是目前最主流的容器跨節(jié)點數(shù)據(jù)傳輸和路由方案。

?

Overlay網(wǎng)絡(luò)的實現(xiàn)方式可以有許多種,其中IETF(國際互聯(lián)網(wǎng)工程任務(wù)組)制定了三種Overlay的實現(xiàn)標(biāo)準(zhǔn)

?

1. 虛擬可擴(kuò)展LAN(VXLAN)

?

2. 采用通用路由封裝的網(wǎng)絡(luò)虛擬化(NVGRE)

?

3. 無狀態(tài)傳輸協(xié)議(SST)

?

Docker內(nèi)置的Overlay網(wǎng)絡(luò)是采用IETF標(biāo)準(zhǔn)的VXLAN方式,并且是VXLAN中普遍認(rèn)為最適合大規(guī)模的云計算虛擬化環(huán)境的SDN Controller模式。

?

?

Docker的Overlay網(wǎng)絡(luò)功能與其Swarm集群是緊密整合的,因此為了使用Docker的內(nèi)置跨節(jié)點通信功能,最簡單的方式就是采納Swarm作為集群的解決方案。

?

在 docker 1.9 中,要使用 Swarm + overlay 網(wǎng)絡(luò)架構(gòu),還需要以下幾個條件:

?

1. 所有Swarm節(jié)點的Linux系統(tǒng)內(nèi)核版本不低于3.16 ?(在 docker 1.10 后面版本中,已經(jīng)支持內(nèi)核3.10,升級內(nèi)核實在是一個麻煩事情)

?

2. 需要一個額外的配置存儲服務(wù),例如Consul、Etcd或ZooKeeper

?

3. 所有的節(jié)點都能夠正常連接到配置存儲服務(wù)的IP和端口

?

4. 所有節(jié)點運(yùn)行的Docker后臺進(jìn)程需要使用『--cluster-store』和『--cluster-advertise』參數(shù)指定所使用的配置存儲服務(wù)地址

?

?

-------------------------------------------------------------------------------------------

服務(wù)器3臺 如下:

?

10.6.17.12

?

10.6.17.13

?

10.6.17.14

?

?

------------------------------------------------------------------------------------------

docker version

Client:

?Version: ? ? ?1.10.0-rc1

?API version: ?1.22

?Go version: ? go1.5.3

?Git commit: ? 677c593

?Built: ? ? ? ?Fri Jan 15 20:50:15 2016

?OS/Arch: ? ? ?linux/amd64

?

------------------------------------------------------------------------------------------

首先要做的是 修改主機(jī)名

?

10.6.17.12 管理節(jié)點可不修改

?

?

10.6.17.13 ?= hostnamectl --static set-hostname swarm-node-1

?

10.6.17.14 ?= hostnamectl --static set-hostname swarm-node-2

?

?

------------------------------------------------------------------------------------------

?

?

?

上面的4個條件中,第一個條件在docker 1.10 RC 版本中已經(jīng)默認(rèn)就滿足了。

?

下面我們來創(chuàng)建第二個條件中的 配置存儲服務(wù),配置存儲服務(wù)按照大家的使用習(xí)慣,自己選擇一個配置存儲。

?

由于我們java 項目一直在使用 ZooKeeper ,所以這邊選擇 ZooKeeper 作為存儲服務(wù),為了方便測試,這邊只配置 單機(jī)的 ZooKeeper 服務(wù)

?

?

-------------------------------------------------------------------------------------------

?

pull 一個 centos 的鏡像下來

?

[10.6.17.12]# docker pull centos

?

?

以下是 zookeeper 的 Dockerfile

?

-------------------------------------------------------------------------------------------

FROM centos

?

MAINTAINER jicki@qq.com?

USER root

?

# 添加erepo 源 ??

RUN rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org && rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

?

RUN yum -y install --enablerepo base wget java tar.x86_64 && mkdir -p /opt/local && wget -q -O - http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz | tar -xzf - -C /opt/local/ && mv /opt/local/zookeeper-3.4.6 /opt/local/zookeeper && cp /opt/local/zookeeper/conf/zoo_sample.cfg /opt/local/zookeeper/conf/zoo.cfg && mkdir -p /opt/local/zookeeper/data && mkdir -p /opt/local/zookeeper/log

?

ENV JAVA_HOME /usr/

?

ADD start.sh /start.sh

?

WORKDIR /opt/local/zookeeper

?

#修改配置文件

RUN sed -i 's/dataDir=\/tmp\/zookeeper/dataDir=\/opt\/local\/zookeeper\/data/g' /opt/local/zookeeper/conf/zoo.cfg

?

ENTRYPOINT ["/start.sh"]

?

# 保證前臺運(yùn)行 ?

CMD ["start-foreground"]

-------------------------------------------------------------------------------------------

?

?

[10.6.17.12]# docker build -t="zookeeper" .

?

[10.6.17.12]# docker run --restart=always -d -v /opt/data/zookeeper/data:/opt/local/zookeeper/data -v /opt/data/zookeeper/log:/opt/local/zookeeper/log -p 2181:2181 zookeeper

?

?

zookeeper 創(chuàng)建完以后,需要修改每個主機(jī)Docker后臺進(jìn)程啟動腳本里的變量內(nèi)容,并配置swarm節(jié)點.

?

[10.6.17.12]# sed -i 's/-H fd:\/\//-H tcp:\/\/10.6.17.12:2375 --cluster-store=zk:\/\/10.6.17.12:2181/store --cluster-advertise=10.6.17.12:2376/g' /lib/systemd/system/docker.service

?

[10.6.17.13]# sed -i 's/-H fd:\/\//-H tcp:\/\/10.6.17.13:2375 --cluster-store=zk:\/\/10.6.17.12:2181/store --cluster-advertise=10.6.17.13:2376/g' /lib/systemd/system/docker.service

?

[10.6.17.14]# sed -i 's/-H fd:\/\//-H tcp:\/\/10.6.17.14:2375 --cluster-store=zk:\/\/10.6.17.12:2181/store --cluster-advertise=10.6.17.14:2376/g' /lib/systemd/system/docker.service

?

?

修改完 變量內(nèi)容,執(zhí)行?

?

systemctl daemon-reload ??

?

?

并 重啟 docker ??

?

systemctl restart docker.service

?

?

由于修改和重啟Docker后臺進(jìn)程本身是比較麻煩的事情,如果用戶業(yè)務(wù)可能會使用到跨節(jié)點網(wǎng)絡(luò)通信,建議在架設(shè)Docker集群的時候就事先準(zhǔn)備配置存儲服務(wù),然后直接在添加主機(jī)節(jié)點時就可以將相應(yīng)參數(shù)加入到Docker的啟動配置中了。

?

?

接下來創(chuàng)建Overlay網(wǎng)絡(luò),我們要建的這個網(wǎng)絡(luò)是橫跨所有節(jié)點的,也就是說在每個節(jié)點都應(yīng)該有一個名稱、ID和屬性完全一致的網(wǎng)絡(luò),它們之間還要相互認(rèn)可對方為自己在不同節(jié)點的副本。如何實現(xiàn)這種效果呢?目前的Docker network命令還無法做到,因此只能借助于Swarm,下面我們創(chuàng)建Swarm 群集

?

?

首先我們選擇 10.6.17.12 這臺機(jī)器做為 master 節(jié)點 創(chuàng)建 swarm:

?

[10.6.17.12]# docker -H tcp://10.6.17.12:2375 run --name master --restart=always -d -p 8888:2375 swarm manage zk://10.6.17.12:2181/swarm

?

?

在其他兩臺Docker業(yè)務(wù)容器運(yùn)行的節(jié)點上運(yùn)行Swarm Agent服務(wù):

?

[10.6.17.13]# docker -H tcp://10.6.17.13:2375 run --name node_1 --restart=always -d swarm join --addr=10.6.17.13:2375 zk://10.6.17.12:2181/swarm

?

[10.6.17.14]# docker -H tcp://10.6.17.14:2375 run --name node_2 --restart=always -d swarm join --addr=10.6.17.14:2375 zk://10.6.17.12:2181/swarm

?

?

查看所有節(jié)點上的信息:

?

[10.6.17.12]# docker -H tcp://10.6.17.12:8888 ps -a

?

CONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? ? ? ?CREATED ? ? ? ? ? ? ? ? ?STATUS ? ? ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMES

5fc7753caa2c ? ? ? ?swarm ? ? ? ? ? ? ? "/swarm join --addr=1" ? Less than a second ago ? Up Less than a second ? 2375/tcp ? ? ? ? ? ?swarm-node-1/node_1

330b964ba732 ? ? ? ?swarm ? ? ? ? ? ? ? "/swarm join --addr=1" ? Less than a second ago ? Up Less than a second ? 2375/tcp ? ? ? ? ? ?swarm-node-2/node_2

?

?

至此 swarm 集群已經(jīng)搭建完成了。

?

Swarm提供與Docker服務(wù)完全兼容的API,因此可以直接使用docker命令進(jìn)行操作。

?

注意上面命令中創(chuàng)建Master服務(wù)時指定的外部端口號8888,它就是用來連接Swarm服務(wù)的地址。

?

?

現(xiàn)在我們就可以創(chuàng)建一個Overlay類型的網(wǎng)絡(luò)了:

?

[10.6.17.12]# docker -H tcp://10.6.17.12:8888 network create --driver=overlay ovr0

?

這個命令被發(fā)送給了Swarm服務(wù),Swarm會在所有Agent節(jié)點上添加一個屬性完全相同的Overlay類型網(wǎng)絡(luò)。

?

在每個節(jié)點上面 使用 docker network ls ?可以查看 到已經(jīng)有一個 ?ovr0 ?的 overlay 網(wǎng)絡(luò)

?

?

在Swarm的網(wǎng)絡(luò)里面,每個網(wǎng)絡(luò)的名字都會加上節(jié)點名稱作為前綴,?

如: swarm-node-1/node_1 ? ?

? ?swarm-node-2/node_2

?

但Overlay類型的網(wǎng)絡(luò)是沒有這個前綴的,這也說明了這類網(wǎng)絡(luò)是被所有節(jié)點共有的。

?

?

下面我們在Swarm中創(chuàng)建兩個連接到Overlay網(wǎng)絡(luò)的容器,并用Swarm的過濾器限制這兩個容器分別運(yùn)行在不同的節(jié)點上。

?

-------------------------------------------------------------------------------------------

?

FROM centos

?

MAINTAINER jicki@qq.com

?

RUN yum -y update; yum clean all

RUN yum -y install epel-release; yum clean all

RUN yum -y install wget; yum clean all

ADD ./nginx.sh /root/

RUN /bin/bash /root/nginx.sh

RUN rm -rf /root/nginx.sh

RUN rm -rf /opt/local/nginx/conf/nginx.conf

ADD ./nginx.conf /opt/local/nginx/conf/

RUN mkdir -p /opt/local/nginx/conf/vhost

ADD ./docker.conf /opt/local/nginx/conf/vhost

RUN chown -R upload:upload /opt/htdocs/web

EXPOSE 80 443

CMD ["/opt/local/nginx/sbin/nginx", "-g", "daemon off;"]

?

-------------------------------------------------------------------------------------------

?

?

[10.6.17.12]# docker -H tcp://10.6.17.12:8888 run --name nginx_web_1 --net ovr0 --env="constraint:node==swarm-node-1" -d -v /opt/data/nginx/logs:/opt/local/nginx/logs nginx

?

[10.6.17.12]# docker -H tcp://10.6.17.12:8888 run --name nginx_web_2 --net ovr0 --env="constraint:node==swarm-node-2" -d -v /opt/data/nginx/logs:/opt/local/nginx/logs nginx

?

?

?

創(chuàng)建完兩個容器以后,下面來來測試一下 ovr0 這個網(wǎng)絡(luò)的連通性

?

[10.6.17.12]# docker -H tcp://10.6.17.12:8888 exec -it nginx_web_1 ping nginx_web_2

?

PING nginx_web_2 (10.0.0.3) 56(84) bytes of data.

64 bytes from nginx_web_2.ovr0 (10.0.0.3): icmp_seq=1 ttl=64 time=0.360 ms

64 bytes from nginx_web_2.ovr0 (10.0.0.3): icmp_seq=2 ttl=64 time=0.247 ms

64 bytes from nginx_web_2.ovr0 (10.0.0.3): icmp_seq=3 ttl=64 time=0.234 ms

64 bytes from nginx_web_2.ovr0 (10.0.0.3): icmp_seq=4 ttl=64 time=0.241 ms

64 bytes from nginx_web_2.ovr0 (10.0.0.3): icmp_seq=5 ttl=64 time=0.212 ms

?

?

如上所示 我們已經(jīng)在Docker的Overlay網(wǎng)絡(luò)上成功的進(jìn)行了跨節(jié)點的數(shù)據(jù)通信。

?

?

?

測試兩個 ssh 的服務(wù),創(chuàng)建兩個 容器,查看容器所屬 IP 。

?

?

[10.6.17.12]# docker -H tcp://10.6.17.12:8888 run --name ssh-1 --net ovr0 --env="constraint:node==swarm-node-1" -d -p 8001:22 ssh

?

[10.6.17.12]# docker -H tcp://10.6.17.12:8888 run --name ssh-2 --net ovr0 --env="constraint:node==swarm-node-2" -d -p 8001:22 ssh

?

?

創(chuàng)建容器 IP 為 ?DHCP 分配, 按照從下向上分配, 重啟不會改變overlay 的IP 。

?

首先創(chuàng)建 ssh-1 分配IP為 10.0.0.4 ? ?創(chuàng)建 ssh-2 分配IP為 10.0.0.5

?

銷毀 ssh-1 再次創(chuàng)建 分配IP 為 10.0.0.4?

?

銷毀 ssh-1 ?ssh-2 ?先創(chuàng)建 ssh-2 分配 IP 為 10.0.0.4 ?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

在 docker 1.10 后面的版本中?--net-alias=[] ?的使用!!

?

在docker run 的時候 可指定相同的 alias ,可以實現(xiàn) 故障切換的效果。。

?

具體命令如:

?

[10.6.17.12]# docker -H tcp://10.6.17.12:8888 run --name nginx_web_1 --net ovr0 --net-alias="nginx"?--env="constraint:node==swarm-node-1" -d -v /opt/data/nginx/logs:/opt/local/nginx/logs nginx

?

[10.6.17.12]# docker -H tcp://10.6.17.12:8888 run --name nginx_web_2 --net ovr0 --net-alias="nginx"?--env="constraint:node==swarm-node-2" -d -v /opt/data/nginx/logs:/opt/local/nginx/logs nginx

?

當(dāng)我們進(jìn)入 機(jī)器里面的時候 使用 dig 查看 nginx A記錄 看到的是一個,但是 一個容器 掛掉以后

A記錄會自動綁定到另外一臺機(jī)器中。

?

?

在 docker 1.11 后面的版本中 --net-alias=[] 已經(jīng)支持 負(fù)載均衡。

?

當(dāng)我們使用 dig 查看 A記錄 時可以看到多個 A記錄

?

?

?

?

docker network disconnect ?與 ?docker network connect 命令的使用! 使用這兩個命令可達(dá)到 A B 測試 以及 快速 回滾 的效果。

?

docker network connect ? ? ?----> ?加入 指定網(wǎng)絡(luò)

?

docker network disconnect ? ----> ?退出 指定網(wǎng)絡(luò)

?

?

具體命令使用:

?

docker network disconnect ovr0 nginx_web_2 ? ? ? nginx_web_2 這個容器退出 ovr0 這個網(wǎng)絡(luò)。

?

docker network connect ovr0 nginx_web_2 ? ? ? ? ?nginx_web_2 這個容器重新加入 ovr0 這個網(wǎng)絡(luò)。

轉(zhuǎn)載于:https://www.cnblogs.com/jicki/p/5548610.html

總結(jié)

以上是生活随笔為你收集整理的Docker 新网络 overlay 网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。