tech-talk/cncf/k8s中的网络


K8S四层网络是什么? 请详细讲解


K8S(Kubernetes)四层网络指的是Kubernetes中实现的四层(传输层)网络,其主要功能是在集群内部提供基于TCP和UDP的负载均衡服务。Kubernetes集群中的四层网络通常由三个主要组件构成:kube-proxy、Service和Endpoint。

首先,kube-proxy是Kubernetes的核心组件之一,主要作用是实现Kubernetes服务的负载均衡。kube-proxy会根据Service对象的定义,创建虚拟IP地址,并将这个虚拟IP地址映射到一组后端Pod的IP地址上。当一个客户端发送一个请求到这个虚拟IP地址时,kube-proxy会选择其中一个后端Pod的IP地址,然后将请求重定向到这个Pod上。

其次,Service是Kubernetes中的另一个核心概念,用于提供稳定的服务访问。每个Service都有一个虚拟IP地址(ClusterIP),可以通过这个IP地址访问到这个Service提供的服务。在集群内,这个虚拟IP地址是唯一的,这意味着无论后端Pod的数量如何变化,客户端只需要访问这个虚拟IP地址就可以访问到Service。

最后,Endpoint是一个Kubernetes资源对象,用于存储与一个Service相关的后端Pod的IP地址。Endpoint可以手动创建,也可以由Kubernetes自动创建。当一个Service被创建时,Kubernetes会自动创建一个Endpoint对象,并将该Service指定的所有Pod的IP地址添加到这个Endpoint对象中。当一个客户端请求访问Service时,kube-proxy会查询Endpoint对象,然后选择其中一个Pod的IP地址,将请求重定向到这个Pod上。

综上所述,Kubernetes的四层网络提供了基于TCP和UDP的负载均衡服务,并通过Service和Endpoint对象来管理这些服务。这些组件的协同工作,使得在Kubernetes集群内部,客户端可以访问到稳定的服务,而无需关心后端Pod的具体数量或位置。

能画个图吗
当然可以,下面是一个简单的Kubernetes四层网络的示意图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
         +---------+               +-----------+
| | | |
+--------> Client +---------------+ Service +--------+
| | | | | |
| +---------+ +-----------+ |
| |
| |
| |
| |
| +-------------+ +-------------+ |
| | | | | |
+------------> kube-proxy +--------> Endpoint +<-------+
| | | |
+-------------+ +-------------+

在这个示意图中,客户端向Service发送请求,Service将请求转发到Endpoint,Endpoint再将请求转发到后端的Pod中。kube-proxy负责将客户端请求重定向到其中一个后端Pod上,同时还会实现Pod的健康检查和负载均衡等功能。通过这些组件的协同工作,Kubernetes可以实现基于TCP和UDP的负载均衡服务,同时提供高可用性和稳定性的服务访问。

4分钟学习kubernetes网络通信治好了我的精神内耗

  • Container - Container 之间通信
  • Pod - Pod 之间通信
  • Pod - Service之间通信 (一个服务访问集群中另一个服务)
  • Internet - Service之间通信 (互联网与集群内部如何通信)
  • 一些k8s网络通信潜在问题

参考资料:
https://kubernetes.io/docs/concepts/cluster-administration/networking/
https://opensource.com/article/22/6/kubernetes-networking-fundamentals

Pod有自己的Network和Namespace,相当于一个独立的网络环境,Pod中存在多个Container,多个Container之间是通过Pod的localhost来通信

Pod的运行需要一个宿主机,也就是我们常说的node。Pod的网络环境与node之间的通信,需要一个虚拟网卡,即veth pair

node中存在virtual bridge虚拟网桥,用以发现宿主机上拥有独立ip的主机

这里的virtual bridge就是cbr0,它对应10.1.0段的地址。10.1.0.13在其中,经过虚拟网桥数据包就被发送到了Pod B

node中的ip routes table

10.1.0段走cbr0,其余默认走node eth0的网卡。。

Pod和Service之间的通信:

从零开始入门 K8s:Kubernetes 网络模型进阶

K8s Ingress Provider 为什么选择 MSE 云原生网关?

对比了各家K8S服务的区别

高薪面试必备-Docker&K8s面试必问(第一季)