Kubernetes二进制部署——Flannel网络
生活随笔
收集整理的這篇文章主要介紹了
Kubernetes二进制部署——Flannel网络
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Kubernetes二進制部署——Flannel網(wǎng)絡(luò)
- 一、Flannel簡介
- 二、Flannel原理
- 三、Flannel的作用
- 四、Flannel 網(wǎng)絡(luò)配置
- 1.node 節(jié)點安裝 docker
- 2.master配置
- 1、 寫入分配的子網(wǎng)段到ETCD中,供flannel使用(master主機)
- 3、node節(jié)點操作
- 1、上傳flannel軟件包到所有的 node 節(jié)點并解壓
- 2、建立 K8S 工作目錄并撰寫 flannel.sh 服務(wù)啟動腳本
- 3、指定集群啟動腳本并檢查IP地址
- 4、配置 docker 以能連接上 flannel
- 5、在兩個 node 節(jié)點中創(chuàng)建容器互相 ping 以驗證網(wǎng)絡(luò)互通
一、Flannel簡介
- Flannel是CoreOS團隊針對Kubernetes設(shè)計的一個網(wǎng)絡(luò)規(guī)劃服務(wù),簡單來說,它的功能是讓集群中的不同節(jié)點主機創(chuàng)建的Docker容器都具有全集群唯一的虛擬IP地址。
- 在默認的Docker配置中,每個節(jié)點上的Docker服務(wù)會分別負責(zé)所在節(jié)點容器的IP分配。這樣導(dǎo)致的一個問題是,不同節(jié)點上容器可能獲得相同的內(nèi)外IP地址。并使這些容器之間能夠之間通過IP地址相互找到,也就是相互ping通。
- Flannel的設(shè)計目的就是為集群中的所有節(jié)點重新規(guī)劃IP地址的使用規(guī)則,從而使得不同節(jié)點上的容器能夠獲得同屬一個內(nèi)網(wǎng)且不重復(fù)的IP地址,并讓屬于不同節(jié)點上的容器能夠直接通過內(nèi)網(wǎng)IP通信。
- Flannel實質(zhì)上是一種“覆蓋網(wǎng)絡(luò)(overlaynetwork)”,也就是將TCP數(shù)據(jù)包裝在另一種網(wǎng)絡(luò)包里面進行路由轉(zhuǎn)發(fā)和通信,目前已經(jīng)支持udp、vxlan、host-gw、aws-vpc、gce和alloc路由等數(shù)據(jù)轉(zhuǎn)發(fā)方式,默認的節(jié)點間數(shù)據(jù)通信方式是UDP轉(zhuǎn)發(fā)。
二、Flannel原理
- 首先,Flannel通過Kubernetes API把整個集群的網(wǎng)絡(luò)配置存儲在Etcd中,其中最主要的內(nèi)容為設(shè)置集群的網(wǎng)絡(luò)地址空間。例如,指定整個集群內(nèi)所有容器的IP都取自“10.1.0.0/16”網(wǎng)段。
- 接著,Flannel在每個主機中運行flanneld作為agent,它會為所在主機從集群的網(wǎng)絡(luò)地址空間中,獲取一個小的網(wǎng)段subnet(子網(wǎng)),本主機內(nèi)所有容器的IP地址都將從中分配。
- 然后,Flanneld再將本主機獲取的subnet以及用于主機間通信的Public IP,同樣通過Kubernetes API存儲在Etcd中。
- 最后,Flannel利用各種數(shù)據(jù)轉(zhuǎn)發(fā)方式,例如udp、vxlan、AWS、VPC和GCE路由等等,跨主機轉(zhuǎn)發(fā)容器間的網(wǎng)絡(luò)流量,完成容器間的跨主機通信。
- 首先,定義兩個節(jié)點主機A POD-A 主機B POD-B
- POD-A首先會發(fā)送給docker 0網(wǎng)橋
docker 0會轉(zhuǎn)發(fā)給flannel0網(wǎng)橋 - flannel0會轉(zhuǎn)發(fā)給flanneld(后臺進程),flanned會到ETCD中查看ETCD維護的路由表條目/信息,確認往哪去發(fā)送
- flanned 會在轉(zhuǎn)發(fā)給宿主機的物理網(wǎng)卡
- 物理網(wǎng)卡會以UDP的方式轉(zhuǎn)發(fā)數(shù)據(jù)包(數(shù)據(jù)包中除了主機A和主機B的源TP和目標(biāo)IP之外,還會封裝POD-A和POD-B的源/目標(biāo)Ip)
- 主機B接收到
- 首先解封裝,發(fā)現(xiàn)源IP地址是找自己的(主機IP地址)
- UDP 轉(zhuǎn)發(fā)過來,解封裝之后,發(fā)現(xiàn)了封裝在UDP內(nèi)部的POD IP(源/目標(biāo))
- 主機B的物理網(wǎng)卡就會發(fā)送給flanned進行處理
- 而flanned會查詢ETCD中維護的路由表信息,發(fā)現(xiàn)是自己的pod (也能查詢到找的docker-ip網(wǎng)段是什么網(wǎng)段)
- flanned會發(fā)送給自己的flannel0網(wǎng)橋,flannel網(wǎng)橋再發(fā)送給對應(yīng)的docker (0)網(wǎng)橋
- docker 網(wǎng)橋(網(wǎng)關(guān)),會把這個數(shù)據(jù)包發(fā)送給對應(yīng)的POD-B
三、Flannel的作用
- 使集群中的不同Node主機創(chuàng)建的Docker容器都具有全集群唯一的虛擬IP地址。
- 建立一個覆蓋網(wǎng)絡(luò)(overlay network),通過這個覆蓋網(wǎng)絡(luò),將數(shù)據(jù)包原封不動的傳遞到目標(biāo)容器。覆蓋網(wǎng)絡(luò)是建立在另一個網(wǎng)絡(luò)之上并由其基礎(chǔ)設(shè)施支持的虛擬網(wǎng)絡(luò)。覆蓋網(wǎng)絡(luò)通過將一個分組封裝在另一個分組內(nèi)來將網(wǎng)絡(luò)服務(wù)與底層基礎(chǔ)設(shè)施分離。在將封裝的數(shù)據(jù)包轉(zhuǎn)發(fā)到端點后,將其解封裝。
- 創(chuàng)建一個新的虛擬網(wǎng)卡flannel0接收docker網(wǎng)橋的數(shù)據(jù),通過維護路由表,對接收到的數(shù)據(jù)進行封包和轉(zhuǎn)發(fā)(vxlan)。
- etcd保證了所有node上flanned所看到的配置是一致的。同時每個node上的flanned監(jiān)聽etcd上的數(shù)據(jù)變化,實時感知集群中node的變化
- Overlay Network:覆蓋網(wǎng)絡(luò),在基礎(chǔ)網(wǎng)絡(luò)上疊加的一種虛擬網(wǎng)絡(luò)技術(shù)模式,該網(wǎng)絡(luò)中的主機通過虛擬鏈路連接起來
- VXLAN:將源數(shù)據(jù)包封裝到UDP中,并使用基礎(chǔ)網(wǎng)絡(luò)的IP/MAC作外層報文頭進行封裝,然后再以太網(wǎng)上傳輸,到達目的地后由隧道端點解封并將數(shù)據(jù)轉(zhuǎn)發(fā)到目標(biāo)地址
四、Flannel 網(wǎng)絡(luò)配置
1.node 節(jié)點安裝 docker
systemctl stop firewalld systemctl disable firewalld setenforce 0yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-ce docker-ce-cli containerd.iosystemctl enable docker systemctl start docker'不要忘記配置鏡像加速和優(yōu)化網(wǎng)絡(luò)'vim /etc/sysctl.conf net.ipv4.ip_forward= 1service network restart systemctl restart docker2.master配置
1、 寫入分配的子網(wǎng)段到ETCD中,供flannel使用(master主機)
需要在有證書的目錄下使用此命令
寫入分配的子網(wǎng)段到ETCD中,供flannel使用
3、node節(jié)點操作
1、上傳flannel軟件包到所有的 node 節(jié)點并解壓
拖入軟件包并解壓
--node1、2-- 上傳flannel-v0.10.0-linux-amd64.tar軟件包至/opt目錄下'tar xf flannel-v0.10.0-linux-amd64.tar.gz flanneld 服務(wù)啟動腳本' mk-docker-opts.sh 配合docker配置腳本' README.md 說明文檔'2、建立 K8S 工作目錄并撰寫 flannel.sh 服務(wù)啟動腳本
--node1、2-- '//建立K8S工作目錄,與前文ETCD同理,兩個node節(jié)點同步操作' mkdir /opt/kubernetes/{cfg,bin,ssl} -p mv /opt/mk-docker-opts.sh /opt/flanneld /opt/kubernetes/bin/'//撰寫一個服務(wù)啟動腳本' vim /root/flannel.sh#!/bin/bashETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"} '//定義訪問地址(etcd)'cat <<EOF >/opt/kubernetes/cfg/flanneld '//配置文件'FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \ '//指向etcd的集群地址' -etcd-cafile=/opt/etcd/ssl/ca.pem \ '//etcd用到的證書(變量)' -etcd-certfile=/opt/etcd/ssl/server.pem \ -etcd-keyfile=/opt/etcd/ssl/server-key.pem"EOFcat <<EOF >/usr/lib/systemd/system/flanneld.service '//啟動腳本' [Unit] Description=Flanneld overlay address etcd agent After=network-online.target network.target '//借助于flanneld啟動之前network網(wǎng)絡(luò)功能必須具備' Before=docker.service '//還依賴于docker'[Service] Type=notify '//觸發(fā)調(diào)用' EnvironmentFile=/opt/kubernetes/cfg/flanneld '//定義變量,指向配置文件' ExecStart=/opt/kubernetes/bin/flanneld --ip-masq \$FLANNEL_OPTIONS '//啟動文件指定啟動腳本,并指定集群變量IP' ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env Restart=on-failure[Install] WantedBy=multi-user.target '//多用戶登錄模式'EOFsystemctl daemon-reload systemctl enable flanneld systemctl restart flanneld
3、指定集群啟動腳本并檢查IP地址
--node1、2-- 在/opt/目錄下啟動 . flannel.sh https://192.168.172.10:2379,https://192.168.172.20:2379,https://192.168.172.30:2379systemctl status flanneld.service '//服務(wù)啟動成功'cat /run/flannel/subnet.env '//執(zhí)行完flanneld啟動腳本后會生成此文件:網(wǎng)段環(huán)境變量'
4、配置 docker 以能連接上 flannel
vim /usr/lib/systemd/system/docker.service[Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker EnvironmentFile=/run/flannel/subnet.env ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=alwayssystemctl daemon-reload systemctl restart docker systemctl restart network '//更改完后兩臺node節(jié)點需重載配置文件、重啟docker和網(wǎng)絡(luò)服務(wù),否則仍有可能docker和flannel連接不成功'ip -a '//現(xiàn)在可以看到dokcer與flannel同一網(wǎng)段了'
5、在兩個 node 節(jié)點中創(chuàng)建容器互相 ping 以驗證網(wǎng)絡(luò)互通
--node1、2--docker run -it centos:7 /bin/bash '//運行一個centos容器,下一步互ping對方docker0網(wǎng)卡,以證明flannel起到路由作用' yum install net-tools -y '//使用ifconfg需先安裝網(wǎng)絡(luò)工具' ifconfig docker run -it centos:7 /bin/bash yum install net-tools -y ifconfig
總結(jié)
以上是生活随笔為你收集整理的Kubernetes二进制部署——Flannel网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 告别电脑卡顿!轻松提速,阿扎赛尔2400
- 下一篇: Kubernetes二进制集群部署+We