编译flannel 支持VNI 扩展

实际上属于一个业务问题,有几个k8s 环境,有一个外部服务需要通过rpc 访问k8s 内部的服务,以前是通过
部署了与一个环境一样的flannel 服务,可以保证外部服务与k8s pod 是可以通的,但是现在需要与另外一套环境
的k8s pod 也可以通

参考图

 

 

问题

我们实际是希望可以在vm中可以部署多个flannel 服务,同时是独立的,互不影响,在尝试修改配置之后发现vxlan 网络是可以看到,但是都在flannel1.1 在进行网络测试的时候发现是不行的, 然后大致看了下官方源码发现默认VNI 都是1,如果我们可以将多实例的VNI 分区开问题应该就可以好好的解决了

解决方法

基于flannel 源码构建 ,修改VNI 值为其他的
参考

 
import (
  "encoding/json"
  "fmt"
  "net"
 
  "golang.org/x/net/context"
 
  "github.com/coreos/flannel/backend"
  "github.com/coreos/flannel/pkg/ip"
  "github.com/coreos/flannel/subnet"
)
 
func init() {
  backend.Register("vxlan", New)
}
 
const (
  defaultVNI = 2 // 此处修改为了2,实际可以自己调整,当然也是可以通过配置的
)

构建

通过make 就可以了,注意选择的版本,对于go 小于1.7 的需要使用gopath ,比较推荐使用go mod 构建

CGO_ENABLED=1 make dist/flanneld

参考资料

https://github.com/flannel-io/flannel
https://github.com/rongfengliang/myflannel
https://en.wikipedia.org/wiki/Virtual_Extensible_LAN
https://support.huawei.com/enterprise/en/doc/EDOC1100086966
https://networklessons.com/cisco/ccnp-encor-350-401/introduction-to-virtual-extensible-lan-vxlan

posted on 2023-02-07 13:11  荣锋亮  阅读(22)  评论(0编辑  收藏  举报

导航