【无标题】

文章详细介绍了Kubernetes中的CNI插件,如flannel和calico的工作原理。flannel利用VXLAN实现跨节点通信,而calico则通过BGP实现更高效的三层网络转发并提供网络策略进行隔离。此外,文章还提到了NetworkPolicy用于控制Pod的网络访问规则。
摘要由CSDN通过智能技术生成

k8s通过CNI接口接入其他插件来实现网络通讯。目前比较流行的插件有flannel,calico等。 CNI插件存放位置:# cat /etc/cni/net.d/10-flannel.conflist

插件使用的解决方案如下: 虚拟网桥,虚拟网卡,多个容器共用一个虚拟网卡进行通信。 多路复用:MacVLAN,多个容器共用一个物理网卡进行通信。 硬件交换:SR-LOV,一个物理网卡可以虚拟出多个接口,这个性能最好

容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现;
pod之间的通信: 同一节点的pod之间通过cni网桥转发数据包。 不同节点的pod之间的通信需要网络插件支持。

pod和service通信: 通过iptables或ipvs实现通信,ipvs取代不了iptables,因为ipvs只能做 负载均衡,而做不了nat转换

pod和外网通信:iptables的MASQUERADE。
Service与集群外部客户端的通信;(ingress、nodeport、loadbalancer)

flannel网络

flannel网络原理

当容器发送IP包,通过veth pair 发往cni网桥,再路由到本机的flannel.1设备进行处理。 • VTEP设备之间通过二层数据帧进行通信,源VTEP设备收到原始IP包后,在上面加 上一个目的MAC地址,封装成一个内部数据帧,发送给目的VTEP设备。 • 内部数据桢,并不能在宿主机的二层网络传输,Linux内核还需要把它进一步封装成 为宿主机的一个普通的数据帧,承载着内部数据帧通过宿主机的eth0进行传输。 • Linux会在内部数据帧前面,加上一个VXLAN头,VXLAN头里有一个重要的标志叫 VNI,它是VTEP识别某个数据桢是不是应该归自己处理的重要标识。 • flannel.1设备只知道另一端flannel.1设备的MAC地址,却不知道对应的宿主机地址是 什么。在linux内核里面,网络设备进行转发的依据,来自FDB的转发数据库,这个 flannel.1网桥对应的FDB信息,是由flanneld进程维护的。 • linux内核在IP包前面再加上二层数据帧头,把目标节点的MAC地址填进去,MAC地 址从宿主机的ARP表获取。 • 此时flannel.1设备就可以把这个数据帧从eth0发出去,再经过宿主机网络来到目标节 点的eth0设备。目标主机内核网络栈会发现这个数据帧有VXLAN Header,并且VNI 为1,Linux内核会对它进行拆包,拿到内部数据帧,根据VNI的值,交给本机 flannel.1设备处理,flannel.1拆包,根据路由表发往cni网桥,最后到达目标容器。

 

 k8s网络通信

配置flannel

  flannel支持多种后端:

• Vxlan • vxlan //报文封装,默认

• Directrouting //直接路由,跨网段使用vxlan,同网段使用host-gw模式。

• host-gw: //主机网关,性能好,但只能在二层网络中,不支持跨网络, 如果有成千上万的Pod,容易产生广播风暴,不推荐

• UDP: //性能差,不推荐

 重启生效

每个节点都有此路由表,本机走cni0。

calico网络插件

 官网:https://docs.projectcalico.org/getting-started/kubernetes/selfmanaged-onprem/onpremises
calico简介:

• flannel实现的是网络通信,calico的特性是在pod之间的隔离。

• 通过BGP路由,但大规模端点的拓扑计算和收敛往往需要一定的时间和 计算资源。

• 纯三层的转发,中间没有任何的NAT和overlay,转发效率最好。

• Calico 仅依赖三层路由可达。Calico 较少的依赖性使它能适配所有 VM、 Container、白盒或者混合环境场景。

 

每个节点都删除 

 安装calico: 

mkdir colico,cd colico

 wget https://docs.projectcalico.org/manifests/calico.yaml

 vim calico.yml 

 多余的删掉,只留一个svc,两个由控制器负责的pod

 网络策略
NetworkPolicy策略模型:控制某个namespace下的pod的网络出入站规则

官网:网络策略 | Kubernetes

网络策略通过网络插件 来实现。要使用网络策略,你必须使用支持 NetworkPolicy 的网络解决方案。 创建一个 NetworkPolicy 资源对象而没有控制器来使它生效的话,是没有任何作用的。

默认拒绝所有入站流量

可以通过创建选择所有容器但不允许任何进入这些容器的入站流量的 NetworkPolicy 来为名字空间创建 “default” 隔离策略。

 vim police1.yaml

 

 

 有了这个策略,任何额外的策略都不会导致到这些 Pod 的任何入站连接被拒绝。 此策略对任何 Pod 的出口隔离没有影响

 

 

 

 

此时在test ns下创建的pod可以访问myapp标签的pod,因为test ns添加了yaml文件中指定的标签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值