Hujin Blog

Stay hungry Stay foolish

sanlock原理和使用

介绍 sanlock 是一个基于 SAN 的分布式锁管理器。集群中的每个节点都各自运行 sanlock 服务,锁的状态都被写到了共享存储上,使用 Disk Paxos 算法读写共享存储以实现对分布式锁的获取、释放和超时。一般认为 SAN 中的 LUN 的可靠性要比集群中的主机高,对主机来说,应用程序进程可能会崩溃、重启,主机的 IP 网络也可能会发生故障,而 SAN 是通过专门的光网连接的,...

Neuvector源码之 网络流量拓扑

背景 容器环境通信频繁,包含大量的东西向和南北向通信,通过neuvector的网络活动功能,可以全局查看集群中容器间的流量/访问host的流量/访问外网以及来自外网的流量。 网络活动功能比较丰富,包含: 网络抓包 模式切换(学习/告警/保护) 实时流量查看(方向/协议/端口/数据统计等) 容器的自动发现和展示 这里我们只深入介绍下实时流量的实现,并讨论下移植到虚拟机场...

Docker容器的网络命名空间为什么不可见?

背景 因为做过openstack的虚拟网络,习惯使用netns去管理linux的网络命名空间,也一直理解容器网络应该是类似的。 但是实际在使用时(runtime使用docker)发现每个非hostnetwork的容器创建后并不会查看到一个network namespace(通过ip netns ls查看); 在使用的runtime是containerd的时候呢,这个namespace又出现了...

Neuvector源码之 文件管理

背景 进程规则、文件规则、网络规则、dlp、waf都是在监控组下的功能。本次我们通过源码的方式来深入了解文件规则是如何实现的。 文件规则支持用户自定义关注的文件、目录,设置规则的学习或者保护模式,相应的如果容器访问到了指定的文件,且文件规则设置保护模式,则对文件的写会产生告警。 架构图 我们从几个维度来看neuvector的文件管理功能: 页面/接口用户下发的文件规则如何让...

Calico单节点网络实现

背景 最近有跟同事讨论calico的网络实现的话题,说calico 设计很巧妙,把 2-3层都给处理成了3层,想看看是如何实现的 实现 查看官方文档,发现有几个解释,通过这几个解释我们实际看看Calico中如何实现将2-3层流量都处理成3层的 问题一: 为什么容器中有一条到169.254.1.1的路由规则 1 2 3 4 Why does my container have a rou...

Kata容器网络实现

背景 最近看到安全容器相关的文章,想着看看kata的网络实现 架构图 在k8s中配置使用containerd作为runtime-endpoint实现,在containerd中配置runtime支持runc和kata 实现 默认情况下,containerd容器在创建sandbox的时候,创建对应的netns出来 在创建容器时,cni负责创建和配置容器网卡,也就是在对应的ne...

Neuvector源码之 合规性检测

背景 Neuvector安全基线支持 CIS Benchmark 标准,可对容器、镜像、Register、主机、kubernetes 进行安全标准检查,多维度展现容器资产的基线合规情况并帮助建立容器运行环境下的最佳基线配置,减少攻击面 NeuVector 的合规性审核包括 CIS 基线测试、自定义检查、机密审核以及 PCI、GDPR 和其他法规的行业标准模板扫描。本文将通过源码的方式分析合规...

Calico BGP - Bird

背景 Calico支持多种网络模式,包括vxlan/ipip/bgp,其中vxlan和ipip属于overlay类型,在嵌套部署模式比较通用,但网络性能相对bgp会低一些。这主要是由于bgp模式下没有数据报文的封包和解包操作 本文会将calico中bgp相关的操作流程抽离,通过demo的方式来介绍calico中bgp网络的实现 架构 calico架构 Calico作为一种常用的Kub...

Neuvector源码之 dp引流的实现

背景 在neuvector中通过监听runtime事件来动态维护节点上容器基础信息,在界面支持策略配置、模式管理都对容器流量产生影响。用户从学习模式调整成保护模式时可以对容器流量进行阻断操作,那么agent 中是如何实现阻断的? 这里我们将核心流程抽离出来,通过demo的方式来介绍具体的实现细节 原理 默认形态 开始之前先看下默认情况下容器的网络形态(以calico为例): 容...

Neuvector源码之 网络抓包

功能介绍 抓包功能是针对容器的功能,用户在界面选择某个容器点击抓包功能,可以控制抓包开始和结束,可以选择抓包时间;完成后可以下载对应的pcap格式的文件, 在本地的wireshark中直接打开进行分析。底层实际还是通过进入容器的网络namespace,执行tcpdump命令来实现。 说明下:hostnetwork的容器暂不支持抓包功能 API接口: 1 2 3 4 5 6 7 8...