跟風學Docker之四:Docker網絡解決方案

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

跟風學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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284657.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++中數字和字符的轉換

參考&#xff1a;http://blog.csdn.net/xw20084898/article/details/21939811 http://nnssll.blog.51cto.com/902724/198237/ http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html 一、stringstream通常是用來做數據轉換的。 1、例如int轉string:#include <s…

【測繪程序設計】坐標方位角推算神器(C#版)

本文講解利用C#語言實現坐標方位角推算,附源碼贈送。 1. 神器效果展示 (1)連接角為左角 (2)連接角為右角 2. 方位角推算原理速遞 (1)原理示意圖

原型模式——創建型模式

2019獨角獸企業重金招聘Python工程師標準>>> 思路&#xff1a; 馬上又到找工作的時候了&#xff0c;當我們在準備一份份簡歷的時候有沒有考慮過這樣一個問題&#xff1f; 面對不同的工作崗位我們需要準備不同的求職簡歷&#xff0c;但是這樣的幾份不同的簡歷中還是有…

如何獲取 ASP.NET Core 當前啟動地址?

前言上次&#xff0c;我們介紹了配置ASP.NET Core啟動地址的多種方法。那么&#xff0c;如何通過代碼方式&#xff0c;獲取啟動后的地址&#xff1f;WebApplication.Urls 對象使用 WebApplication.Urls.Add 方法可以添加啟動地址。那么&#xff0c;使用 WebApplication.Urls 應…

【CASS精品教程】CASS9.1查詢功能大全(坐標、長度、面積、方位角)

文章目錄 1. 查詢指定點坐標2. 查詢兩點距離及方位3. 查詢線長4. 查詢實體面積CASS9.1中提供了查詢指定點坐標、查詢兩點距離及方位、查詢線長、查詢實體面積等查詢功能,如下圖所示: 本文以動畫演示的方式,對以上提到的功能進行講解。 1. 查詢指定點坐標 點擊【工程應用】…

自定義smokeping告警(郵件+短信)

前段時間接到公司IT同事需求&#xff0c;幫助其配置smokeping的告警功能&#xff0c;之前配置的姿勢有些問題&#xff0c;告警有些問題&#xff0c;現在調試OK&#xff0c;在此將關鍵配置點簡單記錄下。 關鍵的配置項主要有&#xff1a; 定義告警規則并配置將告警信息通過管道交…

WPF 實現抽屜菜單

分享一個WPF 實現抽屜菜單抽屜菜單作者&#xff1a;WPFDevelopersOrg原文鏈接&#xff1a;https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;項目使用 MIT 開源許可協議&#xff1b;更多效果可以通過GitHub[1]|碼云[2]…

selenium 定制啟動 chrome 的選項

2019獨角獸企業重金招聘Python工程師標準>>> selenium 定制啟動 chrome 的選項 博客分類&#xff1a; java 搜索引擎&#xff0c;爬蟲 使用 selenium 時&#xff0c;我們可能需要對 chrome 做一些特殊的設置&#xff0c;以完成我們期望的瀏覽器行為&#xff0c;比如…

平臺級 SAAS 架構的基礎:統一身份管理系統

業內在用戶統一身份認證及授權管理領域&#xff0c;主要關注 4 個方面&#xff1a;集中賬號管理&#xff08;Account&#xff09;、集中認證管理&#xff08;Authentication&#xff09;、集中授權管理&#xff08;Authorization&#xff09;和集中審計管理&#xff08;Audit&a…

【ArcGIS Pro微課1000例】0017:ArcGIS Pro 2.8制作炫酷的ETOPO1全球DEM地圖

ArcGIS Pro相對于ArcGIS,在制圖方面做了很大的提升,做出的地圖更加優美,本文講解基于NOAA的ETOPO1數據全球DEM數據制作炫酷的全球DEM地圖,先看效果再教學! 1. 效果展示 全球 澳大利亞大陸

Js中的for in

2019獨角獸企業重金招聘Python工程師標準>>> 后臺數據&#xff1a; List<Map<String, Object>> uTags query.selectAllList("velocity.userGetTags", map); 前端解析&#xff1a; for(var i in data.content){//由于這里是List[i](Map).IDc…

VMWare 安裝 Linux

參考 &#xff1a; http://www.aboutyun.com/thread-6780-1-1.html 這的是很詳細。贊一下 我這里就簡化一下。 1 下載&#xff1a; VMWare : https://download3.vmware.com/software/wkst/file/VMware-workstation-full-10.0.0-1295980.exe ubuntu : http://www.aboutyun…

【ArcGIS Pro微課1000例】0018:ArcGIS Pro 2.8通過OLE DB與個人數據庫建立連接案例

對于個人數據庫,Access程序可以直接打開。本文講解在ArcGIS Pro2.8中通過OLE DB與個人數據庫MDB建立聯系的方法與過程。 文章目錄 1. 個人數據庫準備2. OLE DB連接個人數據庫1. 個人數據庫準備 準備一個個人數據庫,在上面右鍵→復制文件地址。 文件地址為:"C:\test.md…

JAVA生成并導出json文件

將一個list集合轉換成json文件并導出&#xff1a; 數據集合&#xff1a;    List<Object> agencyList new ArrayList<Object>();Map<String, Object> agencyMap new HashMap<>();agencyMap.put("agencyName",agencyName);agencyMap.pu…

《ASP.NET Core 6框架揭秘》實例演示[02]:基于路由、MVC和gRPC的應用開發

ASP.NET Core可以視為一種底層框架&#xff0c;它為我們構建出了基于管道的請求處理模型&#xff0c;這個管道由一個服務器和多個中間件構成&#xff0c;而與路由相關的EndpointRoutingMiddleware和EndpointMiddleware是兩個最為重要的中間件。MVC和gRPC開發框架就建立在路由基…

什么是 JWT -- JSON WEB TOKEN

什么是JWT Json web token (JWT), 是為了在網絡應用環境間傳遞聲明而執行的一種基于JSON的開放標準&#xff08;(RFC 7519).該token被設計為緊湊且安全的&#xff0c;特別適用于分布式站點的單點登錄&#xff08;SSO&#xff09;場景。JWT的聲明一般被用來在身份提供者和服務提…

Re-installation failed due to different application signatures.

問題&#xff1a; 在虛擬設備上運行程序時提示安裝失敗。 [2010-08-08 00:38:30 - myApp] Re-installation failed due to different application signatures. [2010-08-08 00:38:30 - myApp] You must perform a full uninstall of the application. WARNING: This will remo…

【ArcGIS微課1000例】0024:ArcGIS如何連接文件夾、設認工作目錄、默認地理數據庫、相對路徑與絕對路徑?

ArcGIS軟件在初次安裝完成或者為了工作的方便,通常需要連接到指定的文件夾、設置默認工作路徑,默認地理數據庫、相對路徑與絕對路徑等。 文章目錄 1. 文件夾連接2. 默認工作目錄3. 默認地理數據庫4. 相對路徑與絕對路徑1. 文件夾連接 在初次安裝完ArcGIS時,默認沒有文件夾連…

shell 用環境變量的值修改properties文件

假設有如下屬性文件 demo.properties user.nametest user.password123456 ............................... 需求&#xff1a;先需要通過shell 腳本將 user.name 和 user.password 的value值替換為實際需要的用戶名和密碼&#xff0c; 將可以通過如下方式實現&#xff1a; sed …

【Spring Cloud】Redis緩存接入監控、運維平臺CacheCloud

CacheCloud CacheCloud提供一個Redis云管理平臺&#xff1a;實現多種類型(Redis Standalone、Redis Sentinel、Redis Cluster)自動部署、解決Redis實例碎片化現象、提供完善統計、監控、運維功能、減少運維成本和誤操作&#xff0c;提高機器的利用率&#xff0c;提供靈活的伸縮…