Kubernetes二进制部署——Flannel网络
生活随笔
收集整理的這篇文章主要介紹了
Kubernetes二进制部署——Flannel网络
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Kubernetes二進制部署——Flannel網絡
- 一、Flannel簡介
- 二、Flannel原理
- 三、Flannel的作用
- 四、Flannel 網絡配置
- 1.node 節點安裝 docker
- 2.master配置
- 1、 寫入分配的子網段到ETCD中,供flannel使用(master主機)
- 3、node節點操作
- 1、上傳flannel軟件包到所有的 node 節點并解壓
- 2、建立 K8S 工作目錄并撰寫 flannel.sh 服務啟動腳本
- 3、指定集群啟動腳本并檢查IP地址
- 4、配置 docker 以能連接上 flannel
- 5、在兩個 node 節點中創建容器互相 ping 以驗證網絡互通
一、Flannel簡介
- Flannel是CoreOS團隊針對Kubernetes設計的一個網絡規劃服務,簡單來說,它的功能是讓集群中的不同節點主機創建的Docker容器都具有全集群唯一的虛擬IP地址。
- 在默認的Docker配置中,每個節點上的Docker服務會分別負責所在節點容器的IP分配。這樣導致的一個問題是,不同節點上容器可能獲得相同的內外IP地址。并使這些容器之間能夠之間通過IP地址相互找到,也就是相互ping通。
- Flannel的設計目的就是為集群中的所有節點重新規劃IP地址的使用規則,從而使得不同節點上的容器能夠獲得同屬一個內網且不重復的IP地址,并讓屬于不同節點上的容器能夠直接通過內網IP通信。
- Flannel實質上是一種“覆蓋網絡(overlaynetwork)”,也就是將TCP數據包裝在另一種網絡包里面進行路由轉發和通信,目前已經支持udp、vxlan、host-gw、aws-vpc、gce和alloc路由等數據轉發方式,默認的節點間數據通信方式是UDP轉發。
二、Flannel原理
- 首先,Flannel通過Kubernetes API把整個集群的網絡配置存儲在Etcd中,其中最主要的內容為設置集群的網絡地址空間。例如,指定整個集群內所有容器的IP都取自“10.1.0.0/16”網段。
- 接著,Flannel在每個主機中運行flanneld作為agent,它會為所在主機從集群的網絡地址空間中,獲取一個小的網段subnet(子網),本主機內所有容器的IP地址都將從中分配。
- 然后,Flanneld再將本主機獲取的subnet以及用于主機間通信的Public IP,同樣通過Kubernetes API存儲在Etcd中。
- 最后,Flannel利用各種數據轉發方式,例如udp、vxlan、AWS、VPC和GCE路由等等,跨主機轉發容器間的網絡流量,完成容器間的跨主機通信。
- 首先,定義兩個節點主機A POD-A 主機B POD-B
- POD-A首先會發送給docker 0網橋
docker 0會轉發給flannel0網橋 - flannel0會轉發給flanneld(后臺進程),flanned會到ETCD中查看ETCD維護的路由表條目/信息,確認往哪去發送
- flanned 會在轉發給宿主機的物理網卡
- 物理網卡會以UDP的方式轉發數據包(數據包中除了主機A和主機B的源TP和目標IP之外,還會封裝POD-A和POD-B的源/目標Ip)
- 主機B接收到
- 首先解封裝,發現源IP地址是找自己的(主機IP地址)
- UDP 轉發過來,解封裝之后,發現了封裝在UDP內部的POD IP(源/目標)
- 主機B的物理網卡就會發送給flanned進行處理
- 而flanned會查詢ETCD中維護的路由表信息,發現是自己的pod (也能查詢到找的docker-ip網段是什么網段)
- flanned會發送給自己的flannel0網橋,flannel網橋再發送給對應的docker (0)網橋
- docker 網橋(網關),會把這個數據包發送給對應的POD-B
三、Flannel的作用
- 使集群中的不同Node主機創建的Docker容器都具有全集群唯一的虛擬IP地址。
- 建立一個覆蓋網絡(overlay network),通過這個覆蓋網絡,將數據包原封不動的傳遞到目標容器。覆蓋網絡是建立在另一個網絡之上并由其基礎設施支持的虛擬網絡。覆蓋網絡通過將一個分組封裝在另一個分組內來將網絡服務與底層基礎設施分離。在將封裝的數據包轉發到端點后,將其解封裝。
- 創建一個新的虛擬網卡flannel0接收docker網橋的數據,通過維護路由表,對接收到的數據進行封包和轉發(vxlan)。
- etcd保證了所有node上flanned所看到的配置是一致的。同時每個node上的flanned監聽etcd上的數據變化,實時感知集群中node的變化
- Overlay Network:覆蓋網絡,在基礎網絡上疊加的一種虛擬網絡技術模式,該網絡中的主機通過虛擬鏈路連接起來
- VXLAN:將源數據包封裝到UDP中,并使用基礎網絡的IP/MAC作外層報文頭進行封裝,然后再以太網上傳輸,到達目的地后由隧道端點解封并將數據轉發到目標地址
四、Flannel 網絡配置
1.node 節點安裝 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'不要忘記配置鏡像加速和優化網絡'vim /etc/sysctl.conf net.ipv4.ip_forward= 1service network restart systemctl restart docker2.master配置
1、 寫入分配的子網段到ETCD中,供flannel使用(master主機)
需要在有證書的目錄下使用此命令
寫入分配的子網段到ETCD中,供flannel使用
3、node節點操作
1、上傳flannel軟件包到所有的 node 節點并解壓
拖入軟件包并解壓
--node1、2-- 上傳flannel-v0.10.0-linux-amd64.tar軟件包至/opt目錄下'tar xf flannel-v0.10.0-linux-amd64.tar.gz flanneld 服務啟動腳本' mk-docker-opts.sh 配合docker配置腳本' README.md 說明文檔'2、建立 K8S 工作目錄并撰寫 flannel.sh 服務啟動腳本
--node1、2-- '//建立K8S工作目錄,與前文ETCD同理,兩個node節點同步操作' mkdir /opt/kubernetes/{cfg,bin,ssl} -p mv /opt/mk-docker-opts.sh /opt/flanneld /opt/kubernetes/bin/'//撰寫一個服務啟動腳本' 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網絡功能必須具備' Before=docker.service '//還依賴于docker'[Service] Type=notify '//觸發調用' 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 '//服務啟動成功'cat /run/flannel/subnet.env '//執行完flanneld啟動腳本后會生成此文件:網段環境變量'
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節點需重載配置文件、重啟docker和網絡服務,否則仍有可能docker和flannel連接不成功'ip -a '//現在可以看到dokcer與flannel同一網段了'
5、在兩個 node 節點中創建容器互相 ping 以驗證網絡互通
--node1、2--docker run -it centos:7 /bin/bash '//運行一個centos容器,下一步互ping對方docker0網卡,以證明flannel起到路由作用' yum install net-tools -y '//使用ifconfg需先安裝網絡工具' ifconfig docker run -it centos:7 /bin/bash yum install net-tools -y ifconfig
總結
以上是生活随笔為你收集整理的Kubernetes二进制部署——Flannel网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 告别电脑卡顿!轻松提速,阿扎赛尔2400
- 下一篇: 芝奇1600内存条超频秘籍:稳定提升频率