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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

跟风学Docker之四:Docker网络解决方案

發布時間:2023/12/6 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跟风学Docker之四:Docker网络解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

跟風學Docker之四:Docker網絡解決方案 博客分類: docker

前言:前面的部分一直都是單機跑docker,但實際生產環境不可能只用一臺來跑。肯定會用到多臺,因為他們都是內部私有ip,那么多臺主機之間的容器如何通信?這個是個很頭疼的問題!

目前主流幾種方法如下:

1、使用路由機制打通網絡

2、使用Open vSwitch(OVS)打通網絡

3、使用flannel來打通網絡

4、使用Quagga來實現自動學習路由

?

第一種:使用路由機制打通網絡

使用linux的路由來打通網絡

優點:

  • 常規路由技術

  • 使用傳統網絡技術

  • 簡單

  • 高性能

缺點:

  • 與現有網絡融為一體

  • 靈活性低

現在有兩臺Docker實例:

具體如圖,因為Docker默認的內部ip為172.17.42網段,所以必須要修改其中一臺的默認網段以免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。現在就可以開始操作了。

其實就是執行兩臺route add命令

docker 130上執行 route add -net 172.18.0.0/16 gw 192.168.18.128

docker 128上執行 route add -net 172.17.0.0/16 gw 192.168.18.130

ok,現在兩臺宿主機里的容器就可以通信了。

?

第二種:使用Open vSwitch(OVS)打通網絡

是一種主流的虛擬化大二層技術

優點:

  • 靈活

  • 對現有物理網絡沒要求

  • 業界主流

缺點:

  • 軟件封裝導致性能下降

  • 復雜度相對較高

  • 排錯難度高

流程圖如下:

首先安裝ovs的rpm包

軟件包:http://pan.baidu.com/s/1mgU6YBe?

1 2 3 #?yum?install?openvswitch-2.4.0-1.x86_64.rpm????#安裝軟件包 #?/etc/init.d/openvswitch?restart???????????????#重啟服務 #?/etc/init.d/openvswitch?status????????????????#查看狀態

安裝網橋管理工具

#yum -y install bridge-utils

配置網絡

1 2 3 4 5 6 7 8 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,使得容器流量通過ovs流經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

其余節點同樣的配置,注意ip地址即可。

?

第三種:使用flannel來打通網絡

新設計的Flannel,一種結合了路由機制與隧道技術

原理:每個主機配置一個ip段和子網個數。例如,可以配置一個覆蓋網絡使用 10.100.0.0/16段,每個主機/24個子網。因此主機a可以接受10.100.5.0/24,主機B可以接受10.100.18.0/24的包。flannel使用etcd來維護分配的子網到實際的ip地址之間的映射。對于數據路徑,flannel 使用udp來封裝ip數據報,轉發到遠程主機。選擇UDP作為轉發協議是因為他能穿透防火墻。例如,AWS Classic無法轉發IPoIP or GRE 網絡包,是因為它的安全組僅僅支持TCP/UDP/ICMP。

下圖解釋了數據報通過覆蓋網絡轉發的路線:

部署也不是很復雜,僅需要etcd和flannel兩項支持即可。

etcd一般部署在單獨機器上,那么flannel就部署在docker節點上,每個docker節點上都需部署。

1、部署etcd,假設地址為192.168.1.121

1 2 3 4 5 6 7 yum?-y? install? etcd???????????????????????????? #安裝軟件包 vim? /etc/etcd/etcd .conf?????????????????????????? #修改配置文件 修改為如下:(默認只監聽本地回環地址) ???? ETCD_LISTEN_CLIENT_URLS= "http://0.0.0.0:2379" ???? ETCD_ADVERTISE_CLIENT_URLS= "http://0.0.0.0:2379" systemctl?restart?etcd?????????????????????????? #重啟服務 etcdctl? set? /coreos .com /network/config? '{?"Network":?"10.1.0.0/16"?}'?????????? #添加一條網絡配置記錄,這個配置將用于flannel分配給每個Docker的虛擬IP地址段

2、部署flannel

從https://github.com/coreos/flannel/releases 下載最新穩定版本,這里以0.5.5版本為例。

1 2 tar? zxf?flannel-0.5.5-linux-amd64. tar .gz???????????? #解壓文件 cp? flannel-0.5.5/*? /usr/bin/?????????????????? #拷貝可執行文件至系統變量path

使用systemd來管理flannel服務

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

1 2 3 4 5 6 7 8 9 10 11 12 [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

設置etcd地址

vim /etc/sysconfig/flanneld

1 FLANNEL_ETCD=? "http://192.168.1.121:2379"

由于flannel將覆蓋docker0網橋,所以如果Docker服務已啟動,則停止Docker服務

編寫flannel啟動腳本,并加入自啟動

vim /etc/init.d/start_flannel.sh

1 2 3 4 5 6 7 #!/bin/bash systemctl?stop?docker????????????????????? #停止docker服務 systemctl?restart?flanneld???????????????? #啟動flannel服務 mk-docker-opts.sh?-i?????????????????????? #生成環境變量 source? /run/flannel/subnet . env???????????? #將環境變量生效 ifconfig? docker0?${FLANNEL_SUBNET}???????? #設置docker0的網卡ip systemctl?start?docker???????????????????? #啟動docker服務

ok,現在跨主機容器間已經可以通信。

?

第四種:使用Quagga來實現自動學習路由

其實這種方式是基于第一種方式的路由技術,只不過路由信息不需要自己手動添加,而是自動學習。試想一下,如果有10臺docker,那么每臺docker就需要手動寫9條路由信息,是不是很慘?

Linux上安裝路由器的軟件名為Quagga,它可以配置很多種企業級的動態路由協議。我使用的是RIPV2和OSPF同時開啟,但安裝Quagga的方法和配置命令,太過于繁瑣。所以網上有大神將其Docker化了。

下載Quagga鏡像:

1 docker?pull?index.alauda.cn /georce/router

備用地址:http://pan.baidu.com/s/1sj26X8T

特別需要注意的是:docker0的網段不能一樣,所以需要修改docker的子網地址,參考第一種的設置辦法

運行鏡像:

1 docker?run?-itd?--name=router?--privileged?--net=host?index.alauda.cn /georce/router

執行 ip route 查看下路由表,已有別的docker0的網段信息。

?

http://blog.liuker.cn/index.php/docker/30.html

轉載于:https://my.oschina.net/xiaominmin/blog/1598759

總結

以上是生活随笔為你收集整理的跟风学Docker之四:Docker网络解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

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