cilium vxlan vtep 对接 第三方

55 阅读6分钟

虽然目前还是 beta 版本,但已经被广泛采用

Cilium VTEP 集成(beta 版)

1. 一段话总结

Cilium的VXLAN Tunnel Endpoint(VTEP)集成(beta版) 支持第三方 VTEP 设备(如外部负载均衡器BIG-IP)通过 VXLAN 直接与 Cilium 管理的 Pod 收发流量,启用前需确保 Cilium 已在 K8s 集群正常安装且VTEP 设备配置好端点 IP、CIDR、MAC 地址(VXLAN 网络标识符 VNI 固定为2);

启用可通过 Helm 命令或修改cilium-config ConfigMap 配置相关参数(含 VTEP 端点 IP、CIDR、子网掩码、MAC 地址),并重启 Cilium 守护进程集;测试需在 Linux VM 配置 vxlan 设备、IP、路由及 ARP 广播规则后 ping Cilium 管理的 Pod,当前该功能存在不支持 Cilium 管理的 Pod 与 VTEP 间 IPsec 加密的限制。

image.png


3. 详细总结

一、功能基础信息

项目详情
功能名称VXLAN Tunnel Endpoint(VTEP)Integration
功能状态beta版,使用中若遇问题需提供反馈并在GitHub提交issue
核心作用允许第三方VTEP设备(如外部负载均衡器BIG-IP)通过VXLAN与Cilium管理的Pod直接收发流量
关键标识要求VXLAN 网络标识符(VNI)必须配置2,代表 VTEP 流量对应 world 身份(参考Special Identities)

二、前置准备条件

  1. ** Cilium 集群状态验证**

    1. 前提:Cilium 已正确安装在 Kubernetes 集群(参考 Cilium Quick Installation)
    2. 验证操作:执行cilium status命令,确认 Cilium 处于正常运行状态
  2. ** VTEP 设备配置 **

    1. 需提前为VTEP设备配置以下参数:

      • VTEP 端点 IP(VTEP Endpoint IP)

      • VTEP CIDR(VTEP CIDR Ranges)

      • VTEP MAC 地址(VTEP MAC)

      • VNI:固定设为2

三、VTEP 集成启用步骤

该功能默认禁用,启用需配置 VTEP 相关参数并重启 Cilium,提供两种配置方式:

方式1:通过 Helm 命令配置

执行以下 Helm 升级命令,设置 VTEP 启用及相关参数(示例参数可根据实际环境替换):

helm upgrade cilium cilium/cilium --version 1.18.2 \
  --namespace kube-system \
  --reuse-values \
  --set vtep.enabled="true" \
  --set vtep.endpoint="10.169.72.236 10.169.72.238" \
  --set vtep.cidr="10.1.1.0/24   10.1.2.0/24" \
  --set vtep.mask="255.255.255.0" \
  --set vtep.mac="82:36:4c:98:2e:56 82:36:4c:98:2e:58"

方式2:修改cilium-config ConfigMap配置

  1. 编辑cilium-config ConfigMap,添加/修改以下配置项:

    1.  enable-vtep:   "true"
       vtep-endpoint: "10.169.72.236    10.169.72.238"  # 多个端点IP用空格分隔
       vtep-cidr:     "10.1.1.0/24   10.1.2.0/24"       # 多个CIDR用空格分隔
       vtep-mask:     "255.255.255.0"                   # 子网掩码
       vtep-mac:      "82:36:4c:98:2e:56 82:36:4c:98:2e:58"  # 多个MAC用空格分隔
      
  2. 重启 Cilium 守护进程集

  3. 配置完成后,执行以下命令重启Cilium以应用配置:

    kubectl -n $CILIUM_NAMESPACE rollout restart ds/cilium
    

      (注:$CILIUM_NAMESPACE为 Cilium 所在命名空间,通常为 kube-system

四、VTEP 集成测试流程

测试需准备一台与 Cilium 节点网络连通的 Linux VM,操作需root权限或通过sudo执行,具体步骤如下:

1. 测试环境说明

节点类型IP地址关键设备/组件
Cilium节点10.169.72.233cilium_vxlan 设备、busybox Pod(eth0网卡)
Linux VM(VTEP)10.169.72.236ens192 网卡、vxlan2 设备

2. Linux VM配置步骤

  1. 创建并配置 vxlan2 设备

    1.  # 创建 vxlan2 设备,指定 VNI=2、目标端口 8472、本地IP(VM 的 ens192 IP)
       ip link add vxlan2 type vxlan id 2 dstport 8472 local 10.169.72.236 dev ens192
       # 设置 vxlan2 设备的 MAC 地址(需与 Cilium 配置的 vtep-mac一致)
       ip link set dev vxlan2 address 82:36:4c:98:2e:56
       # 启用 vxlan2 设备
       ip link set vxlan2 up
      
  2. 配置 vxlan2 设备 IP

  3. 为 vxlan2 分配对应 VTEP CIDR(如10.1.1.0/24)的IP:

    ip addr add 10.1.1.236/24 dev vxlan2
    
  4. 添加 Pod CIDR 路由

  5. 假设 Cilium 的 podCIDR 为10.0.0.0/16,添加路由使 VM 能访问 Pod 网络:

    ip route add 10.0.0.0/16 dev vxlan2  proto kernel  scope link  src 10.1.1.236
    
  6. 配置 ARP 广播规则

  7. 允许 VM 通过 vxlan2 向 Cilium 节点发送 ARP 广播请求,用于 Pod IP 解析:

    bridge fdb append 00:00:00:00:00:00 dst 10.169.72.233 dev vxlan2
    

3. 连通性测试

从 Linux VM ping Cilium 管理的Pod IP(示例为10.0.1.1),验证网络连通性:

ping 10.0.1.1

4. 多VTEP场景处理

若管理多个 VTEP 设备,需对每个 VTEP 实例重复上述 Linux VM 配置步骤,再按启用步骤配置 Cilium 以匹配各 VTEP 的 MAC、IP 及 CIDR 范围。

五、功能限制

当前 Cilium VTEP 集成功能存在明确限制:不支持 Cilium 管理的 Pod 与 VTEP 设备之间的 IPsec 加密,即两者间的流量无法通过 IPsec 协议进行加密传输。


4. 关键问题

问题1:在启用 Cilium VTEP 集成功能前,必须完成哪些前置配置?各配置有何关键要求?

答案:

需完成两方面前置配置,关键要求如下:

  1. Cilium 集群配置:需确保 Cilium 已正确安装在 Kubernetes 集群(可参考官方 Cilium Quick Installation 文档),并通过执行 cilium status 命令验证 Cilium 处于正常运行状态,这是功能启用的基础环境要求;

  2. VTEP 设备配置:需为 VTEP 设备提前配置 3 类参数,且存在强制要求——一是配置 VTEP 端点 IP(vtep-endpoint)、VTEP CIDR(vtep-cidr)、VTEP MAC 地址(vtep-mac),二是VXLAN 网络标识符(VNI)必须固定配置为 2,该 VNI 值对应 Cilium 的 world 身份(参考 Special Identities),不可自定义修改。

问题2:启用C ilium VTEP 集成有两种方式(Helm 命令、ConfigMap),两种方式的核心配置参数有哪些?如何确保配置生效?

答案:

  1. 核心配置参数:两种方式需配置的核心参数完全一致,包括4项关键内容:

    1. vtep.enabled:设为"true",用于启用 VTEP 集成功能(默认禁用);
    2. vtep.endpoint:填写 VTEP 设备的端点IP,多个 IP 用空格分隔(如"10.169.72.236 10.169.72.238");
    3. vtep.cidr:填写 VTEP 设备对应的 CIDR 范围,多个 CIDR 用空格分隔(如"10.1.1.0/24 10.1.2.0/24");
    4. vtep.mask:填写 VTEP CIDR 对应的子网掩码(如"255.255.255.0");
    5. vtep.mac:填写 VTEP 设备的 MAC 地址,多个 MAC 用空格分隔(如"82:36:4c:98:2e:56 82:36:4c:98:2e:58")。
  2. 配置生效方式:无论通过哪种方式配置,最后必须执行重启 Cilium 守护进程集的命令,确保配置应用:kubectl -n $CILIUM_NAMESPACE rollout restart ds/cilium(其中$CILIUM_NAMESPACE为Cilium 所在命名空间,通常是kube-system)。

问题3:如何验证 Cilium VTEP 集成功能是否正常工作?测试过程中需重点配置哪些关键网络规则?

答案:

  1. 验证方法:通过 Linux VM(与Cilium节点网络连通)测试与 Cilium 管理的 Pod 的连通性,核心步骤为:在 VM 完成 VTEP 相关配置后,执行ping <Cilium Pod IP>(如ping 10.0.1.1),若能正常 ping 通,则说明 VTEP 集成功能工作正常。

  2. 测试需重点配置的网络规则:共2项关键规则,直接影响连通性验证:

    1. 路由规则:需在 VM 中添加到 Cilium podCIDR 的路由(如ip route add 10.0.0.0/16 dev vxlan2 proto kernel scope link src 10.1.1.236),确保 VM 的流量能路由到 Cilium Pod 网络;
    2. ARP 广播规则:需通过bridge fdb append 00:00:00:00:00:00 dst <Cilium节点IP> dev vxlan2(如目标IP为10.169.72.233)配置 ARP 广播,允许 VM 通过 vxlan2 设备向 Cilium 节点发送 ARP 请求,以完成 Pod IP 的地址解析,否则无法建立 ICMP(ping)连接。

参考:

  1. docs.cilium.io/en/stable/n…