整个运维的体系开始转向k8s

  • LB metallb(实验),ELB, F5(自建) # 第一层开始接触k8s

  • ingress haproxy,nginx,istio ~~ traffic route~~

  • cni calico,cilium 目前比较流行的解决方式
  • OS iptables ipvs(LVS) ebpf(目前很流行,所有网络包处理不走OS)

services很多时 iptables rule甚多,刷新很慢

eBPF 现在代表的是一个技术
一个扩展的或个性化的Linux内核
eBPF Linux 相当于
JavaScript HTML
BCC 一个非常有名的BPF编译项目
伯克利网络包过滤器
在驱动层就处理数据包

流量优化和网络安全
替换掉iptables包过滤的功能

全称是”Extended Berkeley Packet Filter”,1992 伯克利实验室的一篇论文 “The BSD Packet Filter: A New Architecture for User-level Packet Capture”。这篇论文描述了,BPF 是如何更加高效灵活地从操作系统内核中抓取网络数据包的。

fannel
calico full BGP
clium eBPF

物理网卡band 两个网卡
container的网卡和node什么关系?
每个node上有一个calico的container 和pod的时veth-pair

Felix 管理veth-pair 新的路由信息给confd
Bird 真正的网络路由功能
confd

BGP 把自己的路由广播出去,扩散

目前kube-proxy使用的模式是ipvs

docker的网络
docker是和vm完全不同的虚拟化系统,利用主机完成管理,而虚拟机需要模拟硬件,如网卡

docker通过什么方式实现资源隔离和分配

  • namespace 能操作的资源来进行划分
  • cgroup 资源的使用

docker0的网桥被创建
host端和container端的网卡组成veth-pair,默认只能看到在主机上看到veth-pair网卡,通过指定ns可以看到container内部网卡信息。
nsls 列出ns
nsenter 进入ns
载使用主机的网络命令查看信息

veth-pair和namespace很重要
docker上的端口映射和服务发布还是依赖iptables来实现的,在k8s上才是ipvs和eBPF

把一个端口映射出去iptables有什么操作

  • pre-routing 把所有到达eth0的包 DNAT
  • post-routing MASQUADE(SNAT)

Linux网络基本配置

  • bond(提高吞吐量,现在不需要,802.3ad) pair(veth-pair 相当于网络的两端。container) bridge 创建了一个brige之后,可以把多个网卡绑定到这个bridge上面,来负责网络的交换 container
  • iptables ipvs
  • ebpf XDP

扩展的bpf
linux在网络方面的限制是什么?
数据包-物理链路-系统驱动封包-内核-走7层
eBPF 内核之前 网卡之后 实现了cilium 网络吞吐百倍级
calico也实现了ebpf的支持

iptable在内核实现是netfilter iptbales是用户空间的命令行
有哪些table

ipvs 底层实现是LVS 管理工具 ipvsadm

modprobe -l
insmod