Kubernetes 学习笔记 权威指南第七章

1 Kubernetes对集群网络有如下要求。

(1)所有容器都可以在不用NAT的方式下同别的容器通信。

(2)所有节点都可以在不用NAT的方式下同所有容器通信,反之亦然。

(3)容器的地址和别人看到的地址是同一个地址。

原生的Docker网络目前还不能很好地支持这些要求

处于不同命名空间中的网络栈是完全隔离的,彼此之间无法通信。如果想在两个命名空间之间通信,就必须有一个Veth设备对

所有的网络设备(物理的或虚拟接口、桥等在内核里都叫作Net Device)都只能属于一个命名空间

4  因为一个设备只能属于一个命名空间,所以转移后在这个命名空间中就看不到这个设备了

Veth设备属于可以转移的设备,而很多其他设备如lo设备、vxlan设备、ppp设备、bridge设备等都是不可以转移的

5 ip route list命令查看当前的路由表:

 

 在上面的例子代码中只有一个子网的路由,源地址是192.168.6.140(本机),目标地址在192.168.6.0/24网段的数据包都将通过eno16777736接口发送出去

Netstat-rn是另一个查看路由表的工具:

 

 在它显示的信息中,如果标志是U,则说明是可达路由;如果标志是G,则说明这个网络接口连接的是网关,否则说明这个接口直连主机

在Kubernetes管理模式下通常只会使用bridge模式,在bridge模式下,Docker Daemon第1次启动时会创建一个虚拟的网桥,默认的名称是docker0

由Docker创建的每一个容器,都会创建一个虚拟的以太网设备(Veth设备对),其中一端关联到网桥docker0上,另一端使用Linux的网络命名空间技术,映射到容器内的eth0设备,然后从网桥的地址段内给eth0接口分配一个IP地址

Docker网络在bridge模式下Docker Daemon启动时创建docker0网桥,并在网桥使用的网段为容器分配IP

8 同一个pod内的容器之间可以通过localhost通信;同一个node上的pod之间可以通过ip直接通信;

可以在网络层将Kubernetes的节点看作一个路由器

10 服务的IP地址是在Kubernetes的Portal Network中分配的,而这个Portal Network的地址范围是我们在Kubmaster上启动API服务进程时,使用--service-cluster-ip-range=xx命令行参数指定的。这个IP段可以是任何段,只要不和docker0或者物理网络的子网冲突就可以

11 使用tcpdump来进行网络抓包

12 Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平网络空间中。
13 Flannel可以搭建Kubernetes依赖的底层网络

posted on 2020-05-26 21:27  我和你并没有不同  阅读(196)  评论(0编辑  收藏  举报