共计 1552 个字符,预计需要花费 4 分钟才能阅读完成。
家喻户晓,K8S 的 POD 是不须要固定 IP 的,因为固定 IP 会带来一些扩展性的问题,然而动态 IP 在平安 ACL,业务管制方面有不少独到的长处,本文就是在揭示新也云如何在 K8S 上实现动态 IP 这个能力的。全方面满足业务须要。
一、Kubernetes 网络接口 CNI 插件的工作原理
首先从 Kubernetes 网络接口 (CNI) 说起,containernetworking/cni: Container Network Interface – networking for Linux containers (github.com)
CNI(Container Network Interface)是 CNCF 旗下的一个我的项目,由一组用于配置 Linux 容器的网络接口的标准和库组成,同时还蕴含了一些插件。CNI 仅关怀容器创立时的网络调配,和当容器被删除时开释网络资源。
CNI 插件就是一个执行程序,容器启动时,它被调用,而后返回一个规范的 JSON,通知容器该怎么设置本人的网络。同样被销毁的时候,它也被调用一次,返回一个 JSON,通知容器如何销毁本人的网络。这就是 CNI 插件的工作形式。
所以咱们须要做的就是理解 CNI 插件的工作。
二、CNI 插件接口办法
CNI 插件的接口办法个别包含: ADD CHECK DEL VERSION 理论应用中,将一个容器增加进一个网络,调用的是 ADD 接口办法。将一个容器从网络中删除,则是调用 DEL 接口办法
在 plugins/plugins/main/macvlan at master · containernetworking/plugins (github.com) 我的项目 咱们能找到很多 CNI 插件的源码,咱们只须要简略的批改一下就能够了。
三、原理透析
默认装置插件后,简略关上 CNI 的配置 /etc/cni/net.d 咱们能大略看到这样的配置文件。
这里调配了 这台物理机上能够应用的 IP 段,IP 分配模式等等信息。这些配置管制了 Macvlan 插件的工作。工作的时候,这个配置会作为参数被传入插件,从这里咱们会发现,咱们将应用 host-local 模式调配 IP。
通过浏览代码,咱们能够大略理解到默认的工作模式是这样
一台物理机上能够调配的 IP 被寄存在本地文件里的,每次启动容器的时候,咱们就从文件里选一个,这样大家并不会抵触。然而这有个前提 那就是每台物理机上的 IP 都是互相隔离的,这样才不会抵触。如果要做动态 IP,这意味着随着调度算法的调配,一个 IP 可能呈现在不同的物理机上?这样的话,咱们怎么解决抵触呢?
咱们解决的方法是把 IP 调配中心化,将 IP 的调配放到 公布零碎里,这样的话,咱们就能够让任何一个容器都能有咱们想让它领有的 IP。大略的流程 是这样,
从流程上看,咱们把 IP 调配这个局部的性能从各个节点,自主调配的模式,收口到了 公布零碎上,这样能做到对立治理,非常灵活。
在代码上看就很简略了,Macvlan 的插件是 Go 语言所写,咱们只须要简略加一个利用 Http Client 代码,用它去获取容器的标签就能够了。咱们曾经把这部分开源啦。请间接去 https://github.com/ppdaicorp/… 看看吧。
四、结语
很快乐为大家带来这次分享,置信通过上面对 CNI 的工作原理,动态 IP 分配机制有了肯定的理解。在这里打个小广告,信也容器云技术揭秘系列继续更新中,想理解更多容器云技术的小伙伴能够翻看一下历史文章,祝大家收货满满。
五、回馈社区
目前咱们已在 github 上开源了容器云平台的外围组件 Stargate、Dockeryard、Pauth、Atlas 以及 Macvlan 插件,地址如下:
https://github.com/ppdaicorp
大家感兴趣的话能够扫描下方二维码退出微信群进行交换。
作者介绍
玄铁,信也科技根底平台架构师,容器云团队成员。