linux kernel build and submit patch

最近在写bpf/sockmap的时候发现一个sockhash的内核bug,经过一系列定位后终于找到了问题代码并修复,最后将修复的patch提交到了社区。这是第一次向linux kernel提交代码,在这里记录一下~

linux内核编译

首先需要准备一下编译环境

阅读更多

ebpf intro

eBPF简介

eBPF(extended BPF)可以看作是可以高效且安全的在内核的一些hook point上执行用户代码的一个虚拟机,用户编写的代码被编译成字节码后加载到linux内核,内核内嵌了一个JIT将字节码转成native code后由事件触发形式执行BPF代码。eBPF由BPF发展而来,BPF全称Berkeley Packet Filter,当时主要是为了高效的过滤数据包而设计的,其历史可以追溯到1992年的论文The BSD Packet Filter: A New Architecture for User-level Packet Capture中。现在大家说到的BPF实际上是e(extended)BPF,相比于之前的BPF,eBPF是RISC指令集,有了更丰富的指令,11个64位的寄存器。开发者可以使用C语言写BPF程序,然后使用llvm+clang编译成bpf格式的obj file。然后通过bpf()系统调用加载在内核中hook point。下文中提到的BPF如果没有明确说明,都是指代eBPF。

阅读更多

k8s service ip problem

最近在部署山东电力gaiastack环境,现场部署的小伙伴突然遇到紧急问题,发现在容器里面无法通过kubernetes这个service来访问kube-apiserver,导致我们的云盘无法提供正常服务。

gaiastack是什么?gaiastack是我们组开发的企业级kubernetes容器云管理平台,目前已在公司内外树立了一批标杆客户

阅读更多

k8s floatingip evolution

在我们内部的k8s系统的网络模式支持上,我们实现了多种网络模式的支持,最主要的就是overlay和floatingip的支持。
在k8s系统中实现floatingip网络模式的方案,最初我们采用了bridge+veth的模式,在跑容器的主机(物理机或虚拟机)上创建一个linux bridge,将原主机的网卡桥接到这个bridge。每创建一个pod,都创建一对veth设备,一端连接bridge,一端扔进容器里达到容器与外界2层可达的效果。实现模型如下图所示:

阅读更多

sriov getting start

前言

最近在调研SR-IOV的使用,准备作为CNI插件用在kubernetes的Pod网络上。这篇文章是对SRIOV基础操作的介绍,通过介绍可以了解SRIOV的使用。

阅读更多

ipvs attempt

前序

k8s社区最近提了一个issue, 说的是huawei使用ipvs代替kube-proxy中的iptables模式作为service的负载均衡。根据我们组实际的情况,对ipvs整合k8s方案进行了一些尝试。

阅读更多

iptables quick start

简介

linux内置了一个强大的防火墙模块,称为iptables。用户通过在用户态操作iptables规则,可以使流量在内核态进行规则的匹配过滤。

Man手册中关于iptables的介绍为用于包过滤和NAT的系统工具。

阅读更多

calico getting start

简介

Calico是一个纯3层虚拟网络,可以为夸主机的容器/虚拟机等提供网络访问,同时支持IPv4和IPv6。并且可以根据策略提供访问控制能力。

阅读更多

tcpdump quick start

tcpdump是linux上用于截获数据包的分析工具,提供了强大的包过滤和展示功能

tcpdump的用法主要是tcpdump [option] [expression]

option

-A
以ASCII码方式展示数据包,不显示链路层header信息

阅读更多

Golang笔记

  1. Mac系统无法编译运行平台相关代码

    项目中引入了一个第三方包,有一个包下面的文件是 xxx_linux.go xxxwindows.go, 在Mac上无法通过编译。
    在编译之前加入GOOS=linux可以完成编译但是无法执行,需要在这类包中加入 xxx
    (unix|darwin|unsupported).go,才可以在Mac上进行执行。

阅读更多