局域网与Kubernetes内部网络如何互通

K8S搭建完毕之后,碰到个问题,如何进行远程debug(别在生产环境远程debug哦)?那就需要打通局域网和K8S内部网络了 。本文主要介绍Pod通信、K8S网络插件、局域网和K8S网络如何打通 。

局域网与Kubernetes内部网络如何互通

文章插图
一、问题描述【局域网与Kubernetes内部网络如何互通】我们在实际使用K8S过程中,出现了以下需求:
  • 出现问题时,想进行远程debug调试 。
  • 开发在电脑完成某个微服务模块开发后,希望本地启动后,能注册到开发环境的注册中心进行调试,而不是本地起一堆依赖的服务 。
以上问题,如果在办公室网络 和 K8S Pod 网络不通的情况下就很难受 。
由于Kube.NETes集群会使用CNI插件创建Pod/Service内部子网,外面一般无法访问内部IP和域名,给开发、测试、 联调带来了很大的麻烦,因此打通开发测试环境Kubernetes集群内部子网和办公室的局域网,实现互联互通是经常遇到的问题 。
在打通之前,我们先了解下K8S网络的基本知识 。K8S的网络架构比较复杂,Kubernetes本身并不负责网络通信,但提供了容器网络接口CNI(ContAIner Network Interface),具体的网络通信交由CNI插件来实现 。
这是一种标准设计,为了让用户在创建或销毁容器时都能够更容易地配置容器网络 。用户只需要使用CNI插件就可以轻松的管理K8S网络 。目前主流的开源CNI插件非常多,像Flannel、Calico等 。
二、常见术语在探索CNI插件之前先了解下几个术语:
  • eth0:是系统的光纤以太网接口卡名称,也会有别的名称,比如ens192 。
  • veth 虚拟网络设备:veth设备是成对出现的,一端连着Pod,另一端连着CNI 。
  • netns:netns 是linux Network Namespace 的缩写,是 Linux 提供的原生网络隔离功能组件,能在 Linux 系统中虚拟出来多个网络空间,实现网络资源的隔离 。
  • 第2层网络:OSI(Open Systems Interconnections,开放系统互连)网络模型的“数据链路”层 。第2层网络会处理网络上两个相邻节点之间的帧传递 。第2层网络的一个值得注意的示例是以太网,其中mac表示为子层 。
  • 第3层网络:OSI网络模型的“网络”层 。第3层网络的主要关注点,是在第2层连接之上的主机之间路由数据包 。IPv4、IPv6和ICMP是第3层网络协议的示例 。
  • VXLAN:代表“虚拟可扩展LAN” 。首先,VXLAN用于通过在UDP数据报中封装第2层以太网帧来帮助实现大型云部署 。VXLAN虚拟化与VLAN类似,但提供更大的灵活性和功能(VLAN仅限于4096个网络ID) 。VXLAN是一种封装和覆盖协议,可在现有网络上运行 。
  • Overlay网络:Overlay网络是建立在现有网络之上的虚拟逻辑网络 。Overlay网络通常用于在现有网络之上提供有用的抽象,并分离和保护不同的逻辑网络 。
  • 封装:封装是指在附加层中封装网络数据包以提供其他上下文和信息的过程 。在overlay网络中,封装被用于从虚拟网络转换到底层地址空间,从而能路由到不同的位置(数据包可以被解封装,并继续到其目的地) 。
  • 网状网络:网状网络(Mesh network)是指每个节点连接到许多其他节点以协作路由、并实现更大连接的网络 。网状网络允许通过多个路径进行路由,从而提供更可靠的网络 。网状网格的缺点是每个附加节点都会增加大量开销 。
  • BGP:代表“边界网关协议”,用于管理边缘路由器之间数据包的路由方式 。BGP通过考虑可用路径,路由规则和特定网络策略,帮助弄清楚如何将数据包从一个网络发送到另一个网络 。BGP有时被用作CNI插件中的路由机制,而不是封装的覆盖网络 。
  • IP隧道技术:是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程 。 IP 隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址 。IP隧道技术亦称为IP封装技术 。
三、Pod通信在打通局域网与Kubernetes内部网络之前,先简单描述下,K8S的Pod之间是如何通信的 。
1.同一个节点中的Pod通信Pod通过虚拟Ethernet接口对(Veth Pair)与外部通信,Veth Pair像一根网线,一端在Pod内部,一端在Pod外部 。同一个节点上的Pod通过网桥(Linux Bridge)通信,如下图所示 。


推荐阅读