链接: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. 关于docker--详解安装,常规操作,导入导出等(2017-3-29)

    测试环境 :CentOS 7.1 64位 目的:展示docker的常规使用(安装,常规操作,导入导出等) 其他:关于原理等请参考文章后面的延伸阅读,本文不做深入探讨,且方法不唯一 0x01 关于安装d ...

  2. 为PhpStorm添加Laravel 代码智能提示功能

    php artisan clear-compiled //清除bootstrap/compiled.php php artisan ide-helper:generate //为 Facades 生成 ...

  3. 浅谈NTLM Hash

    认识Windows Hash 早期SMB协议在网络上传输明文口令.后来出现LAN Manager 挑战/响应验证机制(LM),其很容易破解,因此微软提出了WindowsNT挑战/响应验证机制(NTLM ...

  4. Django学习路5_更新和删除数据库表中元素

    查找所有的元素 Student.objects.all() 查找单个元素 Student.objects.get(主键=值) 主键 pk = xxx 更新数据库数据后进行保存 stu.save() 删 ...

  5. Upload 上传 el-upload 上传配置请求头为Content-Type: "multipart/form-data"

    api接口处添加属性 (标红处) // 校验台账 export const checkEquiment = (data) => { return axios({ url: '/job/equip ...

  6. PHP xml_parser_get_option() 函数

    定义和用法 xml_parser_get_option() 函数从 XML 解析器获取选项.高佣联盟 www.cgewang.com 如果成功,该函数则返回选项值.如果失败,则返回 FALSE 和一个 ...

  7. luogu P4775 [NOI2018]情报中心 线段树合并 虚树 树的直径trick

    LINK:情报中心 神题! 写了一下午 写到肚子疼. 调了一晚上 调到ex 用的是网上dalao的方法 跑的挺快的. 对于链的暴力 我不太会kk. 直接说正解吧: 分类讨论两种情况: 1 答案的两条链 ...

  8. AtCoder Beginner Contest 173 E Multiplication 4 分类讨论 贪心

    LINK:Multiplication 4 害怕别人不知道我有多菜 那就上张图: 赛时 太慌了 (急着AK 题目不难却暴露我的本性 根本不思考无脑写 wa了还一直停不下来的debug 至少被我发现了1 ...

  9. 关于idea 在创建maven 骨架较慢问题解决

    在设置中->maven>runner>VM Options 粘贴     -DarchetypeCatalog=internal 其中 -D archetype:原型,典型的意思 ( ...

  10. subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.

    将anaconda环境下的  lib/python3.5/dist-packages/torch/utils/cpp_extension.py文件 将['ninja','-v']改成['ninja', ...