kubernetes基础实践之网络

前面的文章讲到k8s基本概念中的网络和存储部分是比较难的,今天我们来啃下网络这个硬骨头。

Kubernetes(k8s)是用来搭建服务集群的,而k8s只是搭建在有限的物理机或者虚拟机上面,服务器提供的IP是有限的,而k8s集群支持分布式服务、支持服务的弹性伸缩,这一切都利用了容器化技术,从以主机为中心的基础架构转移到以容器为中心的基础架构。

我们已经知道Pod 是 Kubernetes 的基本构建块,它是 Kubernetes 对象模型中创建或部署的最小和最简单的单元,而pod是有生命周期的,它们可以被创建,也可以被销毁,然而一旦被销毁生命就永远结束。每个pod被创建的时候都有ip,但是这些ip是不稳定的,因为pod被销毁的时候ip就被释放了,就算是重建该pod,pod的ip也会发生改变。

正是k8s这样的特性,这里带来了两个问题:

  1. 如何管理IP,宿主node节点的ip是有限的,如何保证分配给pod的ip是唯一的并且和宿主node的ip不冲突?

  2. 如果一组 Pod(称为 backend)为其它 Pod (称为 frontend)提供服务,那么那些 frontend 该如何发现,并连接到这组 Pod 中的哪些 backend 呢?

kubernetes网络模型

在Kubernetes网络中存在两种IP(Pod IP和Service Cluster IP),Pod IP 地址是实际存在于某个网卡(可以是虚拟设备)上的,Service Cluster IP它是一个虚拟IP,是由kube-proxy使用Iptables规则重新定向到其本地端口,再均衡到后端Pod的。

  1. 网络基本原则

    每个Pod都拥有一个独立的IP地址(IP Per Pod),而且假定所有的pod都在一个可以直接连通的、扁平的网络空间中,即pod之间的ip可以直接相互通信,就好比在一个局域网中。

  2. 网络要求

所有的容器都可以在不用NAT的方式下同别的容器通讯;所有节点都可在不用NAT的方式下同所有容器通讯;容器的地址和别人看到的地址是同一个地址。

网络发展现状

容器网络发展到现在,形成了两大阵营,就是Docker的CNM和Google、CoreOS、Kuberenetes主导的CNI。需要注意的是,CNM和CNI并不是网络实现,他们是网络规范和网络体系,类似jdbc规范,j2ee规范其实就是一堆接口,你底层是用Flannel也好、用Calico也好都是可以的,CNM和CNI关心的是网络管理的问题,即能满足网络模型即可。

CNM(Docker LibnetworkContainer Network Model)我们这里就不介绍了,因为在很长的时间内docker就没有好好的规划网络这块,导致大规模使用docker提供服务编排存在很多难点,这也是k8s流行起来的原因。

CNI(Container NetworkInterface):CNI是兼容容器技术及上层编排系统,特别在k8s中发展势头迅猛,在k8s中以网络插件的方式存在,有很多非常好的实现。下面这些都是CNI的实现。

  • Kube-route

  • Weave

  • Macvlan

  • Calico

  • Flannel

  • Canal

  • Cilium

  • Romana

  • AWS VPC

  • Contiv-VPP

这些实现中Flannel和Calico是两个比较典型且优秀的。

Flannel容器网络

Flannel之所以可以搭建kubernets依赖的底层网络,是因为它可以实现以下两点:

  1. 它给每个node上的docker容器分配相互不想冲突的IP地址;

  2. 它能给这些IP地址之间建立一个覆盖网络,同过覆盖网络,将数据包原封不动的传递到目标容器内。

Flannel介绍

  • Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。

  • 在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。

  • Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

  • Flannel实质上是一种“覆盖网络(overlaynetwork)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持udp、vxlan、host-gw、aws-vpc、gce和alloc路由等数据转发方式,默认的节点间数据通信方式是UDP转发。

Flannel.jpeg

Calico容器网络:

  • Calico是一个纯3层的数据中心网络方案,而且无缝集成像OpenStack这种IaaS云架构,能够提供可控的VM、容器、裸机之间的IP通信。Calico不使用重叠网络比如flannel和libnetwork重叠网络驱动,它是一个纯三层的方法,使用虚拟路由代替虚拟交换,每一台虚拟路由通过BGP协议传播可达信息(路由)到剩余数据中心。

  • Calico在每一个计算节点利用Linux Kernel实现了一个高效的vRouter来负责数据转发,而每个vRouter通过BGP协议负责把自己上运行的workload的路由信息像整个Calico网络内传播——小规模部署可以直接互联,大规模下可通过指定的BGP route reflector来完成。

  • Calico节点组网可以直接利用数据中心的网络结构(无论是L2或者L3),不需要额外的NAT,隧道或者Overlay Network。

  • Calico基于iptables还提供了丰富而灵活的网络Policy,保证通过各个节点上的ACLs来提供Workload的多租户隔离、安全组以及其他可达性限制等功能。

Calico架构图

Calico.jpeg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 引自:http://www.10tiao.com/html/217/201708/2649694873/1.htm...
    潘晓华Michael阅读 802评论 0 12
  • K8S 底层网络所需要解决的两个问题 协助 k8s , 给每个 NODE上的 docker 容器都分配互相不冲突的...
    陈sir的知识图谱阅读 4,156评论 0 1
  • Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubern...
    devabel阅读 6,224评论 0 13
  • 最近我家先生两次住院,一次在市级医院,一次在省城,最明显的差别除了环境设施水平对比悬殊外,还有遇到的人的修养素质。...
    上官小七阅读 1,335评论 0 1
  • 嗯嗯,看到冰菓最后一集,最后一秒时,不得不说,我一脸懵逼,并且无语。。 在最后一幕,爱瑠和奉太郎相互告了白。本来这...
    冯敏琪阅读 1,849评论 0 2