手动模拟 CNI 网络中 host-gw 模式互通

红米11个月前技术文章437

Kubernetes中,CNI的作用就是让两台Node节点之间的Pod能够互相通信,其中有封包的方式,也有路由转发的方式,host-gw就是路由转发的方式。

WX20231218-093951@2x.pnghost-gw 模式介绍

host-gw模式是Kubernetes中一种常见的CNI模式,用于容器网络的实现。host-gwhost gateway的缩写,意味着通过主机的网络表routing table来实现容器间的通信。

host-gw模式中,每个节点上的容器都被分配一个唯一的IP地址,并且这些IP地址是主机网络的一部分。当容器之间进行通信时,数据包直接通过主机的网络层进行转发,而不需要经过额外的网络封装或overlay网络。这使得host-gw模式相对简单且性能较好。

以下是host-gw模式的主要特点和工作原理:

  • IP 地址分配: 每个容器被分配一个主机网络中的唯一IP地址。这些IP地址在主机网络中是直接可达的。

  • 主机路由表: 容器的IP地址被添加到主机的路由表中,以确保主机能够正确地路由到容器。

  • 容器间通信: 容器之间的通信直接通过主机的网络层进行,无需经过overlay网络或其他封装。这降低了网络的复杂性,并提高了性能。

  • 局限性: 由于容器共享主机网络,因此在网络隔离方面存在一些局限性。这意味着容器可以直接访问主机上运行的服务,但同时也需要谨慎处理网络安全性。

Kubernetes中,可以通过选择合适的CNI插件以及配置host-gw模式来实现主机网络的容器通信。host-gw模式通常适用于要求较为简单、性能较高,且容器之间不需要强制隔离的场景。

手动实现案例

环境准备:

Node1: 192.168.209.203
Node2: 192.168.209.145


需求:
需要在两个节点都创建命名空间并设置IP,使两个不同节点命名空间互通

Node1 节点操作

配置linux内核转发

sysctl -w net.ipv4.ip_forward=1

创建网桥,在网桥中设置网关,并启动

ip link add br1 type bridge
ip addr add 192.168.1.1/24 dev br1
ip link set br1 up

创建命名空间,并创建veth pair后绑定命名空间

ip netns add ns1
ip link add veth-ns1 type veth peer name veth-br1
ip link set veth-ns1 netns ns1

设置ns1veth设备IP,并启动

ip netns exec ns1 ip addr add 192.168.1.2/24 dev veth-ns1
ip netns exec ns1 ip link set veth-ns1 up

veth pair的另一端绑定到网桥中,并启动

ip link set dev veth-br1 master br1
ip link set veth-br2 up

配置ns1命名空间下访问Node2中命名空间的路由

ip netns exec ns1 ip route add 192.168.2.0/24 via 192.168.1.1 dev veth-ns1

配置root下访问Node2中命名空间的路由

ip route add 192.168.2.0/24 via 192.168.209.145 dev ens33

Node2 节点操作

配置linux内核转发

sysctl -w net.ipv4.ip_forward=1

创建网桥,在网桥中设置网关,并启动

ip link add br2 type bridge
ip addr add 192.168.2.1/24 dev br2
ip link set br2 up

创建命名空间,并创建veth pair后绑定命名空间

ip netns add ns2
ip link add veth-ns2 type veth peer name veth-br2
ip link set veth-ns2 netns ns2

设置ns2veth设备IP,并启动

ip netns exec ns2 ip addr add 192.168.2.2/24 dev veth-ns2
ip netns exec ns2 ip link set veth-ns2 up

veth pair的另一端绑定到网桥中,并启动

ip link set dev veth-br2 master br2
ip link set veth-br2 up

配置ns2命名空间下访问Node1中命名空间的路由

ip netns exec ns2 ip route add 192.168.1.0/24 via 192.168.2.1 dev veth-ns2

配置root下访问Node1中命名空间的路由

ip route add 192.168.1.0/24 via 192.168.209.203 dev ens33

测试

[root@ns1 ~]# ip netns exec ns1 ping 192.168.2.2
PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.
64 bytes from 192.168.2.2: icmp_seq=1 ttl=62 time=0.415 ms
64 bytes from 192.168.2.2: icmp_seq=2 ttl=62 time=0.380 ms

相关文章

Doris审计插件的安装

Doris审计插件的安装

插件下载地址:https://doris.apache.org/download1.安装Doris审计插件(1)解压 Audit Loader 插件步骤1. 复制插件文件cp  /opt/dtstac...

数仓主流架构简介之一

数仓主流架构简介之一

一、Lambda架构Apache Storm的创建者Nathan Marz于 2011 年开发,旨在解决大规模实时数据处理的挑战。Lambda数据架构提供了一个可扩展、容错且灵活的系统来处理大量数据。...

kubernetes调度和调度器

一、Kubernetes调度Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单,但有很多要考虑的问题:公平:如何保证每个节点都能被...

Sentry管理Hive目录acl -setacl不生效

Sentry管理Hive目录acl -setacl不生效

CDH在启动Sentry后/user/hive/warehouse这个目录 hdfs手动setacl会不生效首先确保hdfs参数dfs.namenode.acls.enabled=true;还有另一个...

harbor数据迁移-SOP

harbor数据迁移-SOP

背景线下自建harbor需要迁移至云上自建harbor迁移方案harbor私有仓库的主从复制实现数据迁移前置条件harbor目标仓库已部署好,并且版本和源仓库版本最好保持一致迁移步骤1、配置slave...

ranger审计Solr部署

安装前准备1.1. 创建用户和用户组groupadd solruseradd -g solr solr1.2. 添加环境变量vi /etc/profile export SOLR_HOME=/opt/...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。