要了解和分析Pod中的container容器网络,那么首先肯定是要了解docker容器网络的几种模式以及常见用法。之后我们再带着这个问题一步一步地去进行实操验证一下我们的推断是否正确。
1.docker容器网络模式
1.1 默认bridge桥接网络
默认分配docker0网桥网段上的ip给容器, 每个容器的network namespace都是相互隔离的。docker自身生成一个veth pair(虚拟网卡对) 一端放在docker0网桥上, 一端放在容器内部。
通过docker inspect 容器查看容器网络模式信息:
网络详情:
1.2 共享宿主机host的网络栈
容器的直接使用宿主机的网络栈 以及端口port范围。
通过docker inspect 容器查看容器网络模式信息:
1.3 container共享模式
可以指定容器,与另外某个已存在的容器共享它的网络栈。 这个和上面共享宿主机网络栈类似 ,不同点是这次共享的对象由宿主机转变成了某个容器而已。
K8S里面多个container共享一个pod的网络栈以及端口范围也是基于此模式实现的。 每当一个Pod被创建,那么首先创建一个 “pause” 容器, 之后这个pod里面的其他容器通过共享这个pause容器的网络栈,实现与外部pod进行通信 , 然后通过localhost进行pod内部的container的通信。如下图所示: