【k8s】7.k8s网络模型(一):容器网络接口CNI,VXLAN网络

目录

1. 术语

2. 容器网络接口CNI

CNI 的两部分

常见的插件

k8s 创建容器网络的过程

3 VXLAN 

思想

跨主机容器间如何利用 VXLAN 通信

VXLAN 的多种模式


1. 术语

二层网络:

核心层+汇聚层 两层,用于搭建局域网(网桥/交换机),通过MAC寻址进行通信,在同一个冲突域内。

三层网络:

核心层+汇聚层+接入层 三层。用于搭建大型网络,通过IP路由通信,跨多个冲突域。

封包:

网络数据包封装,在报文中添加源地址、目标地址、端口号等信息,使网络设备能够正确地识别和转发报文,确保到达目标地址。

Overlay 覆盖网络:

在已有网络上建立一个虚拟网络,采用隧道封包技术,把数据包封包解包,转发到目的地。通常由网络插件来实现,如flannel、calico。

Underlay 网络:

底层的物理网络,通过硬件设备(交换机、路由器、负载均衡设备、防火墙)转发数据包。Underlay网络可以是二层也可以是三层网络。

VLAN 虚拟局域网:

将一个物理的 LAN 从逻辑上划分成多个广播域。每个VLAN是一个广播域,VLAN内的主机间可以直接通信,而VLAN间则不能直接互通,以此达到隔离广播报文的目的。

VXLAN 虚拟可扩展局域网:

是一种 overlay 技术,通过三层的网络搭建虚拟的二层网络。它在源设备与目的设备之间建立一条隧道,采用封包技术将报文封装后转发,屏蔽了底层网络的结构和细节。

2. 容器网络接口CNI

容器网络接口(Container Network Interface),是一种标准的接口, 将异种网络环境的实现抽象出来,用于在配置或销毁容器时动态配置适当的网络配置和资源,实现kubernetes集群的Pod网络通信及管理。

CNI 的两部分

  • CNI接口,用于给容器配置网络,包含:
    • 添加网络 AddNetwork (net *NetworkConfig, rt *RuntimeConf) (types.Result, error)
    • 删除网络 DelNetwork (net *NetworkConfig, rt *RuntimeConf) error
  • IPAM 接口,用于给容器分配IP地址

常见的插件

具体的网络实现是由对应的插件去做的

  • flannel
  • calico:性能优于 flannel
  • 公有云:AWS/阿里/腾讯的flannel定制版
  • 私有云:Vmware NSX-T
  • 网络性能要求高时:MacVlan

k8s 创建容器网络的过程

第1步:kubelet先创建pause容器,创建一个network namespace

第2步:调用网络driver,寻找CNI插件(CNI的配置目录为/etc/cni/net.d)

$ ls /etc/cni/net.d
10-flannel.conflist

$ cat 10-flannel.conflist
{
  "name": "cbr0",
  "cniVersion": "0.3.1",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

第3步:CNI driver根据配置去调用具体的CNI插件

这里的调用是二进制调用方式,可执行文件在/opt/cni/bin下

$ ls /opt/cni/bin
bandwidth  dhcp   firewall  host-device  ipvlan    macvlan  ptp  static  vlan
bridge     dummy  flannel   host-local   loopback  portmap  sbr  tuning  vrf

第4步:CNI插件给pause容器配置正确的网络,pod中其他的容器都是用pause的网络

3 VXLAN 

VXLAN 虚拟可扩展的局域网(Virtual eXtensible Local Area Network),是一种 overlay 技术,通过三层的网络来搭建虚拟的二层网络。

思想

  • 创建在原有的 IP 网络(三层)上,只要是三层可达(能够通过 IP 互相通信)的网络就能部署 VXLAN。
  • 每个端点上都有一个 VTEP(VXLAN Tunnel Endpoints)设备,负责 VXLAN 协议报文的封包和解包,也就是在虚拟报文上封装 VTEP 通信的报文头。VTEP 设备可以是网络设备(交换机),也可以是一台机器(虚拟化集群中的宿主机)。
  • 物理网络上可以创建多个 VXLAN 网络,这些 VXLAN 网络可以认为是一个虚拟隧道(Tunnel),不同节点的虚拟机能够通过隧道直连。
  • 每个 VXLAN 网络由唯一的 VNI(VXLAN Network Identifier)标识,不同的 VXLAN 互不影响。一共可以虚拟出 2^24 = 16,777,216 个租户,也就是说使用 VXLAN 搭建的公有云可以理论上可以支撑千万级别的租户。
手动在两台机器之间搭建 VXLAN,实现点对点的虚拟二层网络通信: Kubernetes进阶实践 | ylw's blog

跨主机容器间如何利用 VXLAN 通信

在k8s集群内,如果使用 VXLAN 点对点通信,那所有pod之间都需要点对点互联,因此不能使用点对点模型。

由于k8s容器的所有流量都会打到网桥上,那么可以直接将 VTEP 设备插到网桥上,容器流量通过网桥发至 VTEP 设备,再经过 VXLAN 网络转发出去

VXLAN 的多种模式

  • 点对点模式:明确的端到端
  • VXLAN + Bridge模式:明确的端到端,但端与端上的服务是多对多的
  • 多播模式:让同一个 VXLAN 网络中容纳多个节点,形成一张 VXLAN 连通网
  • 手动维护
  • VXLAN 分布式控制中心:(一种SDN架构)
    • 预先将每个点的信息(MAC地址,IP地址)注册到分布式控制中心
    • 将每个 VXLAN 网络的 VTEP 地址也注册到分布式控制中心
    • 每个VTEP 上有一个agent,与控制中心通信,获取信息

参考:
  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值