实际上属于一个业务问题,有几个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