一些基本概念
- Kubernetes集群里有三种IP地址,分别如下:
- 外部 IP:一般使用Node节点的IP地址,即物理网卡的IP地址。
- PodIP:Pod的IP地址,即docker容器的IP地址,此为虚拟IP地址
- ClusterIP:Service的IP地址,此为虚拟IP地址。
- 网桥:网桥是一个二层网络设备,通过网桥可以将linux支持的不同的端口连接起来,并实现类似交换机那样的多对多的通信。
- 网络的命名空间:Linux在网络栈中引入网络命名空间,将独立的网络协议栈隔离到不同的命令空间中,彼此间无法通信;docker利用这一特性,实现不容器间的网络隔离。
- Veth设备对:Veth设备对的引入是为了实现在不同网络命名空间的通信。
- Iptables/Netfilter:Netfilter负责在内核中执行各种挂接的规则(过滤、修改、丢弃等),运行在内核 模式中;Iptables模式是在用户模式下运行的进程,负责协助维护内核中Netfilter的各种规则表;通过二者的配合来实现整个Linux网络协议栈中灵活的数据包处理机制。
- 路由:Linux系统包含一个完整的路由功能,当IP层在处理数据发送或转发的时候,会使用路由表来决定发往哪里。(与转发区分开来)
Pod IP
每个Pod的IP地址,他是DockerEngine根据docker网桥的IP地址段进行分配的,通常是一个虚拟的二层网络,Kubernetes的最小部署单元是Pod。利用Flannel作为不同HOST之间容器互通技术时,由Flannel和etcd维护了一张节点间的路由表。Flannel的设计目