K8S集群网络浅析

首发于:ciii's blog

概述

K8S官方文档集群网络描述了实现K8S网络的四个要点:

  1. 高度耦合的容器间通信
  2. Pod间通信
  3. Pod到Service的通信
  4. 外部到Service的通信
  1. Highly-coupled container-to-container communications
  2. Pod-to-Pod communications
  3. Pod-to-Service communications
  4. External-to-Service communications

解析

容器间通信

在这种情况下,一个Pod下的两个容器是共享存储、网络的,所以只需要通过localhost来进行互相访问。

Pod间通信

Pod间通信的基础是:

  1. 集群内的每一个Pod都拥有一个独立的IP
  2. 任意Pod可以通过IP互连

K8S是通过CNI(Container Network Interface)插件来实现这一扁平化的网络模型的,主要有以下几种:

  • Flannel
  • Calico
  • Weave Net

具体的原理和实现暂时略过,后续会在CNI专题中详细展开。

Pod到Service的通信

访问方式:

  • 集群内容器通过 <service>.<namspace>:<port> 访问跨namespace的service
  • 集群内容器通过 <service>:<port> 访问同namespace的service

主要过程:

DNS解析:

在容器中,根据 /etc/resolve.conf 中的配置进行解析,nameserver为集群DNS服务的ClusterIP,search域则是域名匹配的顺序。

nameserver 10.254.25.10
search default.svc.cluster.local svc.cluster.local cluster.local

根据该search域,匹配步骤如下(target为访问域名):

  1. target.default.svc.cluster.local
  2. target.svc.cluster.local
  3. target.cluster.local

每一步拼接得到的域名,都会查询集群DNS服务,若记录存在,则直接返回对应Service的ClusterIP。

Service负载均衡(非Headless Service):

上一步DNS解析中得到了Service的ClusterIP,映射到每一个Pod的PodIP的工作则是由kube-proxy负责的。

集群中的每个Node都运行了kube-proxy服务,它订阅了API server中的Service和Endpoint对象,一旦发生变化,就会修改本机的iptables规则。

当容器内访问Service的ClusterIP时,会被宿主机的iptables修改为对应Pods中任一Pod的IP,从而实现Pod到Service的通信。

外部到Service的通信

NodePort:

通过监听每个Node上的固定端口来暴露Service

当有NodePort类型的Service被创建时,kube-proxy就会创建对应的iptables规则,使访问<NodeIP>:<NodePort>的流量转发到对应的<PodIP>:<ContainerPort>上。

这种方式一般需要结合外部的LB来使用。

LoadBalancer:

通过Cloud Provider创建外部LB来暴露Service

LoadBalancer类型的Service绑定的外部LB把流量转发到<NodeIP>:<NodePort>上,本质上与NodePort类型的Service没有区别,只是自动创建并配置了外部LB。

Ingress:

通过Ingress Controller来路由暴露Service

上述两种暴露方式都只能暴露单一Service,如果一个集群中有若干Service需要对外暴露,Ingress的暴露方式会更合适。

不同于上述两种方式,只需要指定Service的类型,这里引入了Ingress资源:

  • 同时集群内还部署了一个Ingress Controller服务,并订阅了API server中的Ingress和Endpoint对象;
  • 当一个Ingress创建时,Ingress Controller会根据Ingress配置添加路由规则;
  • Ingress这种模式通过配置不同的路由把集群内多个Service通过一个Service来暴露出去。

总结

网络是K8S的核心,里面的每个部分都值得深入剖析,本文仅仅概述了其中个关键点,今后还会对CNI、kube-proxy、CoreDNS等组件详细分析。

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

推荐阅读更多精彩内容