补几张 VXLAN 的图


原理篇:Linux 网络基础知识 - VXLAN 原理介绍
Linux 基础知识 - 一文学会网络虚拟化
Overlay 与 Underlay 的关系

在 VXLAN 网络中,最重要的就是 VTEP(VXLAN Tunnel Endpoints,VXLAN 隧道端点)。VTEP 作为隧道端点,负责对原始二层网络包进行封包跟解包处理,即将原始二层网络包通过 UDP 协议在底层物理网络进行传输。VTEP 可以是一台物理交换机,也可以是在 Linux 宿主机内核态的一个 VXLAN 虚拟设备。
这个也是我们常说的封包解包的由来,另外 Overlay 网络因为需要走 Underlay 网络,因此它的 MTU 要设置比 Underlay 网络的小,通常情况下 Underlay 网络的 MTU 为 1500,则 Overlay 的 MTU 设置为 1450.
VXLAN 协议

VXLAN 协议中最重要的便是 VXLAN Header,VTEP 在给原始二层网络包加上 VXLAN Header 之后便通过 UDP 协议发送出去。VXLAN Header 也比较简单:

VXLAN Header 中最重要的便是 VNI(VXLAN Network Identifier)。VXLAN 的一个主要设计就是为了支持多租户,VNI 就是租户 ID。VNI 有 24 位,最多可以支持 2^24=16777216 个租户,而传统的 VLAN 只支持 4096 个租户,远远多于 VLAN。
VPC 多租户
我们以 OpenStack 的 Neutron 为例,看一下它面向多租户的 VPC 虚拟网络模型:

Neutron 是一个为 OpenStack 提供 Network Connectivity as s Service 的项目,通过 RESTful API(Core & Plugin API)提供了 Network、Subnet、Port、Router 等多种虚拟网络资源及其服务类型,帮助用户构建构建面向多租户的 VPC(Virtual Private Cloud,虚拟私有云)虚拟网络模型。使得租户可以在自己的 VPC 内可以自由定义 Subnet 划分、IP Pool 规划、Routing Table、ACL 以及 Security Group 访问控制。
详细可以参考:《基于 Linux Bridge 的 Neutron 多平面网络实现原理》
地址:https://www.cnblogs.com/jmilkfan-fanguiju/p/10589726.html
Kubernetes 场景中的流量图

节点内 Pod 之间的流量数据包将由 OVS 网桥直接转发。
跨节点 Pod 之间的流量数据包将首先转发到 antrea-tun0 端口,封装并通过隧道发送到目标节点;然后将它们解封装,通过 antrea-tun0 端口注入到 OVS 网桥,最后转发到目标 Pod。
Pod 到外部流量 发往外部 IP 或节点网络的数据包将转发到 antrea-gw0 端口(因为它是本地 Pod 子网的网关),并将路由(基于节点上配置的路由)到节点的适当网络接口(例如,裸机节点的物理网络接口)并从那里发送到节点网络。Antrea Agent 创建 iptables(MASQUERADE)规则以对来自 Pod 的数据包执行 SNAT,因此它们的源 IP 将在发出之前重写为节点的 IP。
VM 网络流量的逻辑本质上和 K8s Pod 网络流量一样,这里涉及到了 OVS 和 Andrea(VMware 开源的一个 Kubernetes CNI 插件)。
到顶部