黑客级Kubernetes网络指南

本文讲的是黑客级Kubernetes网络指南【编者的话】作者Yaron Haviv,Iguazio的CTO。 对于集群的要求指标不同,对于Kubernetes网络他们具有自己独特的方法论,此文是系列文章的第一篇,是Iguazio对于Kubernetes网络的一种处理方法说明。

【深圳站|3天烧脑式Kubernetes训练营】培训内容包括:Kubernetes概述、架构、日志和监控,部署、自动驾驶、服务发现、网络方案等核心机制分析,进阶篇——Kubernetes调度工作原理、资源管理及源码分析等。

我们借助于Docker在Iguazio构建的是原生云平台。使用到微服务、etcd、home-grown等Docker集群管理工具。 目前我们正在逐渐迁移到使用Kubernetes作为容器的编排引擎,因为这些已经变得越来越成熟,我们就可以利用其更先进的功能专注于提供独特的服务。

与其他很多原生云应用不同,我们更专注实时性。为了提高应用的性能,我们使用底层直接访问网络、存储、CPU和内存资源。对于容器和Kubernetes来说,这一点非常重要,而且需要使用一些独特并不常见的黑科技手段突破。

这篇文章是这个系列的第一弹,我主要分享下如何使用一些黑客的技巧学习Kubernetes和容器网络接口的内部构件,以及如何操作它们。后续的博文将会覆盖高性能存储、进程间通信(IPC)在容器中的使用技巧等。

容器网络的基础

容器使用的是Linux 中叫做CgroupsNamespace的分区的功能来实现的。容器进程映射到网络、存储和其他的命名空间。每一个命名空间只能看到操作系统授权的那一部分,通过这种方式做到容器之间的隔离。

在网络方面,每一个命名空间都有自己的网络堆栈,包括网络接口、路由表、Socket 和 IPTABLE规则等。一个接口只能属于某一个网络的命名空间。使用多容器就意味者需要多接口。另外一个选择是生成伪接口,并将它们软连接到真实的接口(我们还可以将容器映射到主机网络的命名空间,如守护进程的使用)。

下面是创建并连接伪接口的几种选择:

  • 虚拟桥:在容器的一侧创建虚拟接口对儿,另一方面再根命名空间中创建虚拟接口对儿,并使用Linux桥接器或者OpenvSwith(OVS)来实现容器和外部接口的连接。与直接方法相比,桥的引入会有一定的额外开销。
  • 多路复用:多路复用可以包括一个暴露多个虚拟接口的中间网络设备,具有分组转发规则来控制每个数据包的接口。MACVLAN为每个虚拟的接口分配MAC(输出数据包应该用MAC标记,传入数据包根据目标MAC进行复用)。IPVLAN也一样,基于IP地址,使用单个MAC可以对虚拟机更友好。
  • 硬件交换:当前大多数NIC都已经支持单节点 I/O虚拟化(SR-IOV),这也是创建虚拟设备的一种方式。每个虚拟的设备都将自己显示为单独的PCI设备。它可以拥有自己的VLAN和硬件强制的QoS关联。SR-IOV提供裸机性能,但通常再公共云中不可用。

虚拟网络模式:虚拟桥、多路复用和 SR-IOV。

在很多场景下,用户希望可以创建跨越多个L2/3网段的逻辑网络子网。这需要覆盖封装协议(最常见的VXLAN,它将网路进一步包装成UDP的数据包)。VXLAN可能会引入更多的网络开销,而且由于控制中缺乏标准化,来自不同供应商的多个VXLAN网络通常不能互相操作。

Kubernetes还广泛使用IPTABLES和NAT来拦截流量,并将其路由到相应的物理目标。像FlannelCalicoWeave使用Veth与桥接/路由器和覆盖或者路由/NAT的操作作为容器网络的解决方案。

有关各种Linux网络选项,请参与这个很好的实践教程和使用指南

除了预期的数据包操作额外开销外,虚拟网络增加了隐藏的成本,可能会对CPU和内存并行行造成负面的影响,例如:

  • NIC根据报文的消息头将流量引入到内核中。如果报文头发现变化,流量将引入错误的内核,从而降低内存和CPU的效率。
  • NIC构建数据包并在硬件上校验和卸载,从而节省大量的CPU和内存周期。如果重新包装数据是软件内置功能,或者我们在最顶层覆盖(Cloud/laaS).结果都会导致性能的下降。新的NIC可以在硬件中构建VXLAN数据包,但是封装的解决方案中必须使用它。

一些应用程序(如Iguazio的)使用了先进的NIC功能,如RDMA,DPDK快速网络处理库或加密来卸载消息传递,对CPU的并行性进行更严格的控制,减少中断或消除内存副本。这只能在使用直接网络接口或SR-IOV虚拟接口时使用。

玩转POD网络

没有简单的方法可以看到网络的命名空间,因为Kubernetes和Docker并没有注册它们(“ip netns”将不会与Kubernetes和Docker一起使用)。但是我们还是可以用一些黑科技从主机上查看、调试、管理和配置POD网络。

网络命名空间在/proc/<PID>/ns/net 可以查看,所以我们需要从我们的POD中找到进程ID(PID)。首先,通过以下命令可以找到容器ID,注意只取前12个数字。

kubectl get po <POD-NAME> -o jsonpath='{.status.containerStatuses[0].containerID}' | cut -c 10-21 

再次,我们使用Docker命令找到进程PID:

PID=$(docker inspect --format '{{ .State.Pid }}' <ContainerID>) 

一旦获取PID,我们可以通过POD来监控和配置网络。在POD的命名空间中,使用nsenter工具来运行任意的命令,例如:

nsenter -t ${PID} -n ip addr

这样就可以显示所有的POD接口以及它们的IP地址。我们也可以使用其他的命令,例如ping或者crul来检验网络的连接性,可以使用特殊权限的操作或者在POD容器中安装容器的监控、调试或者配置该POD等(例如:ip route,nslookup)。

如果我们对每个POD的单个接口不满意,还可以从主机命名空间中获取或创建接口,并将它们分配给POD:

ip link set netns ${PID} <IFNAME>

如果想还原,我们设置host即可:

nsenter -t ${PID} -n ip link set <IFNAME> netns 1 

通过CNI自动化配置Kubernetes网络

Kubernetes使用CNI插件来组织网络。每次初始化或者删除一个POD时,将使用默认配置调用默认的CNI插件。该CNI插件创建一个伪接口,将其附加到相关的底层网络,设置IP和路由将其映射到POD命名空间。

不幸的是Kubernetes仍然只支持每个POD只有一个CNI接口,具有一个群集级层次的配置。这就非常有限了,因为我们可能想要配置每个POD的多个网络接口,潜在地使用具有不同策略(子网,安全性,Qos)的不同覆盖解决方案。

让我们看下我们是怎么绕过这个限制的。

当Kubelet Kubernetes本地代理配置POD网络时,它会在/etc/cni/net.d/目录路径中查找一个CNI json配置文件,并在/opt/cni/bin/中找到一个相关的插件二进制文件(基于type属性) 。 CNI插件可以调用辅助IP地址管理(IPAM)插件来设置每个接口的IP地址(例如主机本地或DHCP)。 也可以通过Kubelet命令选项使用其他路径:

Kubelet使用包含命令参数(CNI_ARGS,CNI_COMMAND,CNI_IFNAME,CNI_NETNS,CNI_CONTAINERID,CNI_PATH)的环境变量调用CNI插件,并通过stdin读写传输json.conf文件。 插件用json输出文本进行响应,描述结果和状态。 在这里查看更详细的解释和例子。 如果您知道Go编程语言,开发自己的CNI插件是比较简单的,因为该框架可以做很多的魔法,您可以使用或扩展其中一个现有的插件

Kubelet将作为CNI_ARGS变量的一部分传递POD名称和命名空间(例如“K8S_POD_NAMESPACE = default; K8S_POD_NAME = mytests-1227152546-vq7kw;”)。 我们可以使用它来定制每个POD或POD命名空间的网络配置(例如,将每个命名空间放在不同的子网中)。 未来的Kubernetes版本会将网络视为平等的公民,并将网络配置作为POD或命名空间规范的一部分,就像内存,CPU和存储卷一样。 目前,我们可以使用注释来存储配置或记录POD网络数据/状态。

CNI插件一旦被调用就自动执行逻辑。 它还可以将多个网络接口连接到同一个POD,并绕过当前的限制,这里有一个警告:Kubernetes只会关注我们在报告中的结果(用于服务发现和路由)。 我最近偶然发现了一个很牛的英特尔开源CNI插件,称为Multus,它的功能正如以上所说的那样。 Linux程序员Doug Smith在最近的Slack聊天之后写了一个详细的Multus的从入门到提高

Multus接受一个具有CNI定义数组的分层conf文件。 它将配置每个POD具有多个接口,每个定义一个,我们可以指定哪个接口是“masterplugin”被Kubernetes识别。 我们将其作为基准线与POD名称和POD注释相结合,以创建每个POD灵活且独特的网络配置。

英特尔的同一个开源git仓库中还包括另一个有趣的CNI驱动程序,用于SR-IOV和DPDK支持。

总结

我很喜欢原生云和微服务,他们对敏捷开发和持续交付的影响是巨大的。然后,似乎容器网络项目是新兴,仅仅只是走出了第一步,这就解决了跨部门/云连接的挑战。这些项目仍然需要定制,使其适应更广泛的应用基础和更高的性能。希望它能够快速提升其他更成熟的软件定义网络解决方案(如OpenStack Neutron或VMwareNSX)的功能水平。

我们如何实现所有这些不同的封装以及在控制面板上变得可协同操作,并允许在同一个虚拟网络两端是两个不同的供应商/云解决方案? 这是64,000美元的问题,我欢迎您的反馈。 这显然是一个需要更多关注和标准化的关键领域。

原文链接:A Hacker’s Guide to Kubernetes Networking(翻译:ylzhang)

原文发布时间为:2017-04-30

本文作者:ylzhang

本文来自合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:黑客级Kubernetes网络指南

时间: 2024-08-03 20:34:51

黑客级Kubernetes网络指南的相关文章

央视揭秘黑客真身 竟是网络公司安全专家

中介交易 SEO诊断 淘宝客 云主机 技术大厅 黑客留给我们的印象,似乎是一群天生对网络技术着迷的发烧友,然而,现在它也开始变成了一门生意,互联网上如今可以看到不少黑客广告,只要你交300元钱,他们可以帮你在一天之内破解一个电子邮箱,交5000元钱,可以帮你同时攻击5000台计算机,而如果出价更高的话,黑客甚至能为你攻击一家公司的网站和服务器,这些黑客的幕后究竟隐藏着什么秘密?   黑客竟是网络公司的安全专家   网上的黑客业务 我们在电脑搜索引擎里,随意输入了破解邮箱.攻击网站等几个字,随即记

DockOne微信分享(一三八):白话Kubernetes网络

本文讲的是DockOne微信分享(一三八):白话Kubernetes网络[编者的话]容器的网络是在CaaS集群中无法避免的话题,作为当下最主流的一种容器集群解决方案,Kubernetes对网络进行了合理的抽象,并采用了开放的CNI模型.面对各种容器网络实现,他们有什么不同,应该如何选择?本文将带大家回顾Kubernetes各种主流网络方案的发展历程,并透过现象清本质,用形象的例子展示Weave.Flannel.Calico和Romana等网络解决方案背后的原理. [3 天烧脑式基于Docker的

Kubernetes网络概述

[编者的话]本文比较了Kubernetes和Docker的网络模型,并对Kubernetes的网络模拟做了重点阐述,对Kubernetes的网络插件作了比较. 本文讲的是Kubernetes网络概述容器编排技术是当今最火的IT技术之一.不可否认,Docker技术促进了数据中心的发展,并为微服务架构在开发和运维中的实践奠定了基础. 工作在Sun公司的John Gage 曾说:" 网络就是计算机." 为了能充分发挥计算机的功能,必须让计算机之间互相连接.因此,除非你的服务是简单的并且不需要

DockOne微信分享(一三三):深入理解Kubernetes网络策略

本文讲的是DockOne微信分享(一三三):深入理解Kubernetes网络策略[编者的话]当我们逐渐向着微服务.云原生迈进的时候,传统静态的.相对简单的网络安全策略开始显得吃力. Kubernetes 的 Network Policy 特性正是来解决这个问题的.在刚刚出炉不久的1.7版本中,该特性也被扶正成为GA.让我们来一起看看 Network Policy 是什么,能为我们做什么,以及是如何实现的. [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Dock

黑客建立wifi网络钓鱼

通过咖啡馆的免费wifi,可以很容易查看正在使用这个wifi的手机里的文件.照片.聊天记录等,并可以随意拷进拷出.专家提醒,在使用这些公开场合的wifi时,尽量不要进行网银支付.手机炒股.支付宝交易等涉及钱财的交易,尤其在使用没有密码的无线网络时,一定要事先跟工作人员确认,该网络是否属于此商店. 黑客建立wifi网络钓鱼 现在,各城市很多公共场所都有了免费的wifi,除了最早使用wifi的快餐店和咖啡厅.旅馆,现在一些饭店也在桌子的一角贴上一个纸条,写着该饭店无线网的账号和密码.不少市民坐在快餐

Kubernetes网络部署方案

本文讲的是Kubernetes网络部署方案[编者的话]现在网络上流传很多Kubernetes的部署和搭建的文档,其中比较出名就是Kubernetes The Hard Way,还有基于这个翻译和衍生的版本follow-me-install-kubernetes-cluster,这两篇文章带我走过了Kubernetes的搭建的童年,我第一搭建成功就是抄袭的张俊的follow-me-install-kubernetes-cluster,然后随着新版的发展,越来越多的配置参数存在各种各样的问题,最大的

美军方盯上黑客大会招募网络战士意图以黑制黑

王军"黑帽子"大会标志聚精会神"夺旗"比赛 据法新社报道,两大黑客盛事--"黑帽子"大会和"黑客大会",分别于7月28日至29日和 7月30日至8月1日,在美国拉斯韦加斯举行.大会由美国国土安全部顾问委员会委员.老牌黑客杰夫·莫斯组织,每年举行一次.目前,它成为五角大楼和美国政府机构招募"网络战士"的最佳渠道. 议趋势比武艺皆因"好玩" "黑客大会"和"黑帽

香港首个抗衡黑客攻击的网络靶场曝光

香港第一个专门为抗衡黑客攻击的网络靶场(Cyber Range)首度曝光!这个由香港应用科技研究院联同警方及金融管理局创建的网络靶场,专为本地网络专才包括警务人员提供应对黑客攻击训练,靶场能模拟数万种网络攻击,并可演化成三千多种攻击模式,由大规模如攻击发电厂取得控制权,到小规模的入侵家用电脑进行勒索,一应俱全.系统亦具备收集全球黑客攻击最新情报功能,藉以更新防卫及训练模式,打造情报.训练及拆解于一身,「最重要是一定要学会如何打,才可以学会如何Defend(防卫)」. 应付政府机密部门受攻击网络攻

全球首个商用千兆级LTE网络及终端推出

日前,Qualcomm.Telstra.爱立信和NETGEAR宣布推出全球首个商用千兆级LTE(Gigabit LTE)网络及终端,并在位于澳大利亚悉尼的Telstra体验中心进行了千兆级LTE网络体验活动.全新推出的千兆级LTE网络能够带来高达1Gbps的下行速率,同时提供高达150Mbps的上行速率.此外,作为全球首款千兆级LTE终端,NETGEAR Nighthawk M1移动路由器采用了Qualcomm骁龙X16 LTE调制解调器(modem),支持高达1Gbps的下行速率及150Mbp