链接: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. vj map

    /* * 换行好烦人呀! */ #include <iostream> #include <map> #include <string> using namespa ...

  2. springmvc的原理与流程

    springMVC中的几个组件: 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU. 处理器映射器(HandlerMapping):根据URL去查找处理器 处理 ...

  3. MacOS下ElasticSearch学习(第二天)

    ElasticSearch第二天 学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"elasticsearch&q ...

  4. 使用Spring Validation优雅地校验参数

    写得好的没我写得全,写得全的没我写得好 引言 不知道大家平时的业务开发过程中 controller 层的参数校验都是怎么写的?是否也存在下面这样的直接判断? public String add(Use ...

  5. Python os.mkdir() 方法

    概述 os.mkdir() 方法用于以数字权限模式创建目录.默认的模式为 0777 (八进制).高佣联盟 www.cgewang.com 语法 mkdir()方法语法格式如下: os.mkdir(pa ...

  6. PHP date_interval_format() 函数

    ------------恢复内容开始------------ 计算两个日期间的间隔,然后格式化时间间隔: 实例 <?php $date1=date_create("2013-01-01 ...

  7. 2020牛客暑期多校训练营 第二场 A All with Pairs 字符串hash KMP

    LINK:All with Pairs 那天下午打这个东西的时候状态极差 推这个东西都推了1个多小时 (比赛是中午考试的我很困 没睡觉直接开肝果然不爽 一开始看错匹配的位置了 以为是\(1-l\)和\ ...

  8. loj #6039 「雅礼集训 2017 Day5」珠宝 分组背包 决策单调性优化

    LINK:珠宝 去年在某个oj上写过这道题 当时懵懂无知wa的不省人事 终于发现这个东西原来是有决策单调性的. 可以发现是一个01背包 但是过不了 冷静分析 01背包的复杂度有下界 如果过不了说明必然 ...

  9. MySQL InnoDB技术内幕:内存管理、事务和锁

    前面有多篇文章介绍过MySQL InnoDB的相关知识,今天我们要更深入一些,看看它们的内部原理和机制是如何实现的. 一.内存管理 我们知道,MySQl是一个存储系统,数据最后都写在磁盘上.我们以前也 ...

  10. explain关键字使用解释

    原文: 58沈剑 架构师之路  https://mp.weixin.qq.com/s/oWNrLHwqM-0ObuYbuGj98A <数据库允许空值,往往是悲剧的开始>一文通过explai ...