自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(135)
  • 收藏
  • 关注

原创 C++ 离群点检测

【代码】C++ 离群点检测。

2023-09-06 10:29:58 338

原创 Cilium data path analyse(VxLAN & Host Routing with Legacy)

通过上面的抓包可以看到,busybox的eth0和root命名空间一端的lxc网卡抓到的包是一样的,但是ipatables规则链中没有产生日志,因此可以说明数据包没有经过HOST NS的iptables规则链,再结合lxc网卡加载的[from-container] HOOK,这里的使用由redirect的能力。

2023-07-22 15:08:12 193

原创 Cilium Host Routing Mode

但是,如果细分析的话,也是需要区分一下的。他们之间的实现方式还是有一定的区别的。[但是无论是什么样子的形式,我们只需要按照结果导向的模式便可:就是数据出去的时候一定是带有VXLAN的格式的,我们需要知道的是VXLAN的VTEP的IP地址,MAC地址,以及VNI ID。至于不同的CNI他们可能实现的方式不太一样,实际上区别就是在于这个数据包怎么给打包成VXLAN的包,以及对端过来的数据包(VXLAN)格式的如何解开,然后发向对应的Dst。解决了这个,无论它的格式是什么样子的,我们都可以理解。

2023-07-16 18:53:39 297

原创 Cilium核心技术-eBPF XDP&TC介绍

eBPF 是一项革命性技术,它能在内核中运行沙箱程序(sandbox programs), 而无需修改内核源码或者加载内核模块。eBPF的一个重要特性是能够使用高级语言(如C)来实现程序。LLVM有一个eBPF后端,用于编辑包含eBPF指令的ELF文件,前端(如clang)可以用于生成程序。在一个后端转换为字节码后,使用bpf()系统调用加载bpf程序,并校验安全性。

2023-07-16 02:26:27 993

原创 Cilium基础架构

Cilium作为一款Kubernetes CNI插件,从一开始就是为大规模和高度动态的容器环境而设计,并且带来了API级别感知的网络安全管理功能,通过使用基于Linux内核特性的新技术——BPF,提供了基于service/pod/container作为标识,而非传统的IP地址,来定义和加强容器和Pod之间网络层、应用层的安全策略。因此,Cilium不仅将安全控制与寻址解耦来简化在高度动态环境中应用安全性策略,而且提供传统网络第3层、4层隔离功能,以及基于http层上隔离控制,来提供更强的安全性隔离。

2023-07-16 01:27:57 371

原创 kubespray部署kubernetes(containerd + cilium)

【代码】kubespray部署kubernetes(containerd + cilium)

2023-07-08 21:53:38 520

原创 搭建一个1.27+版本的k8s集群(containerd)

【代码】搭建一个1.27+版本的k8s集群(containerd)

2023-07-01 23:47:32 562

原创 kubelete源码阅读

kubelet (Kubernetes) 中的 PLEG 模块根据每个匹配的 pod 级别事件调整容器运行时状态,并通过应用更改来保持 pod 缓存最新。让我们看一下过程图中下面的红色虚线。kubele通过调用SyncLoop()不断检查PLEG的健康状况,Healthy()通过检查relist(PLEG关键任务)完成时间是否在设定的阈值内判断PLEG的健康状况。

2023-06-28 23:42:49 230

原创 kube-proxy源码阅读

然而,就是在判断封包要往哪里走,这里的方法两者使用的方式是不一样的。虽然封包只要被拆解一次,但封包在比对每个 rule 时,都要再看要用进來的这个封包和目前轮到的 rule 进行行比对。IPVS 在判断上面就简单很多,他是用 hash table(hash表),在时间复杂度上,通常是是 O(1),即便遇到最差的情況(worst case),也只是 O(n)。但对于 ipvs 模式的 kube-proxy,无论有多少 pod/service,iptables 的规则数都是固定的。

2023-06-26 21:16:36 200

原创 kubernetes中定时任务的实现

在上面的示例中,f是要运行的函数,period是周期时间,jitterFactor是抖动因子,sliding是一个布尔值,表示周期是否在运行f之后立即开始下一次定时器。JitterUntil函数是一个循环函数,它会在每个周期内运行一个函数f。当stopCh关闭时,循环将停止。这个函数是 Until 的语法糖,Until 函数的作用是在一定时间内重复调用函数 f,直到函数 f 返回 true 或者时间到期。Until函数是wait包中的一个函数,它可以用于在指定的时间间隔内重复执行函数,直到停止通道被关闭。

2023-06-26 15:49:35 1238

原创 libpcap抓包延时问题分析

按照上面的描述就会有个问题,如果抓取的网络包不是连续的,就会是的pcap_loop进入阻塞模式,如果这个时候有网络数据包过来,触发处理包的回调函数会有约一分钟的延时,对于实时系统或者类似Wireshark、Tcpdump等工具那就能立即反应的系统来说很不实用,因此上述方式并不实用与这种场景。因此,如果没有数据包到达,pcap_loop函数就会一直等待。在默认情况下,pcap_loop函数的超时时间是1秒,也就是说,如果1秒内没有数据包到达,pcap_loop函数就会返回,然后再次等待。函数之前是不可用的。

2023-04-27 10:20:25 1824

原创 进程间通信的几种方式

然后通过fork()系统调用创建了一个子进程,并在父进程中向共享内存中写入了一条消息,子进程中从共享内存中读取消息并打印。最后通过shmdt()和shmctl()系统调用分离共享内存并删除共享内存,并结束进程。然后通过fork()系统调用创建了一个子进程,并在父进程中等待信号量,子进程中从父进程中读取消息并打印。在下面的例子中,首先通过msgget()系统调用创建了一个消息队列,然后通过fork()系统调用创建了一个子进程,并在父进程中向消息队列中写入了一条消息,子进程中从消息队列中读取消息并打印。

2023-04-22 22:51:52 423

转载 关于Segmentation fault (core dumped)的排查方法

但程序崩溃时的行为不可按平常时的行为来估计,比如缓冲区溢出等错误可能导致堆栈被破坏,因此经常会出现某个变量的值被修改成乱七八糟的,然后程序用这个大小去申请内存就可能导致程序比平常时多占用很多内存。这通常都是指针错误引起的。在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明者为王安),线圈就叫作 core ,用线圈做的内存就叫作 core memory。另外需要注意的是,如果你的机器上跑很多的应用,你生成的core又不知道是哪个应用产生的,你可以通过下列命令进行查看:file core。

2023-04-17 09:35:25 5374

原创 生产者消费者简单应用案例(环形队列)

【代码】生产者消费者简单应用案例(环形队列)

2023-04-16 17:56:41 57

原创 生产者消费者模型的两种C语言实现

使用互斥锁和条件变量实现的生产者和消费者模型。使用互斥锁和信号量实现的生产者和消费者模型。

2023-04-16 16:53:52 577

原创 有空就逛逛的地方

awesome仓库是所有awesome的集合,涵盖了包括学习、工作、研究领域的各类awesome项目介绍、工程实践、原理探讨、框架扩展等。针对于每一个技术工种,它都提供了一幅长长的,可以交互的图,让你对自己的计算机水平有一个大的把握,同时提供一些延伸的学习资料。从它庞大的star数来看,还是有很多非科班的同学希望挤上程序员的末班车,供资本家驱使的。如果说现在的计算机知识点是那么分散的话,那么这个仓库的内容可真算的上是roadmap了。如果你的领导交给你一项新的技术的研究,来这里看看准没错。

2023-03-25 23:29:53 48

原创 Python RSA加解密应用

【代码】Python RSA加解密应用。

2023-03-14 17:51:05 105

原创 C++ RSA 加解密应用

【代码】C++ RSA 加解密应用。

2023-03-14 17:49:17 261

原创 C++调用动态链接库失败

参考:https://github.com/TooTallNate/node-bindings/issues/27。参考:https://www.cnblogs.com/Malphite/p/16228600.html。将某个功能独立出来,提供动态链接库动态加载使用。运行./main可正常运行。

2023-03-10 16:20:17 602

原创 Kubernetes审计版本如何确定?

Kubernetes审计版本如何确定

2022-09-13 17:21:09 349

原创 golang容易导致内存泄漏的几种情况

golang 内存泄漏

2022-09-11 15:15:33 3165 2

原创 iperf打流测试

iperf 打流测试

2022-09-11 01:01:27 1883

原创 CentOS配置Samba

CentOS配置Samba

2022-09-11 00:57:12 382

原创 什么是ab测试?

什么是ab测试

2022-09-11 00:55:05 2710

原创 基于权限控制的Kubernetes容器远程连接方法

Kubernetes websocket 访问集群容器pod远程shell

2022-09-11 00:15:49 1800

转载 Kubernetes 中创建 Pod 时集群中到底发生了些什么?

想象一下,如果我想将 nginx 部署到 Kubernetes 集群,我可能会在终端中输入类似这样的命令:$ kubectl run --image=nginx --replicas=3然后回车。几秒钟后,你就会看到三个 nginx pod 分布在所有的工作节点上。这一切就像变魔术一样,但你并不知道这一切的背后究竟发生了什么事情。Kubernetes 的神奇之处在于:它可以通过用户友好的 API 来处理跨基础架构的 deployments,而背后的复杂性被隐藏在简单的抽象中。但为了充分理解它为我们提供

2021-11-18 20:38:45 278 1

原创 Kubernetes容器网络及网络模型

1、Docker 网络模型在讨论Kubernetes网络之前,让我们先来看一下Docker网络。Docker采用插件化的网络模式,默认提供bridge、host、none、overlay、maclan和Network plugins这几种网络模式,运行容器时可以通过–network参数设置具体使用那一种模式。bridge:这是Docker默认的网络驱动,此模式会为每一个容器分配Network Namespace和设置IP等,并将容器连接到一个虚拟网桥上。如果未指定网络驱动,这默认使用此驱动。host

2021-11-18 20:32:39 1658

转载 如何优化Golang中重复的错误处理

在看《Go入门指南》的一种用闭包处理错误的模式时,里面提到了一种错误的优雅处理方式,减少我们重复写if err:=f(); err != nil{}式的代码,感觉很心动,做了下测试,结论如下:能减少if err式的代码,代码可以变清新整洁。使用存在限制:只有当错误需要结束调用时才可以使用这种方法,如果被调用函数返回错误,但调用者函数需处理错误后,向下继续执行,则不能采用这种方法。 经常的写法 我们在设计函数时,错误处理要遵循以下2个规则: 被调用函数如果有错误,需要传递给调用者,一定要返回调用者收到

2021-11-10 16:40:58 529

原创 什么是informer机制

Informer机制是kubernetes中不依赖任何中间件的情况下仅通过HTTP协议实现消息的实时性、可靠性、顺序性通信的一种机制。k8s是典型的server-client架构。etcd存储集群的数据信息,apiserver作为统一的操作入口,任何对数据的操作都必须经过apiserver。客户端通过ListAndWatch机制查询apiserver,而informer模块则封装了List-watch。ListAndwatch是k8s统一的异步消息处理机制,保证了消息的实时性、可靠性、顺序性等,为声明

2021-11-09 14:22:09 949

转载 Kubernetes Controller Manager 工作原理

原文连接:https://blog.ihypo.net/15763910382218.html本文基于对 Kubernetes v1.16 的源码阅读,文章有一定的源码,但我会通过配图尽量描述清晰在 Kubernetes Master 节点中,有三个重要组件:ApiServer、ControllerManager、Scheduler,它们一起承担了整个集群的管理工作。本文尝试梳理清楚 ControllerManager 的工作流程和原理。什么是 Controller Manager根据官方文档的

2021-11-01 15:27:26 482

原创 Kubernetes API 聚合开发汇总

2. Kubernetes API 聚合开发自定义资源实际上是为了扩展 kubernetes 的 API,向 kubenetes API 中增加新类型,可以使用以下三种方式:修改 kubenetes 的源码,显然难度比较高,也不太合适创建自定义 API server 并聚合到 API 中创建自定义资源(CRD)2.1 CRD存在的问题只支持 etcd只支持JSON,不支持 protobuf (一种高性能的序列化语言)只支持2种子资源接口 ( /status 和 /scale)不支持优

2021-10-29 16:59:31 2528

原创 Kubernetes CRD开发汇总

1. Kubernetes CRD开发1.1 kubernetes 自定义资源(CRD)在研究 Service Mesh 的过程中,发现 Istio 很多参数都通过 kubernetes CRD 来管理,例如 VirtualService 和 DestinationRule,这种方式使部署在 k8s 集群上的服务的管理方式更趋向一致。kubernetes 的资源管理方式和声明式 API 的良好设计使得在这个平台上的功能扩展变得异常容易。例如 CoreOS 推出的 Operator 框架就是一个很好的例

2021-10-29 16:55:23 2420 1

转载 controller-runtime 控制器实现

原文连接:https://jishuin.proginn.com/p/763bfbd2f5b9controller-runtime(https://github.com/kubernetes-sigs/controller-runtime) 框架实际上是社区帮我们封装的一个控制器处理的框架,底层核心实现原理和我们前面去自定义一个 controller 控制器逻辑是一样的,只是在这个基础上新增了一些概念,开发者直接使用这个框架去开发控制器会更加简单方便。包括 kubebuilder、operator-sdk

2021-10-29 15:46:39 1356

转载 深入解析 Kubebuilder:让编写 CRD 变得更简单

原文连接:https://developer.aliyun.com/article/719215作者 | 刘洋(炎寻) 阿里云高级开发工程师导读:自定义资源 CRD(Custom Resource Definition)可以扩展 Kubernetes API,掌握 CRD 是成为 Kubernetes 高级玩家的必备技能,本文将介绍 CRD 和 Controller 的概念,并对 CRD 编写框架 Kubebuilder 进行深入分析,让您真正理解并能快速开发 CRD。概览控制器模式与声明式 A

2021-10-28 14:37:48 609

转载 Kubernetes CRD开发工具Operator-SDK简介

原文连接:https://blog.csdn.net/weixin_33918114/article/details/92211707 概览 原文来自:https://github.com/operator-framework/operator-sdk 该项目是 Operator Framework的组成部分, 是一个开源的工具用于管理 Kubernetes 原生的应用, 称为 Operators, 以一种更为有效、自动化、可伸缩的方式。更多信息参考 introduction blog post。

2021-10-28 14:00:49 464

转载 使用kuberbuilder创建工程示例

原文连接:https://blog.csdn.net/u012986012/article/details/119710511kubebuilder是一个官方提供快速实现Operator的工具包,可快速生成k8s的CRD、Controller、Webhook,用户只需要实现业务逻辑。 类似工具还有operader-sdk,目前正在与Kubebuilder融合 kubebuilder封装了controller-runtime与controller-tools,通过controller-gen来

2021-10-28 13:54:48 1166

转载 深入了解Kubernetes CRD开发工具kubebuilder

原文连接:https://blog.csdn.net/u012986012/article/details/120271091普通开发流程 如果不借助任何Operator脚手架,我们是如何实现Operator的?大体分为一下几步: CRD定义Controller开发,编写逻辑测试部署 API定义 首先通过k8s.io/code-generator项目生成API相关代码,定义相关字段。 Controller实现 实现Controller以官方提供的sample-controller为例,如图所示

2021-10-28 13:42:42 828

原创 Kubernetes构建过程分析

构建方式Kubernetes的构建方式可以分为3种,分别是本地环境构建、容器环境构建、Bazel环境构建。Kubernetes构建方式:本地环境构建makemake all容器环境构建make releasemake quick-releaseBazel环境构建make bazel-build下面将详细介绍前两种构建方式:本地环境构建执行make或者make all命令,会编译Kubernetes的所有组件,组件二进制文件输出的相对路径是_output/bin

2021-08-23 21:31:20 481

原创 Kubernetes各组件的功能

Kubernetes各组件的功能1.kubectlkubectl是Kubernetes官方提供的命令行工具CLI,用户可以通过命令行的方式与Kubernetes API Server进行操作,通信协议使用HTTP/JSON。2.client-goclient-go是从Kubernetes代码中抽离出来的包,作为官方提供的GO语言的客户端发挥作用。client-go简单、易用,Kubernetes系统的其他组件与Kubernetes API Server通信的方式也是基于client-go实现。3.

2021-08-23 21:05:15 966

原创 基于Kubernetes1.20.1版本开发调试环境搭建

接下来的一段时间将要学习Kubernetes源码,为了更好的查看源码和调试程序,因此搭建了一个Kubernetes开发调试环境,该环境可以结合断点调试理解代码的运行过程。准备虚拟机并安装必要软件$ yum install -y docker wget curl vim golang etcd openssl git g++ gcc$ echo "export GOROOT=/usr/local/goexport GOPATH=/home/workspaceexport PATH=$PATH:$G

2021-08-23 19:48:26 130

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除