【k8s知识】【网络】k8s的网络【sdn&docker&k8s网络模型】(一)

参考链接:https://mp.weixin.qq.com/s/yprsl9zrWQP7He-185g0GA

一、软件定义网络(SDN)

       软件定义网络 (SDN) 是一种架构,它抽象了网络的不同、可区分的层,使网络变得敏捷和灵活,SDN 的目标是通过使企业和服务提供商能够快速响应不断变化的业务需求来改进网络控制。

        在软件定义的网络中,网络工程师或管理员可以从中央控制台调整流量,而无需接触网络中的各个交换机,无论服务器和设备之间的特定连接如何,集中式SDN 控制器都会指导交换机在任何需要的地方提供网络服务。

二、SDN架构的典型表示

SDN 技术只专注于网络控制平面与数据平面的分离,当控制平面决定数据包应该如何流经网络时,数据平面将数据包从一个地方移动到另一个地方。

应用层:应用层包含组织使用的典型网络应用或功能,这可能包括入侵检测系统、负载均衡或防火墙。传统网络将使用专用设备,例如防火墙或负载均衡器,而软件定义的网络则用使用控制器来管理数据平面行为的应用程序替换设备。

控制层:控制层代表集中式 SDN 控制器软件,充当软件定义网络的大脑,该控制器驻留在服务器上并管理整个网络的策略和流量。

基础设施层:基础设施层由网络中的物理交换机组成,这些交换机将网络流量转发到它们的目的地。

API接口:这三层使用各自的北向和南向API 进行通信,应用程序通过其北向接口与控制器通信,尽管存在其他协议,

但控制器和交换机使用南向接口(例如OpenFlow)进行通信。

三、网络基础知识

 

 

物理层:设备之间原始数据的传输,数据格式:比特流。

数据链路层:原始比特流转换成逻辑传输数据,建立相邻结点之间的数据链路,mac地址寻址,数据格式:帧

网络层:将数据链路层提供的帧组成数据包,通过路由算法提供最佳传输路径,数据格式:IP数据包

数据链路层解决同一网络节点间的传输,网络层解决不同子网间的传输。(IP是网络层)

传输层:数据格式,也称作数据包(packets)(TCP的数据单元称为段(segments)UDP的数据单元称为数据报(datagrams))

拆分数据包,提供端对端不同主机用户进程数据传输,提供可靠或不可靠传输及流量控制,是连接通信子网和资源子网的桥梁。

会话层:不参与具体的传输,提供建立和维护应用间通信的机制。

表示层:数据的表示方式(格式处理及编码转换)和特定功能(加解密,解压缩)的实现

应用层:为用户提供服务,为操作系统或者应用程序提供访问网络的的接口,应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等

 

四、docker容器网络及其配置

参考链接:https://mp.weixin.qq.com/s/XZyB3f0LBqGaoUmeJg1PoA

Docker 在安装后自动提供 3 种网络,可以使用 docker network ls 命令查看

Docker 使用 Linux 桥接,在宿主机虚拟一个 Docker 容器网桥(docker0),Docker 启动一个容器时会根据 Docker 网桥的网段分配给容器一个 IP 地址,称为 Container-IP,同时 Docker 网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。

 docker的4种网络模式:

模式1:bridge模式

当 Docker 进程启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

从 docker0 子网中分配一个 IP 给容器使用,并设置 docker0 的 IP 地址为容器的默认网关。在主机上创建一对虚拟网卡 veth pair 设备,Docker 将 veth pair 设备的一端放在新创建的容器中,并命名为 eth0(容器的网卡),另一端放在主机中,以 vethxxx 这样类似的名字命名,并将这个网络设备加入到 docker0 网桥中。可以通过 brctl show 命令查看。

bridge 模式是 docker 的默认网络模式,不写--network 参数,就是 bridge 模式。使用 docker run -p 时,docker 实际是在 iptables 做了 DNAT 规则,实现端口转发功能。可以使用 iptables -t nat -vnL 查看。

 Docker 网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机 IP]:[容器端口]访问容器。

veth pair解释:veth pair 全称是 Virtual Ethernet Pair,是一个成对的端口,所有从这对端口一 端进入的数据包都将从另一端出来,反之也是一样。引入 veth pair 是为了在不同的 Network Namespace 直接进行通信,利用它可以直接将两个 Network Namespace 连接起来。

 个人理解

1、docker进程启动,会在主机上创建一个名为docker0的虚拟网桥,虚拟网桥的作用类似交换机,工作在数据链路层,实现mac地址层次的数据链接;

2、创建容器的时候,docker程序会为新创建的容器创建一对虚拟网卡veth pair设备,其中一端放在主机中,以vethxxx命名,另一端放在容器中以ethxxx命名。

3、veth pair的作用就是一端进入数据包,并从另一端出来

4、Docker 网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接 Container-IP 访问到容器。

5、如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机 IP]:[容器端口]访问容器。

docker容器配置

1、创建Network Namespace  

ip netns add ns0

2、操作Network Namespace

ip netns exec ns0 ip addr  //查看网卡信息

ip netns exec ns0 ip link set lo up   //启用回环网卡lo

3、转移设备,我们可以在不同的 Network Namespace 之间转移设备(如 veth)。由于一个设备只能属于一个 Network Namespace ,所以转移后在这个 Network Namespace 内就看不到这个设备了。其中,veth 设备属于可转移设备,而很多其它设备(如 lo、vxlan、ppp、bridge 等)是不可以转移的。

4、创建veth pair 

ip link add type veth

 可以看到,此时系统中新增了一对 veth pair,将 veth0 和 veth1 两个虚拟网卡连接了起来,此时这对 veth pair 处于”未启用“状态。

五.k8s网络模型

参考链接:https://mp.weixin.qq.com/s/ennOLcCVUernHkgmPj4ung

1、Underlay Network Model

底层网络 Underlay Network 顾名思义是指网络设备基础设施,如交换机,路由器, DWDM 使用网络介质将其链接成的物理网络拓扑,负责网络之间的数据包传输。 underlay network 可以是二层,也可以是三层;二层 underlay network 的典型例子是以太网 Ethernet,三层是 underlay network 的典型例子是互联网 Internet。

在kubernetes中,underlay network 中比较典型的例子是通过将宿主机作为路由器设备,Pod 的网络则通过学习成路由条目从而实现跨节点通讯。

2、Overlay Network Model

在 underlay 网络上构建出的虚拟逻辑网络,而无需对物理网络架构进行更改。本质上来说,overlay network 使用的是一种或多种隧道协议 (tunneling),通过将数据包封装,实现一个网络到另一个网络中的传输,具体来说隧道协议关注的是数据包(帧)。

   

IPIP隧道协议,通过Linux内核功能进行的封装,VxLAN 本质上是一个 UDP包, IPIP 则是将包封装在本身的报文包上。 

通过上述的架构可以看出,隧道实际上是一个抽象的概念,并不是建立的真实的两端的隧道,而是通过将数据包封装成另一个数据包,通过物理设备传输后,经由相同的设备(网络隧道)进行解包实现网络的叠加。

3、kubernetes网络模型

参考链接:https://mp.weixin.qq.com/s/TgMGsnX8aCDFkA1GlDK3Dg

要求:

1、所有 Pod 都可以在不使用网络地址转换 (NAT) 的情况下与所有其他 Pod 通信。

2、所有节点都可以在没有 NAT 的情况下与所有 Pod 通信。

3、Pod 认为自己的 IP 与其他人认为的 IP 相同。

需要解决的问题:

  • 容器到容器网络
  • Pod 到 Pod 网络
  • Pod 到服务网络
  • Internet 到服务网络
posted @ 2022-12-15 16:24  liubingPersonalBlog  阅读(108)  评论(0编辑  收藏  举报