Skip to content

VLAN Underlay 网络支持

Oilbeater edited this page Jan 18, 2021 · 10 revisions

默认情况下 OVN 使用 Geneve 对跨主机流量进行封装,在基础设施之上抽象出一层虚拟的 overlay 网络。对于性能和吞吐量敏感的场景,Kube-OVN 还支持 Vlan 模式的 underlay 网络,容器网络可以直接通过 vlan 接入物理交换机,达到更好的性能和吞吐量。同时可实现物理网络和容器网络的打通。

为了使用 Vlan 模式,主机上需要有一块专门的网卡供容器网络使用。如果要支持多 VLAN 该网卡在交换机一端的端口需要工作在 trunk 模式下,来允许 802.1q 格式的数据包通过。 如果只是做 Underlay 打通,不需要 VLAN 封装则交换机端口不需要特殊设置,而是需要将后续步骤中的 Kube-OVN 下的 VLAN ID 设置为 0,可达到类似 Macvlan 的效果。

目前 Geneve 或 Vlan 是一个全局选项,所有容器必须工作在相同的网络模式下,未来我们将会进行调整使得一个集群下两种网络模式的容器可以共存。

topology

以 Vlan 模式安装 Kube-OVN

  1. 下载安装脚本
wget https://raw.githubusercontent.com/alauda/kube-ovn/release-1.6/dist/images/install.sh
  1. 修改install.sh, 将 NETWORK_TYPE 设置为 vlan, VLAN_INTERFACE_NAME 设置为对应的主机网卡,VLAN_ID 设置为默认的 VLAN ID。如果 Subnet 没有默认指定 VLAN 则将会使用该默认 VLAN,当为 0 时不做 VLAN 封装,效果上类似 Macvlan 的 Underlay 模式。

  2. 运行安装脚本

bash install.sh

创建新的 Vlan 资源

apiVersion: kubeovn.io/v1
kind: Vlan
metadata:
  name: product
spec:
  vlanId: 10

创建 Namespace

apiVersion: v1
kind: Namespace
metadata:
  name: product
  labels:
    name: product

创建 Subnet 并绑定 Vlan

多个 Subnet 可以绑定到同一 Vlan

apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
  name: product
spec:
  cidrBlock: 10.100.0.0/16
  default: false
  gateway: 10.100.0.1
  gatewayType: distributed
  natOutgoing: true
  vlan: product
  namespaces:
    - product

创建 pod

kubectl run samplepod --image=nginx --namespace=product
Clone this wiki locally