Kubernetes网络原理

问题思考

  1. Kubernetes的网络模型是什么
  2. Docker 背后的网络基础是什么
  3. Docker自身的网络模型和局限
  4. Kubernetes 的网络组件之间是怎么通信的
  5. 外部如何访问Kubernetes的集群
  6. 开源组件

Kubernetes 网络模型

Kubernetes网络模型设计的一个基础原则是:每个Pod都用有一个独立的IP 地址。假设所有的Pod都在一个可以直接连通的,扁平的网络空间中,即无论Pod在哪个Node,它们都可以直接通过对方的IP进行访问。

IP-per-Pod

在Kubernetes中 IP以Pod为单位进行分配,一个Pod内部所有容器都共享一个网络栈(实际上就是一个网络命名空间,包括他们的IP地址,网络设备,配置等都是共享的)。一个Pod 一个IP的设计模型,IP-per-Pod。
基于这种网络抽象原则,Kubernetes 对集群网络有如下要求:

  1. 所有容器都可以在不用NAT的方式与别的容器通信
  2. 所有节点都可以在不用NAT的方式与所有容器通信,反之亦然
  3. 容器里的地址和别人看到的地址是同一个地址

Docker 网络基础

Docker网络基础

Kubernetes 网络实现

Kubernetes网络设计主要致力于解决如下场景:

  1. 容器之间的直接通信
  2. Pod到Pod之间的通信
  3. Pod 到Service之间的通信
  4. 集群外部与集群内部之间的通信
容器之间的通信

Kubernetes中Pod容器之间的直接通信是采用了Docker网络模型中Docker0网桥进行共享通信。
首先Pod内容器都共享Pause容器的网络,并与Node节点上的Docker0网桥连接,通信信息通过主机路表进行转发。
在这里插入图片描述

Pod之间的通信
同Node上Pod之间的通信

Pod1,Pod2都通过Veth连接到同一个Docker0网桥,IP1,IP2都是从Docker0的网段上获取的,与Docker0的IP3均在同一个网段,此外Pod1,Pod2的Linux协议栈上默认路由都是docker0的地址(即非所有本地(pod内)数据都会通过docker0网桥进行中转),由于两个Pod都关联在同一个docker0网桥,地址段相同,所以它们之间可以直接通信。
在这里插入图片描述

不同Node间Pod的通信

想要支持不同Node上Pod之间的通信必须满足如下两个条件:

  1. 在整个Kubernetes集群中对Pod的IP分配进行规划,不能有冲突;
  2. 将Pod的IP 与所在Node的IP关联起来,通过这个关联可以让Pod互相访问。

在这里插入图片描述

CNI 网络模型

Container Network Interface,CNI 提供了一种应用容器插件化网络解决方案,定义对容器网络进行操作和配置的规范,通过插件(plugin)的形式对CNI接口进行实现,CNI 仅仅关注在容器创建时分配网络资源及在销毁容器时删除网络资源。
CNI 模型中只涉及两个概念:

  • 容器(Container) :容器是拥有独立Linux网络命名空间的环境,如使用Docker或rkt创建的容器。
  • 网络(Network):网络表示可以互连的实体,这些实体拥有各自独立ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值