链接:https://github.com/jeremyxu2010/cni-ipam-etcd

测试demo:

package main

import (
"fmt"
"github.com/containernetworking/cni/pkg/types"
"github.com/jeremyxu2010/cni-ipam-etcd/backend/allocator"
"github.com/jeremyxu2010/cni-ipam-etcd/backend/etcd"
"net"
) func main() {
fmt.Println("Hello, World!")
n := allocator.Net{}
fmt.Println("%+v", n) mask := net.IPv4Mask(byte(), byte(), byte(), byte())
ip := net.ParseIP("192.168.1.0").Mask(mask)
subnet := types.IPNet{ip, mask} ipamRange := allocator.Range{
RangeStart: net.ParseIP("192.168.1.10"),
RangeEnd: net.ParseIP("192.168.1.250"),
Subnet: subnet,
Gateway: net.ParseIP("192.168.1.1"),
} etcdConfig := allocator.EtcdConfig{
EtcdURL: "http://0.0.0.0:2379",
} ipamConf := allocator.IPAMConfig{
Name: "network-id",
Type: "etcd",
Ranges: []allocator.RangeSet{[]allocator.Range{ipamRange}},
IPArgs: []net.IP{net.ParseIP("192.168.1.100"), net.ParseIP("192.168.1.200")},
EtcdConfig: &etcdConfig,
}
n.IPAM = &ipamConf fmt.Println("%+v", ipamConf.Ranges) store, err := etcd.New(ipamConf.Name, &ipamConf)
if err != nil {
return
}
defer store.Close() portId := "port-id"
allocator := allocator.NewIPAllocator(&ipamConf.Ranges[], store, ) // allocate ip
if false {
var requestedIP net.IP
ipConf, err := allocator.Get(portId, requestedIP)
if err != nil {
fmt.Errorf("failed to allocate for range: %v", err)
return
}
fmt.Println(allocator, ipConf)
} // release ip
{
err := allocator.Release(portId)
if err != nil {
fmt.Errorf("failed to relase for range: %v", err)
return
}
fmt.Println(allocator)
}
}

运行结果:

Hello, World!
%+v { <nil> {[]} <nil>}
%+v [[{192.168.1.10 192.168.1.250 {192.168.1.0 ffffff00} 192.168.1.1}]]
&{0xc0000a6b00 0xc00000e180 } {Version: Interface:<nil> Address:{IP:192.168.1.20 Mask:ffffff00} Gateway:192.168.1.1}

etcd 数据查看:

[root@wangjunqiang cni-ipam-etcd]# export ETCDCTL_API=
[root@wangjunqiang cni-ipam-etcd]# etcdctl get --prefix /
/etcd-cni/networks/network-id
[[{"rangeStart":"192.168.1.10","rangeEnd":"192.168.1.250","subnet":"192.168.1.0/24","gateway":"192.168.1.1"}]]
/etcd-cni/networks/network-id/lastReserved/
192.168.1.11
[root@wangjunqiang cni-ipam-etcd]# etcdctl get --prefix /
/etcd-cni/networks/network-id
[[{"rangeStart":"192.168.1.10","rangeEnd":"192.168.1.250","subnet":"192.168.1.0/24","gateway":"192.168.1.1"}]]
/etcd-cni/networks/network-id/lastReserved/
192.168.1.12
/etcd-cni/networks/network-id/used/192.168.1.12
port-id
[root@wangjunqiang cni-ipam-etcd]# etcdctl get --prefix /
/etcd-cni/networks/network-id
[[{"rangeStart":"192.168.1.10","rangeEnd":"192.168.1.250","subnet":"192.168.1.0/24","gateway":"192.168.1.1"}]]
/etcd-cni/networks/network-id/lastReserved/
192.168.1.12

cni-ipam-etcd demo的更多相关文章

  1. CNI IPAM插件分析 --- 以hostlocal为示例

    skel.CmdArgs数据结构如下所示: type CmdArgs struct { ContainerID string Netns string IfName string Args strin ...

  2. 浅谈K8S cni和网络方案

    此文已由作者黄扬授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在早先的k8s版本中,kubelet代码里提供了networkPlugin,networkPlugin是一组接 ...

  3. Kubernetes 网络改进的三项实践分享

    自研CNI IPAM插件 解决K8s功能问题 首先,在功能方面,Kubernetes 网络模型由于IP不固定,无法对IP资源进行精细管控,无法使用基于IP的监控和基于IP的安全策略,此外,一些IP发现 ...

  4. Flannel网络部署

    一.Flannel网络部署 为Flannel生成证书 [root@linux-node1 ssl]# vim flanneld-csr.json { "CN": "fla ...

  5. linux运维、架构之路-Kubernetes离线集群部署-无坑

    一.部署环境介绍 1.服务器规划 系统 IP地址 主机名 CPU 内存 CentOS  7.5 192.168.56.11 k8s-node1 2C 2G CentOS  7.5 192.168.56 ...

  6. Flannel部署

    目录 Flannel CNI集成 配置Docker使用Flannel 1.为Flannel生成证书 [root@linux-node1 ~]# cd /usr/local/src/ssl/ [root ...

  7. k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-5

    1.为Flannel生成证书 [root@linux-node1 ~]# vim flanneld-csr.json { "CN": "flanneld", & ...

  8. kubeadm 使用 Calico CNI 以及外部 etcd 部署 kubernetes v1.23.1 高可用集群

    文章转载自:https://mp.weixin.qq.com/s/2sWHt6SeCf7GGam0LJEkkA 一.环境准备 使用服务器 Centos 8.4 镜像,默认操作系统版本 4.18.0-3 ...

  9. traefik+etcd构建grpc微服务demo

    1.下载安装traefik https://github.com/containous/traefik/releases 2.下载安装etcd3 https://github.com/coreos/e ...

随机推荐

  1. Java面试必问:ThreadLocal终极篇 淦!

    点赞再看,养成习惯,微信搜一搜[敖丙]关注这个互联网苟且偷生的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列 ...

  2. 如何用Excel进行预测分析?

      [面试题] 一个社交APP, 它的新增用户次日留存.7日留存.30日留存分别是52%.25%.14%. 请模拟出来,每天如果日新增6万用户,那么第30天,它的日活数会达到多少?请使用Excel进行 ...

  3. Python爬虫开发与项目实战pdf电子书|网盘链接带提取码直接提取|

    Python爬虫开发与项目实战从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言与HTML基础知识引领读者入门,之后根据当前风起云涌的云计算.大数据热潮,重点讲述了云计算的相关内容及其在爬虫中的应 ...

  4. 毒瘤dp 学校食堂

    这道dp题 可谓是比较难了,我想了2h 总是觉得自己设的状态没有包涵全部的状态空间 一直想不出来状态 最后败北. 正解是这样的 我们肯定是有一维i的表示 到了i 这个人吃饭了 但是在i吃饭之前后面的7 ...

  5. LVS-DR:搭建HTTP和HTTPS负载均衡集群

    目录 LVS-DR实战:搭建HTTP和HTTPS负载均衡集群 1. 搭建lvs-dr模式的http负载集群 1.1 LVS上配置IP 1.2 RS上配置arp内核参数 1.3 RS上配置VIP 1.4 ...

  6. python程序设计PDF高清完整版免费下载|百度云盘

    百度云盘:python程序设计PDF高清完整版免费下载 提取码:bvsz Python 程序设计基础难易程度适中.除Python应用开发基础知识之外,还适当介绍了Python标准库以及内置对象的工作原 ...

  7. 好用的连接池-druid

    druid连接池是阿里巴巴的数据库连接池项目.它的一个亮点强大的监控功能以及防SQL注入,同时不影响性能.这里是它的GitHub地址.感觉druid扩展的功能还是很实用的. 实用的功能 详细的监控 E ...

  8. 一文学会MySQL的explain工具

    开篇说明 (1) 本文将细致介绍MySQL的explain工具,是下一篇<一文读懂MySQL的索引机制及查询优化>的准备篇. (2) 本文主要基于MySQL5.7版本(https://de ...

  9. Eclipse Java EE IDE for Web Developers 4.5.1 安装hibername tools 插件

    方式一:在线安装(太慢) 方式二:离线安装,下载hibernate tools 插件到本地,然后在eclipse菜单栏点击 help: ①添加插件,选择下载后的插件,内容框中可选择hibernate ...

  10. PHP爬取网页的主要方法,你掌握了吗

    这篇文章讲的是PHP爬取网页的主要方法,主要流程就是获取整个网页,然后正则匹配(关键的). PHP抓取页面的主要方法,有几种方法是网上前辈的经验,现在还没有用到的,先存下来以后试试. file()函数 ...