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 | +---------+ +-----------+ |
在这个示意图中,客户端向Service发送请求,Service将请求转发到Endpoint,Endpoint再将请求转发到后端的Pod中。kube-proxy负责将客户端请求重定向到其中一个后端Pod上,同时还会实现Pod的健康检查和负载均衡等功能。通过这些组件的协同工作,Kubernetes可以实现基于TCP和UDP的负载均衡服务,同时提供高可用性和稳定性的服务访问。
- 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 Ingress Provider 为什么选择 MSE 云原生网关?
原文作者: fliter
原文链接:
https://dashen.tech/2023/04/15/K8S中的网络通信/版权声明: 转载请注明出处