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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

docker network

發(fā)布時(shí)間:2025/3/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker network 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言:前面的部分一直都是單機(jī)跑docker,但實(shí)際生產(chǎn)環(huán)境不可能只用一臺(tái)來(lái)跑。肯定會(huì)用到多臺(tái),因?yàn)樗麄兌际莾?nèi)部私有ip,那么多臺(tái)主機(jī)之間的容器如何通信?這個(gè)是個(gè)很頭疼的問(wèn)題!目前主流幾種方法如下:
1、使用路由機(jī)制打通網(wǎng)絡(luò)
2、使用Open vSwitch(OVS)打通網(wǎng)絡(luò)
3、使用flannel來(lái)打通網(wǎng)絡(luò)
4、使用Quagga來(lái)實(shí)現(xiàn)自動(dòng)學(xué)習(xí)路由

第一種:使用路由機(jī)制打通網(wǎng)絡(luò)
使用linux的路由來(lái)打通網(wǎng)絡(luò)
優(yōu)點(diǎn):

  • 常規(guī)路由技術(shù)
  • 使用傳統(tǒng)網(wǎng)絡(luò)技術(shù)
  • 簡(jiǎn)單
  • 高性能


缺點(diǎn):

  • 與現(xiàn)有網(wǎng)絡(luò)融為一體
  • 靈活性低


現(xiàn)在有兩臺(tái)Docker實(shí)例:
?

?




具體如圖,因?yàn)镈ocker默認(rèn)的內(nèi)部ip為172.17.42網(wǎng)段,所以必須要修改其中一臺(tái)的默認(rèn)網(wǎng)段以免ip沖突。
#vim /etc/sysconfig/docker-network

DOCKER_NETWORK_OPTIONS= --bip=172.18.42.1/16 -H fd:// -H=unix:///var/run/docker.sock

#systemctl daemon-reload
#reboot
?

?



ok。現(xiàn)在就可以開(kāi)始操作了。
其實(shí)就是執(zhí)行兩臺(tái)route add命令
docker 130上執(zhí)行 route add -net 172.18.0.0/16 gw 192.168.18.128
docker 128上執(zhí)行 route add -net 172.17.0.0/16 gw 192.168.18.130
ok,現(xiàn)在兩臺(tái)宿主機(jī)里的容器就可以通信了。


第二種:使用Open vSwitch(OVS)打通網(wǎng)絡(luò)
是一種主流的虛擬化大二層技術(shù)
優(yōu)點(diǎn):

  • 靈活
  • 對(duì)現(xiàn)有物理網(wǎng)絡(luò)沒(méi)要求
  • 業(yè)界主流


缺點(diǎn):

  • 軟件封裝導(dǎo)致性能下降
  • 復(fù)雜度相對(duì)較高
  • 排錯(cuò)難度高


流程圖如下:
?
?

?

?




首先安裝ovs的rpm包

file:///C:/Users/Don/Documents/My%20Knowledge/temp/d12921d0-891e-4a7f-9f37-4addd92a86fc_128_files/267978203.png

# yum install openvswitch-2.4.0-1.x86_64.rpm? ? #安裝軟件包
# /etc/init.d/openvswitch restart? ?? ?? ?? ?? ?#重啟服務(wù)
# /etc/init.d/openvswitch status? ?? ?? ?? ?? ? #查看狀態(tài)


安裝網(wǎng)橋管理工具

#yum -y install bridge-utils

配置網(wǎng)絡(luò)
ovs-vsctl add-br br0
ovs-vsctl add-port br0 gre1?--?set?interface gre1 type=gre option:remote_ip=192.168.18.128
#添加br0到本地docker0,使得容器流量通過(guò)ovs流經(jīng)tunnel
brctl addif docker0 br0

ip link?set?dev br0 up
ip link?set?dev docker0 up
iptables?-t nat?-F;?iptables?-F
ip route add?172.17.0.0/16?dev docker0


其余節(jié)點(diǎn)同樣的配置,注意ip地址即可。


第三種:使用flannel來(lái)打通網(wǎng)絡(luò)
新設(shè)計(jì)的Flannel,一種結(jié)合了路由機(jī)制與隧道技術(shù)
原理:每個(gè)主機(jī)配置一個(gè)ip段和子網(wǎng)個(gè)數(shù)。例如,可以配置一個(gè)覆蓋網(wǎng)絡(luò)使用 10.100.0.0/16段,每個(gè)主機(jī)/24個(gè)子網(wǎng)。因此主機(jī)a可以接受10.100.5.0/24,主機(jī)B可以接受10.100.18.0/24的包。flannel使用etcd來(lái)維護(hù)分配的子網(wǎng)到實(shí)際的ip地址之間的映射。對(duì)于數(shù)據(jù)路徑,flannel 使用udp來(lái)封裝ip數(shù)據(jù)報(bào),轉(zhuǎn)發(fā)到遠(yuǎn)程主機(jī)。選擇UDP作為轉(zhuǎn)發(fā)協(xié)議是因?yàn)樗艽┩阜阑饓Α@?#xff0c;AWS Classic無(wú)法轉(zhuǎn)發(fā)IPoIP or GRE 網(wǎng)絡(luò)包,是因?yàn)樗陌踩M僅僅支持TCP/UDP/ICMP。
下圖解釋了數(shù)據(jù)報(bào)通過(guò)覆蓋網(wǎng)絡(luò)轉(zhuǎn)發(fā)的路線:
?

?

部署也不是很復(fù)雜,僅需要etcd和flannel兩項(xiàng)支持即可。
etcd一般部署在單獨(dú)機(jī)器上,那么flannel就部署在docker節(jié)點(diǎn)上,每個(gè)docker節(jié)點(diǎn)上都需部署。
1、部署etcd,假設(shè)地址為192.168.1.121
yum -y install etcd? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?#安裝軟件包
vim /etc/etcd/etcd.conf? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???#修改配置文件
修改為如下:(默認(rèn)只監(jiān)聽(tīng)本地回環(huán)地址)
? ??ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
? ??ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
systemctl restart etcd? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?#重啟服務(wù)
etcdctl set /coreos.com/network/config '{ "Network": "10.1.0.0/16" }'? ?? ?? ? #添加一條網(wǎng)絡(luò)配置記錄,這個(gè)配置將用于flannel分配給每個(gè)Docker的虛擬IP地址段


2、部署flannel

從https://github.com/coreos/flannel/releases?下載最新穩(wěn)定版本,這里以0.5.5版本為例。
tar zxf flannel-0.5.5-linux-amd64.tar.gz? ?? ?#解壓文件
cp flannel-0.5.5/*?/usr/bin/? ?? ?? ?? ?? ?? ?#拷貝可執(zhí)行文件至系統(tǒng)變量path


使用systemd來(lái)管理flannel服務(wù)

vim /usr/lib/systemd/system/flanneld.service

[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
Before=docker.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/flanneld
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=/usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS
[Install]
RequiredBy=docker.service
WantedBy=multi-user.target


設(shè)置etcd地址

vim?/etc/sysconfig/flanneld
FLANNEL_ETCD= "http://192.168.1.121:2379"


由于flannel將覆蓋docker0網(wǎng)橋,所以如果Docker服務(wù)已啟動(dòng),則停止Docker服務(wù)

編寫(xiě)flannel啟動(dòng)腳本,并加入自啟動(dòng)
vim /etc/init.d/start_flannel.sh
#!/bin/bash
systemctl stop docker? ?? ?? ?? ?? ?? ?? ?#停止docker服務(wù)
systemctl restart flanneld? ?? ?? ?? ?? ? #啟動(dòng)flannel服務(wù)
mk-docker-opts.sh -i? ?? ?? ?? ?? ?? ?? ? #生成環(huán)境變量
source /run/flannel/subnet.env? ?? ?? ?? ?#將環(huán)境變量生效
ifconfig docker0 ${FLANNEL_SUBNET}? ?? ???#設(shè)置docker0的網(wǎng)卡ip
systemctl start docker? ?? ?? ?? ?? ?? ???#啟動(dòng)docker服務(wù)



ok,現(xiàn)在跨主機(jī)容器間已經(jīng)可以通信。


第四種:使用Quagga來(lái)實(shí)現(xiàn)自動(dòng)學(xué)習(xí)路由

其實(shí)這種方式是基于第一種方式的路由技術(shù),只不過(guò)路由信息不需要自己手動(dòng)添加,而是自動(dòng)學(xué)習(xí)。試想一下,如果有10臺(tái)docker,那么每臺(tái)docker就需要手動(dòng)寫(xiě)9條路由信息,是不是很慘?
Linux上安裝路由器的軟件名為Quagga,它可以配置很多種企業(yè)級(jí)的動(dòng)態(tài)路由協(xié)議。我使用的是RIPV2和OSPF同時(shí)開(kāi)啟,但安裝Quagga的方法和配置命令,太過(guò)于繁瑣。所以網(wǎng)上有大神將其Docker化了。

下載Quagga鏡像:
docker pull index.alauda.cn/georce/router



備用地址:http://pan.baidu.com/s/1sj26X8T
特別需要注意的是:docker0的網(wǎng)段不能一樣,所以需要修改docker的子網(wǎng)地址,參考第一種的設(shè)置辦法
運(yùn)行鏡像:
docker run?-itd?--name=router?--privileged?--net=host index.alauda.cn/georce/router


執(zhí)行 ip route 查看下路由表,已有別的docker0的網(wǎng)段信息。
?

?

?


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

總結(jié)

以上是生活随笔為你收集整理的docker network的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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