Kubernetes 学习笔记 权威指南第七章
1 Kubernetes对集群网络有如下要求。
(1)所有容器都可以在不用NAT的方式下同别的容器通信。
(2)所有节点都可以在不用NAT的方式下同所有容器通信,反之亦然。
(3)容器的地址和别人看到的地址是同一个地址。
原生的Docker网络目前还不能很好地支持这些要求
2 处于不同命名空间中的网络栈是完全隔离的,彼此之间无法通信。如果想在两个命名空间之间通信,就必须有一个Veth设备对
3 所有的网络设备(物理的或虚拟接口、桥等在内核里都叫作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,则说明这个网络接口连接的是网关,否则说明这个接口直连主机
6 在Kubernetes管理模式下通常只会使用bridge模式,在bridge模式下,Docker Daemon第1次启动时会创建一个虚拟的网桥,默认的名称是docker0
7 由Docker创建的每一个容器,都会创建一个虚拟的以太网设备(Veth设备对),其中一端关联到网桥docker0上,另一端使用Linux的网络命名空间技术,映射到容器内的eth0设备,然后从网桥的地址段内给eth0接口分配一个IP地址
Docker网络在bridge模式下Docker Daemon启动时创建docker0网桥,并在网桥使用的网段为容器分配IP
8 同一个pod内的容器之间可以通过localhost通信;同一个node上的pod之间可以通过ip直接通信;
9 可以在网络层将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依赖的底层网络