国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

docker網絡學習-flannel

zhaot / 1613人閱讀

摘要:每個都是從一個更大的池中劃分的,會在每個主機上運行一個叫的,職責是從池中分配。為了在各個主機間共享信息,用存放網絡配置已分配的的等信息。同一主機的容器通過連接,跨主機流量通過轉發。

主要參考每天5分鐘玩轉docker容器技術博客。
記錄下自己的實驗過程。
如果想學習,請直接參考該博客http://www.cnblogs.com/CloudMan6/
網絡概述

flannel為每個host分配一個subnet,容器從此subnet中分配ip。這些ip可以在host間路由,容器間無需nat和port mapping就可以跨主機通信。

每個subnet都是從一個更大的ip池中劃分的,flannel會在每個主機上運行一個叫flanneld的agent,職責是從池中分配subnet。為了在各個主機間共享信息,flannel用etcd存放網絡配置、已分配的subnet、host的ip等信息。

數據包如何在主機間轉發是由 backend 實現的。flannel 提供了多種 backend,最常用的有 vxlan 和 host-gw

環境搭建 安裝配置etcd

在192.168.19.120上運行如下腳本:

ETCD_VER=v2.3.7

DOWNLOAD_URL=https://github.com/coreos/etcd/releases/download

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

mkdir -p /tmp/test-etcd && tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/test-etcd --strip-components=1

cp /tmp/test-etcd/etcd* /usr/local/bin/

運行etcd

etcd -listen-client-urls http://192.168.19.120:2379 -advertise-client-urls http://192.168.19.120:2379
build flannel

下載并重命名 image。

docker pull cloudman6/kube-cross:v1.6.2-2

docker tag cloudman6/kube-cross:v1.6.2-2 gcr.io/google_containers/kube-cross:v1.6.2-2

下載 flannel 源碼。

git clone https://github.com/coreos/fla...

開始構建。

cd flannel
make dist/flanneld-amd64

將flannel執行文件拷貝到host2 和host3

scp dist/flanneld-amd64 192.168.19.121:/usr/local/bin/flanneld
scp dist/flanneld-amd64 192.168.19.122:/usr/local/bin/flanneld

將flannel網絡的配置文件保存到etcd中

配置文件如下:

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

解釋:

Network 定義該網絡的ip池

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

Backend為vxlan,即主機間通過vxlan通信。

將配置存入etcd

etcdctl --endpoint=192.168.19.120:2379 set /docker-test/network/config < flannel_config.json
啟動flannel 啟動命令

在兩臺機器上運行如下命令:

flanneld -etcd-endpoints=http://192.168.19.120:2379 -iface=enp0s3 -etcd-prefix=/docker-test/network

-etcd-endpoints 指定 etcd url
-iface 指定主機間數據傳輸使用的interface
-etcd-prefix 指定etcd存放flannel網絡配置文件的key

輸出如下:

root@host3:~# flanneld -etcd-endpoints=http://192.168.19.120:2379 -iface=enp0s3 -etcd-prefix=/docker-test/network
I0520 02:24:57.594377    2463 main.go:499] Using interface with name enp0s3 and address 192.168.19.122
I0520 02:24:57.594766    2463 main.go:516] Defaulting external address to interface address (192.168.19.122)
I0520 02:24:57.595348    2463 main.go:240] Created subnet manager: Etcd Local Manager with Previous Subnet: None
I0520 02:24:57.595643    2463 main.go:243] Installing signal handlers
I0520 02:24:57.598847    2463 main.go:358] Found network config - Backend type: vxlan
I0520 02:24:57.599288    2463 vxlan.go:120] VXLAN config: VNI=1 Port=0 GBP=false DirectRouting=false
I0520 02:24:57.649392    2463 local_manager.go:234] Picking subnet in range 10.2.1.0 ... 10.2.255.0
I0520 02:24:57.651626    2463 local_manager.go:220] Allocated lease (10.2.99.0/24) to current node (192.168.19.122) 
I0520 02:24:57.653626    2463 main.go:305] Wrote subnet file to /run/flannel/subnet.env
I0520 02:24:57.654905    2463 main.go:309] Running backend.
I0520 02:24:57.660772    2463 vxlan_network.go:60] watching for new subnet leases
I0520 02:24:57.665879    2463 main.go:401] Waiting for 23h0m0.025221044s to renew lease
I0520 02:24:57.672707    2463 iptables.go:115] Some iptables rules are missing; deleting and recreating rules
I0520 02:24:57.674333    2463 iptables.go:137] Deleting iptables rule: -s 10.2.0.0/16 -j ACCEPT
I0520 02:24:57.678549    2463 iptables.go:137] Deleting iptables rule: -d 10.2.0.0/16 -j ACCEPT
I0520 02:24:57.688935    2463 iptables.go:125] Adding iptables rule: -s 10.2.0.0/16 -j ACCEPT
I0520 02:24:57.696815    2463 iptables.go:125] Adding iptables rule: -d 10.2.0.0/16 -j ACCEPT
啟動后的效果

新建了一個interface flannel.1, 且配置上subnet的第一個ip 10.2.21.0

root@host2:~# ip addr show flannel.1
8: flannel.1:  mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether 6e:9f:1d:bf:5c:b9 brd ff:ff:ff:ff:ff:ff
    inet 10.2.21.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::6c9f:1dff:febf:5cb9/64 scope link 
       valid_lft forever preferred_lft forever

添加了一條路由:目的地址為flannel網絡10.2.0.0/16的數據包都有flannel.1轉發

root@host2:~# ip r
default via 192.168.19.2 dev enp0s3 onlink 
10.2.99.0/24 via 10.2.99.0 dev flannel.1 onlink 
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1 linkdown 
172.18.0.0/16 dev docker_gwbridge  proto kernel  scope link  src 172.18.0.1 linkdown 
192.168.19.0/24 dev enp0s3  proto kernel  scope link  src 192.168.19.121 
192.168.56.0/24 dev enp0s8  proto kernel  scope link  src 192.168.56.101 
配置docker連接flannel 編輯docker配置文件

*兩臺機器都做此操作
首先查看/run/flannel/subnet.env

root@host2:~# cat /run/flannel/subnet.env 
FLANNEL_NETWORK=10.2.0.0/16
FLANNEL_SUBNET=10.2.21.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=false

之后,編輯docker的配置文件vim /etc/systemd/system/docker.service.d/10-machine.conf,給ExecStart命令的參數中添加--bip和--mtu,分別對應subnet.env的 FLANNEL_SUBNETFLANNEL_MTU

root@host2:~# cat /etc/systemd/system/docker.service.d/10-machine.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic --bip=10.2.21.1/24 --mtu=1450
Environment=
重啟docker
systemctl daemon-reload
systemctl restart docker.service
效果

對比路由表

# docker重啟前
root@host3:~# ip r
default via 192.168.19.2 dev enp0s3 onlink 
10.2.21.0/24 via 10.2.21.0 dev flannel.1 onlink 
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1 linkdown 
172.18.0.0/16 dev docker_gwbridge  proto kernel  scope link  src 172.18.0.1 linkdown 
192.168.19.0/24 dev enp0s3  proto kernel  scope link  src 192.168.19.122 
192.168.56.0/24 dev enp0s8  proto kernel  scope link  src 192.168.56.102 
root@host3:~# systemctl daemon-reload
root@host3:~# systemctl restart docker.service

# docker重啟后
root@host3:~# ip r
default via 192.168.19.2 dev enp0s3 onlink 
10.2.21.0/24 via 10.2.21.0 dev flannel.1 onlink 
10.2.99.0/24 dev docker0  proto kernel  scope link  src 10.2.99.1 linkdown 
172.18.0.0/16 dev docker_gwbridge  proto kernel  scope link  src 172.18.0.1 linkdown 
192.168.19.0/24 dev enp0s3  proto kernel  scope link  src 192.168.19.122 
192.168.56.0/24 dev enp0s8  proto kernel  scope link  src 192.168.56.102 

flannel 沒有創建新的 docker 網絡,而是直接使用默認的 bridge 網絡。同一主機的容器通過 docker0 連接,跨主機流量通過 flannel.1 轉發。

將容器連接到flannel網絡
root@host2:~# docker run -itd --name bbox1 busybox
root@host2:~# docker exec bbox1 ip r
default via 10.2.21.1 dev eth0 
10.2.21.0/24 dev eth0 scope link  src 10.2.21.2 

root@host3:~# docker run -itd --name bbox2 busybox
root@host3:~# docker exec bbox2 ip r
default via 10.2.99.1 dev eth0 
10.2.99.0/24 dev eth0 scope link  src 10.2.99.2
可以發現網絡可通
# 10.2.99.2 為bbox2的ip
root@host2:~# docker exec bbox1 ping -c 1 10.2.99.2
PING 10.2.99.2 (10.2.99.2): 56 data bytes
64 bytes from 10.2.99.2: seq=0 ttl=62 time=0.604 ms
使用traceroute跟蹤包
root@host2:~# docker exec bbox1 traceroute 10.2.99.2
traceroute to 10.2.99.2 (10.2.99.2), 30 hops max, 46 byte packets
 1  10.2.21.1 (10.2.21.1)  0.010 ms  0.216 ms  0.020 ms
 2  10.2.99.0 (10.2.99.0)  0.938 ms  2.731 ms  1.663 ms
 3  10.2.99.2 (10.2.99.2)  2.016 ms  0.647 ms  0.596 ms

發給docker0

之后發給flannel.1

flannel.1 將數據包封裝成 VxLAN,通過 enp0s8 發送給 host3,

host3 收到包解封裝,發現數據包目的地址為 10.2.99.2,根據路由表(下圖)將數據包發送給 flannel.1,并通過 docker0 到達 bbox2

### dns不可用
無法通過主機名ping通機器。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27306.html

相關文章

  • 初學Docker容器網絡不得不看的學習筆記

    摘要:容器通過獲取一個與同網段的地址,并默認連接到網橋,并將的地址作為網關實現容器與宿主機的網絡互通,另外,同一個宿主機下同樣使用模式的容器可以直接通訊。 【技術沙龍002期】數據中臺:宜信敏捷數據中臺建設實踐|宜信技術沙龍 將于5月23日晚8點線上直播,點擊報名 一、關于Docker Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從Apache2.0協議開源。 Docker...

    fanux 評論0 收藏0
  • docker網絡方案簡介

    摘要:模式容器直接使用宿主機的網絡配置,包括網卡,路由等,這種方案下,從網絡層面來看,容器就不是容器了,只是一個宿主機上的進程端口而已。 注:本篇僅僅是對各個網絡方案的簡介和思考。需要深入學習如何部署和使用的同學請自行度娘~ 中小docker用戶的苦惱 docker的使用者十分廣泛,不止有網易蜂巢,daocloud,時速云這類的已經成熟化的公有云服務,許多中小型企業內部也在試圖將docker...

    bbbbbb 評論0 收藏0
  • docker網絡方案簡介

    摘要:模式容器直接使用宿主機的網絡配置,包括網卡,路由等,這種方案下,從網絡層面來看,容器就不是容器了,只是一個宿主機上的進程端口而已。 注:本篇僅僅是對各個網絡方案的簡介和思考。需要深入學習如何部署和使用的同學請自行度娘~ 中小docker用戶的苦惱 docker的使用者十分廣泛,不止有網易蜂巢,daocloud,時速云這類的已經成熟化的公有云服務,許多中小型企業內部也在試圖將docker...

    ?xiaoxiao, 評論0 收藏0
  • Kubernetes網絡分析之Flannel

    摘要:從分析可以看出,如果程序如果退出后,容器之間的通信將會中斷,這里需要注意。最后通過寫本地子網文件,通過這個文件設定的網絡。細心的讀者可能發現這里的并不是以太網規定的,這是因為外層的封包還要占據。 Flannel是cereos開源的CNI網絡插件,下圖flannel官網提供的一個數據包經過封包、傳輸以及拆包的示意圖,從這個圖片中可以看出兩臺機器的docker0分別處于不同的段:10.1....

    codecraft 評論0 收藏0
  • 如何使用Flannel搭建跨主機互聯的容器網絡

    摘要:每個節點的網橋使用一個子網,每個容器使用一個子網內的,那么我們就可以組成下圖中所示網絡。到此,在的協調下,各個主機上的子網就不會再沖突了,另外,會維護容器網絡的路由規則,容器就可以通過訪問容器了,也就實現了跨主機容器互聯。 當您將多臺服務器節點組成一個Docker集群時,需要對集群網絡進行設置,否則默認情況下,無法跨主機容器互聯,接下來我們首先分析一下原因。 跨主機容器互聯 下圖描述了...

    remcarpediem 評論0 收藏0

發表評論

0條評論

zhaot

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<