每天5分钟玩转Kubernetes | Kubernetes网络模型

书籍来源:cloudman《每天5分钟玩转Kubernetes》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:每天5分钟玩转Kubernetes | 汇总_COCOgsta的博客-CSDN博客


Kubernetes采用的是基于扁平地址空间的网络模型,集群中的每个Pod都有自己的IP地址,Pod之间不需要配置NAT就能直接通信。另外,同一个Pod中的容器共享Pod的IP,能够通过localhost通信。

这种网络模型对应用开发者和管理员相当友好,应用可以非常方便地从传统网络迁移到Kubernetes。每个Pod可被看作是一个个独立的系统,而Pod中的容器则可被看作同一系统中的不同进程。

下面讨论在这个网络模型下集群中的各种实体如何通信。知识点前面都已经涉及,这里可当作复习和总结。

  1. Pod内容器之间的通信

当Pod被调度到某个节点,Pod中的所有容器都在这个节点上运行,这些容器共享相同的本地文件系统、IPC和网络命名空间。

不同Pod之间不存在端口冲突的问题,因为每个Pod都有自己的IP地址。当某个容器使用localhost时,意味着使用的是容器所属Pod的地址空间。

比如Pod A有两个容器container-A1和container-A2,container-A1在端口1234上监听,当container-A2连接到localhost:1234时,实际上就是在访问container-A1。这不会与同一个节点上的Pod B冲突,即使Pod B中的容器container-B1也在监听1234端口。

  1. Pod之间的通信

Pod的IP是集群可见的,即集群中的任何其他Pod和节点都可以通过IP直接与Pod通信,这种通信不需要借助任何网络地址转换、隧道或代理技术。Pod内部和外部使用的是同一个IP,这也意味着标准的 命名服务和发现机制,比如DNS可以直接使用。

  1. Pod与Service的通信

Pod间可以直接通过IP地址通信,但前提是Pod知道对方的IP。在Kubernetes集群中,Pod可能会频繁地销毁和创建,也就是说Pod的IP不是固定的。为了解决这个问题,Service提供了访问Pod的抽象层。无论后端的Pod如何变化,Service都作为稳定的前端对外提供服务。同时,Service还提供了高可用和负载均衡功能,Service负责将请求转发给正确的Pod。

  1. 外部访问

无论是Pod的IP还是Service的Cluster IP,它们只能在Kubernetes集群中可见,对集群之外的世界,这些IP都是私有的。

Kubernetes提供了两种方式让外界能够与Pod通信:

  • NodePort。Service通过Cluster节点的静态端口对外提供服务。 外部可以通过<NodeIP>:<NodePort>访问Service。
  • LoadBalancer。Service利用cloud provider提供的load balancer对外提供服务,cloud provider负责将load balancer的流量导向Service。目前支持的cloud provider有GCP、AWS、 Azure等。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/125267972