k8s的flannel网络插件配置
flannel的网络插件配置
Kubernetes网络通信需要解决以下问题:
(1)容器间通信:同一个Pod内的多个容器间的通信,lo
(2)Pod通信:Pod IP <-直达-> Pod IP
(3)Pod与Service通信:Pod IP <--> Cluster IP
(4)Service与集群外部客户端的通信;(ingress、nodeport、loadbalancer)
kubernetes集群内的网络需要借助网络插件来解决;
CNI:(Container Network Interface)常用的网络插件有:
flannel (部署简单,支持网络地址分配,但不支持网络策略)
calico (部署麻烦,支持网络地址分配,也支持网络策略,而且支持基于BGP协议实现三层网络路由)
canel (flannel与calico的组合)
kube-router (由kubernetes研发的网络插件)
...
我们可以使用flannel的网络分发,需要时也可以借助calico的网络策略。flannel+calico
解决方案:
虚拟网桥:网络叠加方式实现通信;
多路复用: MacVLAN(基于MAC方式创建vlan,为每个虚拟接口分配一个独有的mac地址,使得一个物理网卡等承载多个容器。这样一来,容器就直接使用物理网卡,并基于物理网卡中的mac实现跨节点通信)
硬件交换:SR-IOV(一个网卡,支持能直接在物理机上虚拟出多个接口)
把网络配置文件放在/etc/cni/net.d/目录下,就可以被kubelet识别加载为网络插件使用;
flannel支持多种后端:
VxLAN:虚拟扩展局域网
(1)VxLAN 报文封装
flannel默认使用VxLAN方式来作为后端网络传输方式的;
VxLAN:使用网络叠加方式,通过隧道(主机网卡中的flannel.x,默认为10.244.0.0 255.255.255.255)专门封装隧道协议报文的,而且一旦后端存在被分配到网络地址的pod时,会创建一个cni接口,而且cni的网络地址与flannel在同一网段。可以理解为类似于四层隧道的协议。
VxLAN因为要进行封装多层报文,是额外开销,所以使得性能相对于其他方式较弱一点,但好在可以单独管理一个网络,而且物理网络之间是彼此不相干扰的。
(2)Directrouting 直接路由
若集群过于庞大,则避免不了跨网段通信,或者既想使用VxLAN可以跨网段的特性,又想host-gw的高性能,我们可以设置为Directrouting,使其同网段的用host-gw,不同网段的自动使用VxLAN网络叠加。
Host-gw:host Gateway主机网关
把主机自己的网络接口当作网关使用,使Pod的网络地址能通过此接口对外进行传递信息。
报文通过路由到达对方,而不会通过隧道网络叠加,所以这种比VxLAN性能高一点。
但是这种方式要求个节点必须工作在同一网络中。
UDP:性能比以上都弱一点。
我们也可以将flannel配置为VxLAN + Directrouting方式,若请求端和回应端在同网段,则使用直接路由模式,若不同网段,则自动降级为VxLAN模式。
flannel的配置参数:
Network:flannel使用CIDR格式的网络地址,用于为Pod配置网络功能;
10.244.0.0/16 ->
master:10.244.0.0/24
node01:10.244.1.0/24
...
node255:10.244.255.0/24
10.0.0.0/8
10.0.0.0/24
...
10.255.255.0/24
SubnetLen:把network切分子网络供各节点使用,使用多长的掩码进行切分,默认为24位;
SubnetMin:10.244.10.0/24 表示最小限制,10之前的地址不可以被分配使用;
SubnetMax:10.244.100.0/24 表示最大限制,100之后的地址不可以被分配使用;
Backend:VxLan,host-gw,udp
Vxlan:Vxlan,Directrouting
例:修改flannel的工作模式为VxLAN+Directrouting
注意:若要使修改生效,必须重装flannel插件,此修改最好在搭建K8S集群时做修改,不要在集群使用中做修改,否则会影响到所有使用flannel的后端客户端无法通信。
1.找到flannel的configmap,查看当前flannel的工作模式:
kubectl get cm kube-flannel-cfg -n kube-system -o yaml
找到如下段:
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
通过在node节点查看路由:
[root@k8s-node1 ~]# ip route show
default via 192.168.1.1 dev ens33 proto static metric
10.244.0.0/ via 10.244.0.0 dev flannel. onlink
10.244.1.0/ via 10.244.1.0 dev flannel. onlink
10.244.2.0/ dev cni0 proto kernel scope link src 10.244.2.1
172.17.0.0/ dev docker0 proto kernel scope link src 172.17.0.1
192.168.1.0/ dev ens33 proto kernel scope link src 192.168.1.103 metric
可以看到,10.244.0.0<-->10.244.1.0是通过flannel.1网卡通信,不管是同网段还是不同网段,显然是通过隧道封装过的。
2.卸载flannel插件,修改配置清单的net-conf.json段,加入Directrouting
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
"Directrouting": true #默认没有这段,若要修改,必须重装flannel插件!!!
}
3.部署修改过的flannel插件:
kubectl apply -f kube-flannel.yaml
4.查看节点路由表:
ip route show
default via 192.168.1.1 dev ens33 proto static metric
10.244.0.0/ via 192.168.1.100 dev ens33
10.244.1.0/ via 192.168.1.102 dev ens33
10.244.2.0/ dev cni0 proto kernel scope link src 10.244.2.1
172.17.0.0/ dev docker0 proto kernel scope link src 172.17.0.1
192.168.1.0/ dev ens33 proto kernel scope link src 192.168.1.103 metric
可以看出,10.244.0.0<-->10.244.1.0是通过宿主机网卡ens33通信的,明显看出是直接路由,同网段的用cni0接口直接转发,不同网段用ens33接口直接路由。
5.也可以用tcpdump进行抓包进行查看:
tcpdump -i 宿主机网口名称 -nn
若要改为host-gw模式的话,只需将net-conf.json段的type改为host-gw即可,不过也要重装flannel插件,建议部署集群时应慎重考虑要使用哪种模式。
注:host-gw不支持与Directrouting同时工作。
k8s的flannel网络插件配置的更多相关文章
- Flannel网络插件配置
# ps -ef|grep docker|grep bip FLANNEL_OPTIONS="-ip-masq=true" -ip-masq=true 这个参数的目的是让flann ...
- Kubernetes1.91(K8s)安装部署过程(五)--安装flannel网络插件
node节点需要安装flannel网络插件才能保证所有的pod在一个局域网内通信,直接使用yum安装即可,版本是0.7.1. 1.安装flannel插件: 注意是2个node节点都需要安装,都需要修改 ...
- K8S Flannel网络插件
0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件.组件.由于Kubernetes通过开放的CNI ...
- 使用kubeadm安装kubernetes/部署前准备/flannel网络插件/镜像下载/
本文内容参考<kuberneters进阶实战>/马哥的新书/推荐 部署前的准备 主机名称解析 分布式系统环境中的多主机通信通常基于主机名称进行,这在IP地址存在变化的可能性时为主机提供了固 ...
- K8S(03)核心插件-Flannel网络插件
系列文章说明 本系列文章,可以基本算是 老男孩2019年王硕的K8S周末班课程 笔记,根据视频来看本笔记最好,否则有些地方会看不明白 需要视频可以联系我 K8S核心网络插件Flannel 目录 系列文 ...
- k8s西游记 - 切换网络插件IP池
前言 最近在另一个k8s集群中,搭建了kong网关,在配置OIDC插件时,希望使用Memcahe代替Cookie来存储会话信息,于是把部署在同一局域网Memcahe的内网IP,比如:192.168.1 ...
- 容器编排系统K8s之flannel网络模型
前文我们聊到了k8s上webui的安装和相关用户授权,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14222930.html:今天我们来聊一聊k8s上的网络 ...
- K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股
K8s 二进制部署单节点 master --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ...
- 3.kubernetes的CNI网络插件-Flannel
目录 1.1.K8S的CNI网络插件-Flannel 1.1.1.集群规划 1.1.2.下载软件.解压.软链接 1.1.3.最终目录结构 1.1.4.拷贝证书 1.1.5.创建配置 1.1.6.创建启 ...
随机推荐
- python基本数据类型2——操作
字符串 name = "alex" # 移除两边的空格 print(name.strip()) #strip不修改值 # 是否以"al"开头 print(nam ...
- centOS6.5 关闭关盖待机
因为centOS安装在笔记本上面的,有时要把电脑放在一边,用SSH连接 所以需要关盖不休眠 用命令没找到怎么设置 后面在桌面电脑选项里面设置的,设置成黑屏或者不执行动作应该都是可以的.
- Codeforces Round #375 (Div. 2) D. Lakes in Berland 并查集
http://codeforces.com/contest/723/problem/D 这题是只能把小河填了,题目那里有写,其实如果读懂题这题是挺简单的,预处理出每一块的大小,排好序,从小到大填就行了 ...
- (转)Centos 7.3 用户和组管理
Centos 7.3 用户和组管理 原文:http://blog.csdn.net/github_39069288/article/details/73306489 3.1 用户和密码配置文件 pas ...
- Zeppelin的入门使用系列之使用Zeppelin来创建临时表UserTable(三)
不多说,直接上干货! 前期博客 Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二) 我们必须要先使用Spark 语句创建临时表UserTable,后续才能使用Spark SQ ...
- LindAgile~缓存拦截器支持类的虚方法了
写它的原因 之前写过一个缓存拦截器,主要在方法上添加CachingAspect特性之后,它的返回值就可以被缓存下来,下次访问时直接从缓存中返回结果,而它有一个前提,就是你的方法需要是一个接口方法,缓存 ...
- 洪水 Pow
Description AKD市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD市全被水淹没了.Blue Mary,AKD市的市长,召集了他的所有顾问(包括你)参加一个紧急会议.经过细致的商 ...
- IDEA对比文件
和另一个文件对比:右击文件,选择另一个文件 和剪切板的内容对比:右击代码区域
- Dubbo封装rest服务返回结果
由于Dubbo服务考虑到一个是给其他系统通过RPC调用,另外一个是提供HTTP协议本身系统的后台管理页面,因此Dubbo返回参数在rest返回的时候配置拦截器进行处理. 在拦截器中,对返回参数封装成如 ...
- Servlet中的初始化参数、上下文参数、以及@Resource资源注入
配置初始化参数.上下文参数.以及使用@Resource注解进行资源注入,目的是为了降低代码的耦合度.当项目需求进行变更的时候,不需要反复更改源代码,只需更改web.xml文件即可. 一:Servlet ...