1. 程式人生 > >centos7下安裝docker(15.5容器跨主機網路--flanneld)

centos7下安裝docker(15.5容器跨主機網路--flanneld)

flannel是由CoreOS研究的一種覆蓋網路(overlay network)網路工具,目的是幫助每一個host主機有一個完整的子網;

功能是:讓叢集中不同節點的主機建立的容器都有一個唯一的虛擬IP

工作原理:將TCP資料包裝在另一種網路包裡進行路由轉發和通訊,目前已經支援UDP,Vxlan,AWS,APC和GRE等路由轉發的模式。預設節點間通過UDP進行轉發

1.安裝配置etcd

etcd功能:與consul的功能差不多,維護主機間的路由表,flannel的配置資訊全部存放在etcd裡面,主要負責給各個主機分配subnet

可以根據官網的方式來搭建:https://github.com/coreos/etcd/releases

1.也可以直接yum install -y etcd

2.更改配置檔案:vim /etc/etcd/etcd.conf

ETCD_LISTEN_CLIENT_URLS="http://192.168.7.222:2379"    (第九行):監聽客戶端的請求

ETCD_ADVERTISE_CLIENT_URLS="http://192.168.7.222:2379" (20行):通知客戶端的地址

3.儲存退出後,設定host主機的subnet

先編輯一個檔案:etcd.sh

vim /root/etcd.sh

{“Network”:“10.2.0.0/16”,“SubnetLen”:24,"Backend":{"Type":"vxlan

"}}

Network:定義host主機的IP地址池為10.2.0.0/16,注:由於etcd並不是動態儲存host上flannel網路的,比如:當有節點被刪除後,etcd中的關於這個節點的subnet網路並不會被刪除,所以使用10.X.X.X的網路,保證有足夠的網路可用

SubnetLen:指定每個主機分配的subnet大小為24位,即10.2.x.0/24

Backend為vxlan,即主機之間通過vxlan通訊,我們主要討論vxlan和host-gw這兩種方式

4.將配置儲存到etcd

etcdctl --endpoints=http://192.168.7.222:2379 set /usr/local/bin/network/config < /root/etcd.sh

--endpoints=http://192.168.7.222:2379 指定etcd的url

通過   etcdctl  get  /usr/local/bin/network/config 在etcd本機上獲取key

/usr/local/bin/network/config  儲存key的地方,flanneld會讀取這個配置,保證自己能獲取到subnet,這個key可以任意指定,當host主機分配到subnet後,key會修改docker的啟動引數

2.安裝配置flanneld

1.yum install -y flannel.x86_64

2.修改配置檔案:vim /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://192.168.7.222:2379"   連線etcd的地址

LANNEL_ETCD_PREFIX="/usr/local/bin/network"      key的地址,注:這個地址一定要寫到最後一個目錄即可,否則會報錯,如下:

3.啟動flanneld

可以使用命令  flanneld  也可以systemctl start flanneld

如果啟動flanneld時出現一下錯誤:etcd叢集配置錯誤,拒絕連結

解決辦法是:在etcd的伺服器上的/etc/etcd/etcd.conf中將叢集:ETCD_LISTEN_PEER_URLS="http://localhost:2380"這個註釋去掉

4.現在我們可以在host上看見一個flanneld1.1的網路了

可以看到我的doker1和dokcer2各有一個flannel1.1,但不在同一個網段,怎麼進行通訊呢?

 我們來看一下兩個host的路由情況:出現了一個flannel1.1的路由

路由都是10.2.0.0的,下面驗證一下容器是否可以通訊

兩個容器使用的是同一個IP,肯定是沒法訪問對方

下面我們學習配置docker連線flannel

1.編輯docker的配置檔案:/etc/systemd/system/docker.service.d/10-machine.conf

新增:--bip=    --mtu=

這兩個引數要參考/run/flannel/subnet.env,必須與其保持一致

2.重啟docker服務

3.檢視docker0的變化

docker會將flanneld配置到docker0上,並給docker0新增10.2.48.0的路由

docker1進行同樣的配置:

docker1上的flannel也被橋接到docker0上了

驗證容器的連通性:

到這裡 ,還是ping不通!!!!!

為什麼?????

開啟了路由轉發:echo 1 > /proc/sys/net/ipv4/ip_forward   還是不行

主機防火牆:firewalld和selinux已經關閉!!!!

但是,linux還有底層的iptables,所以在兩臺主機上分別執行:iptables -P  FORWARD ACCEPT

 

可以ping通,證明就算兩個容器在不通的網段,使用flannel機制,可以使不同subnet的網路互通

通過traceroute來看一下容器走的路徑

資料包先到docker0的閘道器10.2.55.1

根據路由表docker0將資料包轉發給flannel1.1

flannel1.1會將資料包封裝成Vxlan,通過ens160轉發給docker2

docker2收到資料包後進行解包,發現IP 目的IP 是10.2.48.2,根據docker2的路由表將資料包轉發給flannel1.1,flannel1.1再將資料包轉發給docker2的docker0,到達容器

 注:flannel沒有DNS服務,容器無法通過hostname通訊

flannel網路隔離

flannel為每個主機分配了獨立的subnet,但是flannel1.1將這些subnet連結額起來,相互之間可以路由。本質上,flannel將個主機上相互獨立的docker0容器網路組成了一個互通的大網路,實現了容器跨主機通訊。flannel沒有實現隔離

flannel與外網連通性:

因為flannel網路是將flannel1.1橋接到docker0上,所以容器與外部通訊的方式與docker0預設的bridge網路一樣,即

1.容器通過NAT連線外網

2.外網通過埠對映的方式訪問容器

flannel----host-gw

flannel支援多種backend,什麼是backend:指的是host主機之間的通訊方式

之前我們在寫etcd key的時候定義過backend

之前的試驗使用過的是vxlan,flannel支援多種的backend:目前已經支援UDP、VxLAN、AWS VPC和GCE路由等資料轉發方式,預設使用的是udp的方式

下面我們討論host-gw

與vxlan不同,host-gw不會封裝資料包,而是在主機的路由表中建立到其他主機的subnet的路由條目,從而實現容器跨主機通訊

要使用host-gw首先修改etcd key

重啟docker1和docker2上的flanneld服務

 

 可以看到flannel從etcd資料庫中檢索到docker1的subnet10.2.55.0/24,但是因為其是vxlan,所以立即忽略

我重啟了docker1上的flannel後,docker2上的flannel發現subnet10.2.55.0/24將其新增到路由表中

檢視docker2的路由表添加了一條到10.2.55.0/24的路由,閘道器是192.168.7.235

同樣的docker1重啟flannel後也會發生相應的變化

由於我們更改了flannel的配置,所以docker服務也會受到影響,因為之前我們說過flannel會改變docker的開機自啟動,所以我們要根據/run/flanneld/subnet.env

更改 /etc/systemd/system/docker.service.d/10-machine.conf      docker 的配置檔案

重啟docker服務

在docker1上做同樣的操作

vxlan和 host-gw的區別;

1.host-gw把每個主機都配置成閘道器,主機知道其他主機的subnet和轉發地址。

  vxlan則是在主機之間建立隧道,不同的主機的容器都在一個大的網段內,比如:10.2.0.0/16

2.雖然vxlan與host-gw使用不同的機制,但對於容器之間還是可以相互通訊的

3.由於vxlan需要對資料進行打包和拆包,效能可能稍遜於host-gw

相關推薦

centos7安裝docker15.5容器主機網路--flanneld

flannel是由CoreOS研究的一種覆蓋網路(overlay network)網路工具,目的是幫助每一個host主機有一個完整的子網; 功能是:讓叢集中不同節點的主機建立的容器都有一個唯一的虛擬IP 工作原理:將TCP資料包裝在另一種網路包裡進行路由轉發和通訊,目前已經支援UDP,Vxlan,AWS,AP

centos7安裝docker15.7容器主機網絡---calico

信息 https 用戶 client /usr ctc onf pan 映射 Calico是一個純三層的虛擬網絡方案,Calico為每個容器分配一個IP,每個host都是router,把不同host的容器連接起來。與vxlan不同的是:calico不對數據包進行封裝,不需要

centos7安裝docker12.5容器在單個host上的網絡總結

centos 查看 轉換成 跨主機 地址 -s 外部 spec 創建 單個host上的容器的網絡:通過本章的學習,我們知道docker默認有三種網絡,可以通過docker network ls查看; none:封閉的網絡,通過--network=none來指定; host:

centos7安裝docker12.3容器之間的連通性

daemon 2.3 es2017 命令 selinux bridge 之前 -- 9.png 我們接著盜圖,如下: 在這張圖上,可以看到,如果兩個容器使用同一個bridge,那麽兩個容器之間是互相能通的 可以看到兩個容器在同一個bridge下是可以互相ping通的

centos7安裝docker9.3容器對資源的使用限制-Block IO

緩存 centos 文件 機制 font nbsp 有效 之間 找到 Block IO:指的是磁盤的讀寫,docker 可以通過設置權重,限制bps和iops的方式控制容器讀寫磁盤的帶寬 註:目前block IO限額只對direct IO(不使用文件緩存)有效。 1.Blo

centos7安裝docker12.4容器如何與外部進行通信

tro net ont 安裝docker 數據包 pin pdu 網卡 asq 1.容器如何訪問外部 前面我們做了很多試驗:只要host能連外網,使用默認bridge(docker0)創建得容器就能訪問外網,那麽容器是怎樣訪問外網的呢? 註:這裏的外網不僅是inte

centos7安裝docker15.4主機網絡-flannel

url eos 配置 實現 國外 ken 由於 con pin flannel是CoreOS開發的容器網絡解決方案,flannel為每一個host分配一個subnet,容器從這些subnet中分配IP,這些IP可以在host之間路由,容器無需NAT和port mapping

centos7安裝docker15.2主機網路-overlay

為支援容器跨主機通訊,Docker提供了overlay driver,使使用者可以建立基於VxLAN的overlay網路。VxLAN可將二層資料封裝到UDP進行傳輸,VxLAN提供與VLAN相同的乙太網二層服務,但是擁有更強的擴充套件性和靈活性。 Docker overlay網路需要一個key-value

centos7安裝docker15.3主機網路-macvlan

除了ovrlay,docker還開發了另一個支援跨主機容器的driver:macvlan macvlan本身是linu kernel模組,其功能是允許在同一物理網絡卡上配置多了MAC地址,即:多個interface,每個interface可以配置自己的ip。macvlan本身是一種網絡卡虛擬化技術,Dock

centos7安裝docker25docker swarm---replicated mode&global mode

收集 默認 停止 通過 repl 靈活 images es2017 spa swarm可以在service創建或運行過程中靈活的通過--replicas調整容器的副本數量,內部調整調度器則會根據當前集群資源使用的情況在不同的node上啟動或停止容器,這就是service默認

centos7安裝docker9容器對資源的使用限制-內存

span 解決辦法 9.png doc etc pac out 內核 count 一個docker Host上面會運行若幹容器,每個容器都需要CPU,內存和IO資源。容器提供了控制分配多少CPU,內存給每個容器的機制,避免摸個容器因占用太多資源而

centos7安裝docker10容器底層--cgroup和namespace

sys bsp 內存 更改 ont sha 進入 logs 一個 cgroup和namespace是實現容器底層的重要技術 cgroup:實現資源限制 namespace:實現資源隔離 1.cgroup:control group Linux操作系統通過cgroup可以設置

centos7安裝docker11容器操作總結

創建 centos 安裝 pause 共享內存 打印 volume -a bytes 這段時間主要是學習了對容器的操作,包括:容器的狀態:start,stop,restart,rename,pause,unpause,rm,attach,exec,kill,logs;還學習

centos7安裝docker2鏡像

world 組成 啟動 ges src img es2017 base .com docker最小的鏡像——hello-world 下載鏡像 docker pull docker pull hello-world 查看鏡像 docker images docker im

centos7安裝docker13.1docker存儲--data volume

ron 鏡像 .cn 空間 ges bind 存在 src 設置 我們現在知道docker 有兩種存儲方式:storage driver和data volume stroage driver這種存儲方式主要是存儲那些無狀態的數據,是鏡像層和容器層組成的,而data volu

centos7安裝docker14.2主機網絡-overlay

活性 用戶 driver 試驗 mach 實踐 point ogr drive 為支持容器跨主機通信,Docker提供了overlay driver,使用戶可以創建基於VxLAN的overlay網絡。VxLAN可將二層數據封裝到UDP進行傳輸,VxLAN提供與VLAN相同的

centos7安裝docker17docker監控---docker自帶監控命令

img 數據 spa 查看 監控 pan top 可用 mage Docker自帶的監控子命令 1.docker ps;docker ps -a這是我們常用的查看容器狀態的命令 docker container ls和docker ps的功能一樣 2.docker to

centos7安裝docker17.3docker監控---cAdvisor

web iso 定位 var com 收集器 tps 網絡流 container cAdvisor是google開發的容器監控工具 1。在host上運行cadvisor容器 docker run -d -p 8080:8080 --name cadvisor -v /:/

centos7安裝docker17.5docker監控的總結對比

單獨使用 收集 host font 容易 scope pan 建議 數據模型 到現在為止,我已經學習了docker自帶的監控方案:ps/ls/top/stats,以及sysdig,weave scope,cadvisor,prometheus多種監控工具,現在做個總結和比較

centos7安裝docker18docker日誌---docker logs

生產環境 參數 錯誤 out 日誌 圖片 打印 沒有 httpd 在微服務架構中,由於容器的數量眾多以及快速變化的特性使得記錄日誌和監控變得越來越重要,考慮到容器的短暫和不固定周期,當我們需要排查問題的時候容器可能不在了。因此,一套集中式的日誌管理系統是生產環境中不可或缺的