日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
講解一下Flannel的安裝和配置

Flannel是一種基于overlay網(wǎng)絡(luò)的跨主機(jī)容器網(wǎng)絡(luò)解決方案,也就是將TCP數(shù)據(jù)包封裝在另一種網(wǎng)絡(luò)包里面進(jìn)行路由轉(zhuǎn)發(fā)和通信,

在詔安等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,詔安網(wǎng)站建設(shè)費(fèi)用合理。

Flannel是CoreOS開發(fā),專門用于docker多機(jī)互聯(lián)的一個(gè)工具,讓集群中的不同節(jié)點(diǎn)主機(jī)創(chuàng)建的容器都具有全集群唯一的虛擬ip地址

Flannel使用go語(yǔ)言編寫

Flannel實(shí)現(xiàn)原理

原理說明

Flannel為每個(gè)host分配一個(gè)subnet,容器從這個(gè)subnet中分配IP,這些IP可以在host間路由,容器間無(wú)需使用nat和端口映射即可實(shí)現(xiàn)跨主機(jī)通信

每個(gè)subnet都是從一個(gè)更大的IP池中劃分的,flannel會(huì)在每個(gè)主機(jī)上運(yùn)行一個(gè)叫flanneld的agent,其職責(zé)就是從池子中分配subnet

Flannel使用etcd存放網(wǎng)絡(luò)配置、已分配 的subnet、host的IP等信息

Flannel數(shù)據(jù)包在主機(jī)間轉(zhuǎn)發(fā)是由backend實(shí)現(xiàn)的,目前已經(jīng)支持UDP、VxLAN、host-gw、AWS VPC和GCE路由等多種backend

數(shù)據(jù)轉(zhuǎn)發(fā)流程

容器直接使用目標(biāo)容器的ip訪問,默認(rèn)通過容器內(nèi)部的eth0發(fā)送出去。

報(bào)文通過veth pair被發(fā)送到vethXXX。

vethXXX是直接連接到虛擬交換機(jī)docker0的,報(bào)文通過虛擬bridge docker0發(fā)送出去。

查找路由表,外部容器ip的報(bào)文都會(huì)轉(zhuǎn)發(fā)到flannel0虛擬網(wǎng)卡,這是一個(gè)P2P的虛擬網(wǎng)卡,然后報(bào)文就被轉(zhuǎn)發(fā)到監(jiān)聽在另一端的flanneld。

flanneld通過etcd維護(hù)了各個(gè)節(jié)點(diǎn)之間的路由表,把原來(lái)的報(bào)文UDP封裝一層,通過配置的iface發(fā)送出去。

報(bào)文通過主機(jī)之間的網(wǎng)絡(luò)找到目標(biāo)主機(jī)。

報(bào)文繼續(xù)往上,到傳輸層,交給監(jiān)聽在8285端口的flanneld程序處理。

數(shù)據(jù)被解包,然后發(fā)送給flannel0虛擬網(wǎng)卡。

查找路由表,發(fā)現(xiàn)對(duì)應(yīng)容器的報(bào)文要交給docker0。

docker0找到連到自己的容器,把報(bào)文發(fā)送過去。

Flannel安裝配置

環(huán)境準(zhǔn)備

節(jié)點(diǎn)名稱 IP地址 安裝軟件
docker1 192.168.198.133 etcd、flannel、docker
docker2 192.168.198.130 flannel、docker

安裝etcd

etcd下載地址:https://github.com/coreos/etcd/releases

啟動(dòng)命令:

etcd -name etcd1 -data-dir /var/lib/etcd --advertise-client-urls http://192.168.198.133:2379,http://127.0.0.1:2379 --listen-client-urls http://192.168.198.133:2379,http://127.0.0.1:2379 &

安裝Flannel

flannel下載地址:https://github.com/coreos/flannel/releases

添加flannel網(wǎng)絡(luò)配置信息到etcd:

etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "vxlan"}}'

Network:用于指定Flannel地址池

SubnetLen:用于指定分配給單個(gè)宿主機(jī)的docker0的ip段的子網(wǎng)掩碼的長(zhǎng)度

SubnetMin:用于指定最小能夠分配的ip段

SudbnetMax:用于指定最大能夠分配的ip段,在上面的示例中,表示每個(gè)宿主機(jī)可以分配一個(gè)24位掩碼長(zhǎng)度的子網(wǎng),可以分配的子網(wǎng)從10.0.1.0/24到10.0.20.0/24,也就意味著在這個(gè)網(wǎng)段中,最多只能有20臺(tái)宿主機(jī)

Backend:用于指定數(shù)據(jù)包以什么方式轉(zhuǎn)發(fā),默認(rèn)為udp模式,host-gw模式性能最好,但不能跨宿主機(jī)網(wǎng)絡(luò)

啟動(dòng)Flannel

# cat /etc/systemd/system/flanneld.service

[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
Before=docker.service

[Service]
User=root
ExecStartPost=/usr/local/bin/mk-docker-opts.sh
ExecStart=/usr/local/bin/flanneld \
--etcd-endpoints="http://192.168.198.133:2379" \
--iface=192.168.198.133 \
--ip-masq=true \
--etcd-prefix=/coreos.com/network
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl start flanneld

Flannel啟動(dòng)過程解析:

從etcd中獲取network的配置信息,劃分subnet,并在etcd中進(jìn)行注冊(cè),將子網(wǎng)信息記錄到/run/flannel/subnet.env中,Flannel必須先于Docker啟動(dòng)。

驗(yàn)證Flannel網(wǎng)絡(luò)

查看etcd中的數(shù)據(jù):

# etcdctl ls /coreos.com/network/subnets
/coreos.com/network/subnets/10.0.18.0-24

查看docker1的flannel網(wǎng)卡信息:

38: flannel.1:  mtu 1450 qdisc noqueue state UNKNOWN group default
   link/ether 1a:8e:8b:09:d6:d4 brd ff:ff:ff:ff:ff:ff
   inet 10.0.18.0/32 scope global flannel.1
      valid_lft forever preferred_lft forever
   inet6 fe80::188e:8bff:fe09:d6d4/64 scope link
      valid_lft forever preferred_lft forever

可以看到flannel0網(wǎng)卡的地址和etcd存儲(chǔ)的地址一樣,這樣flannel網(wǎng)絡(luò)配置完成

配置Docker

Docker安裝完成以后,需要修改其啟動(dòng)參數(shù)以使其能夠使用flannel進(jìn)行IP分配,以及網(wǎng)絡(luò)通訊

在Flannel運(yùn)行之后,會(huì)生成一個(gè)環(huán)境變量文件,包含了當(dāng)前主機(jī)要使用flannel通訊的相關(guān)參數(shù),如下:

# cat /run/flannel/subnet.env

FLANNEL_NETWORK=10.0.0.0/16
FLANNEL_SUBNET=10.0.18.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

可以使用flannel提供的腳本將subnet.env轉(zhuǎn)寫成Docker啟動(dòng)參數(shù),創(chuàng)建好的啟動(dòng)參數(shù)默認(rèn)生成在/run/docker_opts.env文件中:

# /opt/flannel/mk-docker-opts.sh -c

# cat /run/docker_opts.env
DOCKER_OPTS=" --bip=10.0.18.1/24 --ip-masq=false --mtu=1450"
修改docker的服務(wù)啟動(dòng)文件如下:

# vim /lib/systemd/system/docker.service

EnvironmentFile=/run/docker_opts.env
ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://

重啟docker

systemctl daemon-reload
systemctl restart docker

這時(shí)可以看到docker0的ip已經(jīng)位于flannel網(wǎng)卡的網(wǎng)段之中:

3: docker0:  mtu 1500 qdisc noqueue state DOWN group default
   link/ether 02:42:de:a3:d8:7d brd ff:ff:ff:ff:ff:ff
   inet 10.0.18.1/24 brd 10.0.18.255 scope global docker0
      valid_lft forever preferred_lft forever
   inet6 fe80::42:deff:fea3:d87d/64 scope link
      valid_lft forever preferred_lft forever
38: flannel.1:  mtu 1450 qdisc noqueue state UNKNOWN group default
   link/ether 1a:8e:8b:09:d6:d4 brd ff:ff:ff:ff:ff:ff
   inet 10.0.18.0/32 scope global flannel.1
      valid_lft forever preferred_lft forever
   inet6 fe80::188e:8bff:fe09:d6d4/64 scope link
      valid_lft forever preferred_lft forever

驗(yàn)證容器互通

root@ubuntu:~# docker run -it busybox
/ # ip a
1: lo:  mtu 65536 qdisc noqueue qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
39: eth0@if40:  mtu 1450 qdisc noqueue
   link/ether 02:42:0a:00:12:02 brd ff:ff:ff:ff:ff:ff
   inet 10.0.18.2/24 brd 10.0.18.255 scope global eth0
      valid_lft forever preferred_lft forever
/ # ping 10.0.12.2
PING 10.0.12.2 (10.0.12.2): 56 data bytes
64 bytes from 10.0.12.2: seq=0 ttl=62 time=0.803 ms
root@ubuntuserver:~/flannel# docker exec -it b4d /bin/bash
root@b4d65fdc02a3:/usr/local/apache2# ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
5: eth0@if6:  mtu 1450 qdisc noqueue state UP group default
   link/ether 02:42:0a:00:0c:02 brd ff:ff:ff:ff:ff:ff
   inet 10.0.12.2/24 brd 10.0.12.255 scope global eth0
      valid_lft forever preferred_lft forever
root@b4d65fdc02a3:/usr/local/apache2#
root@b4d65fdc02a3:/usr/local/apache2#
root@b4d65fdc02a3:/usr/local/apache2# ping 10.0.18.2
PING 10.0.18.2 (10.0.18.2) 56(84) bytes of data.
64 bytes from 10.0.18.2: icmp_seq=1 ttl=62 time=0.794 ms
64 bytes from 10.0.18.2: icmp_seq=2 ttl=62 time=0.957 ms

此時(shí)的網(wǎng)絡(luò)數(shù)據(jù)包流向如圖:

配置backend為host-gw

host-gw bakcend是flannel的另一個(gè)backend。與vxlan不同,host-gw不會(huì)封裝數(shù)據(jù)包,而是在主機(jī)的路由表中創(chuàng)建到其他主機(jī)的subnet的路由條目,從而實(shí)現(xiàn)容器網(wǎng)絡(luò)跨主機(jī)通信。需要說明的是,host-gw不能跨宿主機(jī)網(wǎng)絡(luò)通信,或者說跨宿主機(jī)網(wǎng)絡(luò)通信需要物理路由支持。

修改etcd如下:

etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "host-gw"}}'

重啟flanneld與docker:

systemctl restart flanneld docker

可以在宿主機(jī)上查看到路由條目:

root@ubuntu:~# ip route
default via 192.168.198.2 dev ens33 proto dhcp metric 100
10.0.12.0/24 via 192.168.198.130 dev ens33
10.0.18.0/24 dev docker0 proto kernel scope link src 10.0.18.1 linkdown
169.254.0.0/16 dev ens33 scope link metric 1000
192.168.198.0/24 dev ens33 proto kernel scope link src 192.168.198.133 metric 100

分享名稱:講解一下Flannel的安裝和配置
文章地址:http://www.dlmjj.cn/article/codeigo.html