Kubernetes网络基础知识详解
兄弟们,今天咱们来聊点硬核的。
有没有人跟我一样,刚学K8s的时候,觉得这玩意儿的网络简直是个玄学?🤯
一堆Pod、Service、Ingress…它们之间到底是怎么通信的?为啥我ping不通?为啥我的服务老是找不到对方?别急,今天这篇,带你彻底搞懂K8s网络那点事儿!
1. 先来打个比方:小区里的快递柜📦
想象一下,你住在一个超级大小区(K8s集群)里。
-
每个住户就是一个Pod,有自己唯一的门牌号(IP地址)。
-
但小区经常有人搬家(Pod重启)、新住户入住(扩容)、老住户搬走(缩容),门牌号总变,你怎么收快递?
这时候,小区建了个菜鸟驿站(Service)!
你不用记邻居门牌号,只需要把快递寄到驿站,驿站负责帮你找到当前的门牌号。完美!
2. 核心基础:Pod网络是基石
首先,记住K8s网络的第一性原则:
所有Pod都必须可以不经过NAT,直接与其他Pod通信!
无论Pod在哪个节点(Node)上,它们看到的对方IP就是真实的IP。这就需要一个强大的容器网络插件(CNI) 来搞定底层网络,比如Calico、Flannel、Weave等。
👉 这就好比,小区所有住户的门牌号必须是唯一的,且快递车能直接开到你家楼下。
3. Service:服务的“永久VIP”名片🎫
Pod是短暂的,IP老是变。所以K8s发明了Service。
-
Service有一个固定的IP(VIP) 和端口,像一个永不变化的电话号码。
-
它背后通过标签选择器(Label Selector) 绑定了一组Pod(比如所有“前端”Pod)。
-
流量打到Service上,它负责负载均衡,转发给后端健康的Pod。
Service主要有3种类型:
-
ClusterIP(默认):只在集群内部用的VIP,小区内部的公共电话。
-
NodePort:在所有节点上开个端口,让小区外的人也能通过
节点IP:端口访问进来。 -
LoadBalancer:云厂商提供的负载均衡器,给你一个公网IP,相当于小区的豪华大门!
4. Ingress:小区的“智能门卫”🚪
NodePort和LoadBalancer都是暴露4层端口的。那想用域名访问不同的服务(7层HTTP流量)怎么办?
比如,a.com去前台,b.com去后台。
这就需要Ingress!它不是一个服务,而是一个路由规则集合,是一个智能门卫。
-
你告诉门卫规则:“看到拿
a.com快递的,带他去前台;拿b.com的,带去后台。” -
门卫本身需要一个大门口才能站岗,所以Ingress需要和一个LoadBalancer或NodePort类型的Service配合使用。
常见的“门卫”实现是Nginx Ingress Controller或Traefik。
5. DNS:集群内部的“114查号台”📞
在小区里,你记不住驿站电话怎么办?打114查啊!
K8s集群内置了CoreDNS服务。它会为Service和Pod提供DNS记录。
-
比如,你有个Service叫
user-service,在同一个命名空间里,你直接通过user-service这个域名就能访问到它! -
不同命名空间?
user-service.default.svc.cluster.local。是不是像内部电话分机号?
总结一下核心思想:
-
Pod间通信:靠CNI插件实现的扁平网络,直接IP对IP。
-
服务发现:靠Service的固定IP和DNS,避免直接记易变的Pod IP。
-
对外暴露:ClusterIP(对内)、NodePort(简易对外)、LoadBalancer(云上豪华对外)。
-
HTTP路由:靠Ingress这个“智能门卫”根据域名和路径转发流量。
-
DNS:集群内部的电话簿,让你用名字而不是IP来访问服务。
💡 最后留个思考题:
如果你在Pod里curl另一个服务的Service IP,是谁最终把流量转发到目标Pod的?
是Service吗?🤔
(答案:不是!Service的IP只是一个虚拟IP,真正干活的是每个节点上的kube-proxy组件,它通过iptables或IPVS规则,拦截到Service IP的流量,然后做DNAT转发到真实的Pod IP上!惊不惊喜!)
觉得有用的兄弟,点赞收藏转发三连!下次咱们再深挖CNI插件是怎么实现这套网络的!告辞!👋
更多推荐


所有评论(0)