Skip to main content
开放网络的先行者与推动者—星融元
加入我们技术支持(Support)  TEL:(+86)4000989811

标签: A-lab-云网络

CX102S-DPU开放智能网关用户指导手册

CX102S-DPU开放智能网关用户指导手册

1 引言

CX102S-DPU开放智能网关内部核心模块为1*交换芯片+2*DPU(高性能计算单元),其中两张DPU和交换芯片通过内部2*10G链路互联,其中面板的1-8接口还支持PoE++供电能力,交换芯片中运行着基于SONiC的开放的网络操作系统AsterNOS,提供丰富的L2/L3转发功能。默认情况下,DPU1默认安装了OpenWrt系统,专为网络出口提供网关能力。DPU2默认安装了Debian系统,用户可以根据实际业务需求,按需安装多种类型的软件工具。

同时,允许用户在设备的两张DPU上安装任意Linux发行版本,包括Ubuntu、Debian、OpenWRT、CentOS 等,从而支持开放的软件生态,如VPP、UFW、OpenVPN、Snort、HAProxy、Nginx、ntopng等,并可根据用户需要在同一台设备上组合运行多个软件。

智能、网关、OpenWr
CX102S-DPU开放智能网关

2 首次登录设备

2.1 设备基础配置

设备初始化情况下没有默认的登录/管理IP,设备上电后需要通过串口连接,配置IP地址后可以通过SSH的方式登录设备。

  • 设备默认登录用户名:admin,密码:asteros。
  • 通过串口连接设备时需注意修改波特率为:115200。

该设备内置两张高性能DPU卡,其中DPU1通过内部接口Ethernet19与交换芯片相连,DPU2通过内部接口Ethernet20与交换芯片相连。缺省情况下,设备面板上的所有物理接口以及内部接口都为access模式,默认均为VLAN1,登录设备后可以通过给VLAN1配置IP地址作为设备的管理IP。

设备面板上的所有物理接口以及内部接口都为access模式

设备配置命令如下:

3 配置DPU1

DPU1默认安装了OpenWrt系统,专为网络出口提供网关能力,用户也可以基于该系统安装第三方软件。如需自定义安装其他基础操作系统,请前往Asterfusion官网参考《CX102S-DPU开放智能网关DPU操作系统安装指导》进行系统安装。

需要将连接设备的PC地址配置为同一网段
登录openwrt哇、网关

注:如需修改DPU1/DPU2的默认IP地址,请通过串口连接设备后,在命令行输入以下命令分别可以进入DPU1和DPU2后台进行配置修改:(注:命令需一次性完整输入)

3.2 OpenWrt功能配置

3.2.1 配置WAN接口

缺省情况下,OpenWrt默认的LAN接口状态如下图所示,需先创建一个WAN口接入运营商网络:

OpenWrt默认的LAN接口状态

按照以下步骤创建接口,需要注意设备侧需要对应配置相同的VLAN才能互通(以下步骤中LAN端口为VLAN10,WAN端口为VLAN100,用户可根据网络情况进行修改)
1、点击【网络】-【接口】-【设备】-【添加设备配置】

添加设备配置

2、配置以下参数信息,点击【保存】

配置以下参数信息

3、删除IPV6默认配置后点击【保存并应用】

删除IPV6默认配置

4、再返回到【接口】,点击【添加新接口】

再返回到【接口】

5、配置以下参数信息后点击【创建接口】

配置参数信息

6、点击【创建接口后】,根据网络出口真实的IP规划进行配置后点击【保存】

根据真实的IP规划进行配置

7、WAN接口配置完成后点击【保存并应用】,完成接口的配置

完成接口的配置

3.2.2 配置LAN接口

1、点击【网络】-【接口】-【设备】-【添加设备配置】

添加设备配置

2、配置以下参数信息,点击【保存】

配置参数信息

3、再返回到【接口】,点击【添加新接口】

添加新接口

4、点击【创建接口后】,根据网络LAN真实的IP规划进行配置后点击【保存】

根据网络LAN真实的IP规划进行配置
根据网络LAN真实的IP规划进行配置

5、将初始的LAN口删除后点击【保存并应用】,即可完成OpenWrt的配置

完成OpenWrt的配置

注:如需配置其他功能,详情请参考OpenWrt官方配置指导手册

3.3 设备接口配置

典型场景配置

典型场景配置举例:当图中PC需要经过网关设备访问外网时,需要把OpenWrt中eth0.100接口设置为WAN口,eth0.10接口设置成LAN口(上一节配置中已介绍),同时需要把设备的Eth18口与运营商专线连接,配置为WAN端口,把设备的Eth1-4口连接PC,配置成LAN端口,VLAN(WAN:VLAN100,LAN:VLAN10),DPU1与交换机侧通过Ethernet19口进行数据传输。将交换机的内部接口Eth19的VLAN放行,设备配置如下:

4 配置DPU2

DPU2默认安装了Debian系统,用户也可以基于该系统安装其他第三方软件。该文档以在系统之上安装ntopng(监控网络流量工具)举例,可以将网络出口的全流量进行可视化监控分析,用户如需自定义安装其他基础操作系统,请前往Asterfusion官网参考《CX102S-DPU开放智能网关-DPU操作系统安装指导》进行系统安装,如需自定义安装其他软件工具,请前往Asterfusion官网参考《CX102S-DPU开放智能网关-DPU软件安装指导-ntopng》进行系统安装。

4.1 安装依赖

4.2 准备源码

4.3 编译安装

4.4 交换机侧配置

DPU2与交换机侧通过Ethernet20口进行数据传输,此时需要把交换机上WAN侧(Ethernet 16)的流量镜像到Ethernet20,供DPU2上的ntopng进行监控分析。

4.5 功能验证

当前ntopng所在计算单元的管理IP是192.168.2.1/24,PC配置相同网段的IP,与设备Ethernet1口连接,通过192.168.2.1:3000即可访问ntopngp的WEB界面。默认的用户名密码是admin/admin,第一次登录需要修改密码。

登录界面

在Web页面上可以看到所有经过WAN口的全部流量:

Web页面上可以看到所有经过WAN口的全部流量

相关产品:云化园区交换机

相关阅读:

DPU软件安装指导-ntopng

在Debian Linux上安装ntopng

DPU软件安装指导-ntopng

本文档介绍如何在星融元CX102S-DPU设备的计算单元(DPU)的Debian Linux系统上安装网络流量可视化监控工具ntopng

1、ntopng介绍

ntopng是ntop的下一代版本,是一款基于web的网络流量分析工具,它能够实时监控和分析网络流量,提供丰富的可视化界面,帮助用户更好地了解网络状况和优化网络性能。

ntopng支持多种协议和数据源,包括TCP、UDP、HTTP、DNS、NetFlow等,可以对网络流量进行深度分析,并提供实时警报和日志记录功能。ntopng的优点是易于安装和使用,具有强大的功能和灵活的配置选项,可以帮助管理员快速识别网络问题并采取相应措施。

ntopng支持多种协议和数据源

2、 ntopng编译安装

2.1 安装依赖

2.2 准备源码

3.3 编译安装

3、启动运行

计算单元-1侧配置步骤:

       默认情况下,计算单元-1预装OpenWRT系统,可根据用户所处网络环境到OpenWRT的WEB界面进行相应的网络配置。具体配置方法/流程请参考OpenWRT的指导文档。

计算单元-2侧配置步骤:

计算单元-1侧配置步骤
交换单元侧配置
交换单元侧配置

5 访问验证ntopng运行

当前ntopng所在计算单元的管理IP是192.168.17.26/24,所以通过 http://192.168.17.26:3000 访问ntopngp的WEB界面。默认的用户名密码是admin/admin,第一次登录需要修改密码。

ntopng
流量仪表盘
流量仪表盘
系统状态概览
系统状态概览

相关产品:CX-M系列云化园区交换机

JumpServer-开源堡垒机的部署

JumpServer-开源堡垒机的部署

1 JumpServer简介

Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 机制的运维安全审计系统。

Jumpserver 使用 Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。

Jumpserver 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制。

2 目标

使用Jumpserver统一管理公司内网资源,可以实现不通过内网来访问公司Windows/Linux资源。

3 环境准备

一台server,操作系统CentOS 7.4.1708 镜像CentOS-7-x86_64-DVD-1810.iso,IP 192.168.5.135,服务器具体配置如下:

  • 硬件配置:2个CPU核心, 4G 内存, 50G 硬盘(最低)
  • Python = 3.6.x

4 组件说明

  • JumpServer 为管理后台, 管理员可以通过 Web 页面进行资产管理、用户管理、资产授权等操作, 用户可以通过 Web 页面进行资产登录, 文件管理等操作
  • Koko 为 SSH Server 和 Web Terminal Server 。用户可以使用自己的账户通过 SSH 或者 Web Terminal 访问 SSH 协议和 Telnet 协议资产
  • Luna 为 Web Terminal Server 前端页面, 用户使用 Web Terminal 方式登录所需要的组件
  • Guacamole 为 RDP 协议和 VNC 协议资产组件, 用户可以通过 Web Terminal 来连接 RDP 协议和 VNC 协议资产 (暂时只能通过 Web Terminal 来访问)

5 端口说明

  • JumpServer 默认 Web 端口为 8080/tcp, 默认 WS 端口为 8070/tcp
  • Koko 默认 SSH 端口为 2222/tcp
  • Guacamole 默认端口为 8081/tcp,
  • Nginx 默认端口为 80/tcp
  • Redis 默认端口为 6379/tcp
  • Mysql 默认端口为 3306/tcp

6 部署过程

6.1 关闭SELinux

SELinux不关闭的情况下会发生无法访问的问题。

[root@localhost  ~]# setenforce 0
[root@localhost  ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

6.2 关闭防火墙

防止安装时出现各个组件的端口不能访问的问题。

[root@localhost  ~]#systemctl stop firewalld && systemctl dible firewalld

6.3 安装依赖包

[root@localhost  ~]# yum -y install wget gcc epel-release git

6.4 安装Redis

JumpServer使用Redis做cache和celery broke。

[root@localhost  ~]# yum -y install redis
[root@localhost  ~]# systemctl enable redis
[root@localhost  ~]# systemctl start redis

6.5 安装Mysql并授权

JumpServer使用Mysql做数据库,也支持Sqlite3,Postgres等。

[root@localhost  ~]# yum -y mariadb mairadb-devel mariadb-server
[root@localhost  ~]# systemctl enable mairadb
[root@localhost  ~]# systemctl start mariadb
[root@localhost  ~]# mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'tera123'; flush privileges;"

6.6 Mysql修改存储路径

Mysql yum安装后默认存储路径为根目录,所以需要修改存储路径防止根目录磁盘被占满。

[root@localhost  ~]# vi /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
datadir=/home/mysql
socket=/home/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[root@localhost  ~]# vi /etc/my.cnf.d/client.cnf 
[client-mariadb]
socket=/home/mysql/mysql.sock
[root@localhost  ~]# systemctl restart mariadb

6.7 安装Nginx

安装Nginx,反向代理JumpServer各个组件。

[root@localhost  ~]#vi /etc/yum.repos.d/nginx.rep
[nginx]
name=nginx 
repobaseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@localhost  ~]# yum -y install nginx
[root@localhost  ~]# systemctl enable nginx

6.8 安装Pyhon3.6

[root@localhost  ~]# yum -y install python36 python36-devel
[root@localhost  ~]# cd /home
[root@localhost  ~]# python3.6 -m venv py3
[root@localhost  ~]# source /home/py3/bin/activate

6.9 安装JumpServer

[root@localhost  ~]# cd /home
[root@localhost  ~]# git clone --depth=1 https://github.com/jumpserver/jumpserver.git
[root@localhost  ~]# yum -y install $(cat /home/jumpserver/requirements/rpm_requirements.txt)

6.10 安装Python依赖库

[root@localhost  ~]# pip install wheel
[root@localhost  ~]# pip install --upgrade pip setuptools
[root@localhost  ~]# pip install -r /home/jumpserver/requirements/requirements.txt

6.11 修改JumpServer配置文件

[root@localhost  ~]# cd /home/jumpserver
[root@localhost  ~]# cp config_example.yml config.yml
[root@localhost  ~]# vi config.yml
SECRET_KEY: FjAvZ0D5c6LwaUJVb7AwPPsiFl2wVVpMGQl41LBbQKi23bPEiK
BOOTSTRAP_TOKEN: e7t4EZ0BBw5GfvlH
DEBUG: false
LOG_LEVEL: ERROR
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: tera123
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379

6.12 运行JumpServer

[root@localhost  ~]# cd /home/jumpserver
[root@localhost  ~]# ./jms start all -d

6.13 安装Docker

[root@localhost  ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@localhost~  ] # yum-config-manager\
--add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost  ~]# yum -y install docker-ce wget
[root@localhost  ~]# mkdir /etc/docker
[root@localhost  ~] #yum -y install docker-ce wget
[root@localhost  ~] #systemctl enable docker
[root@localhost  ~] #systemctl start docker

6.14 部署Koko与Guacamole

[root@localhost  ~]# docker run --name jms_koko -d -p 2222:2222\
-p 127.0.0.1:5000:5000\
-e CORE_HOST=http://192.168.5.135:8080\
-e BOOTSTRAP_TOKEN=e7t4EZ0BBw5GfvlH \
--restart=always wojiushixiaobai/jms_koko:1.5.6
[root@localhost  ~]# docker run --name jms_guacamole -d -p 127.0.0.1:8081:8080\
-e JUMPSERVER_SERVER=http://192.168.5.135:8080\ 
-e BOOTSTRAP_TOKEN=e7t4EZ0BBw5GfvlH\ 
--restart=always wojiushixiaobai/jms_guacamole:1.5.6

6.15 部署Luna

Luna为JumpServer的Web前端。

[root@localhost  ~]# cd /home
[root@localhost  ~]# wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
[root@localhost  ~]# tar -xvf luna.tar.gz
[root@localhost  ~]# chown -R root:root luna 

6.16 配置Nginx

[root@localhost  ~]# vi /etc/nginx/conf.d/default.conf
server {
    listen 80;
    # server_name _;
    client_max_body_size 1000m;  # 录像及文件上传大小限制
    client_header_timeout 360s;
    large_client_header_buffers 4 16k;
    client_body_buffer_size 128k;
    proxy_connect_timeout 600;
    proxy_read_timeout 600;
    proxy_send_timeout 600;

    location /luna/ {
        try_files $uri / /index.html;
        alias /home/luna/;  # luna 路径, 如果修改安装目录, 此处需要修改
    }
    location /media/ {
        add_header Content-Encoding gzip;
        root /home/jumpserver/data/;  # 录像位置, 如果修改安装目录, 此处需要修改
    }

    location /static/ {
        root /home/jumpserver/data/;  # 静态资源, 如果修改安装目录, 此处需要修改
    }

    location /koko/ {
        proxy_pass       http://localhost:5000;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }

    location /guacamole/ {
        proxy_pass       http://localhost:8081/;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }

    location /ws/ {
        proxy_pass http://localhost:8070;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }
}
[root@localhost  ~]# systemctl start nginx

6.17 端口检查

检查端口状态,必须有6379,8080,8081,80,5555,8070,3306,2222几个端口。

[root@localhost  ~]# netstat -nlp |grep tcp

6.18 验证JumpServer

默认登录密码,admin:admin,登录成功有欢迎界面,此次部署即成功。

[root@localhost  ~]# ssh -p2222 admin@192.168.5.135

7 参考资料

  1. JumpServer官网:http://www.jumpserver.org/
  2. JumpServer文档:https://jumpserver.readthedocs.io/zh/master/

相关阅读。

如有其它问题,请填写右侧需求表单联系我们。

Mellanox网卡驱动安装

Mellanox网卡驱动安装

1 目标

本文档以CentOS7.6为例,详细介绍了Mellanox网卡MLNX_OFED的驱动安装和固件升级方法。

2 下载驱动

该方法适用于CentOS、RHEL、SLES、Ubuntu、EulerOS等操作系统,在安装不同操作系统的驱动时,请下载对应操作系统版本的驱动。

首先根据系统发行版本下载对应的驱动,下载地址如下:https://www.mellanox.com/page/products_dyn?product_family=26&mtag=linux_sw_drivers&ssn=q80crdrodvb8ce021n94ep58f1

注意选择download,根据相应的版本选择相应的驱动,点击后要同意协议再下载。

根据不同操作系统,选择相对应的安装驱动
图1
选好安装驱动后,同意协议
图2

本次下载的驱动版本为:MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64.tgz

3 安装步骤

3.1 把下载好的Mellanox驱动解压缩

[root@localhost ~]# tar –zxvf MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64.tgz
[root@localhost ~]# cd MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64

3.2 查看当前系统的内核版本

[root@localhost MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64]# uname -r
3.10.0-957.el7.x86_64

3.3 查看当前驱动所支持的内核版本

[root@localhost MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64]# cat .supported_kernels 
3.10.0-957.el7.x86_64 

注:由以上可知下载的默认驱动支持当前的内核版本

3.4 如果当前内核与支持内核不匹配

手动编译适合内核的驱动,在编译之前首先安装gcc编译环境和kernel开发包

[root@localhost MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64]#yum  install gcc gcc-c++
libstdc++-devel kernel-default-devel 

添加针对当前内核版本的驱动

[root@localhost MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64]#./mlnx_add_kernel_support.sh -m /root/MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64  -v

注:完成后生成的驱动文件在/tmp目录下

[root@localhost MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64]# ls -l /tmp/MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64-ext.tgz
-rw-r--r-- 1 root root 282193833 Dec 23 09:49 /tmp/MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64-ext.tgz

3.5 安装驱动

[root@localhost tmp]# tar xzvf MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64-ext.tgz
[root@localhost tmp]# cd MLNX_OFED_LINUX-4.7-3.2.9.0-rhel7.6-x86_64-ext
[root@localhost tmp]# ./mlnxofedinstall

3.6 最后启动openibd服务

[root@localhost ~]#/etc/init.d/openibd start
[root@localhost ~]#chkconfig openibd on

4 结论

Mellanox网卡驱动安装主要根据内核是否匹配分为下载后直接安装和编译安装两部分。

5 参考资料

  1. Mellanox官网:https://www.mellanox.com

点击了解Asterfusion CX-N数据中心交换机

如有其它问题,请填写右侧需求表单联系我们。

CX-N零配置开局能力验证方案

1 简介

零配置部署ZTP(Zero Touch Provisioning)是指新出厂或空配置设备上电启动时采用的一种自动加载开局文件(配置文件、升级文件)的功能,实现设备的免现场配置和部署,从而降低人力成本,提升部署效率。设备支持基于DHCP协议实现的ZTP功能,通过DHCP协议Option字段附带配置文件、升级文件的地址和路径信息,实现相关开局文件的自动化获取和加载任务。

ZTP流程图

2 验证方案

2.1 功能需求

多台设备同时上线无需手动配置,设备自动从FTP服务器获取对应本台角色设备的全量配置并自动加载,设备之间建立BGP peer,完成网络设备的完整的自动上线。

2.2 组网拓扑

组网拓扑

2.3 配置步骤

(1)准备两台设备的全量配置文件:Leaf-A.json、Spine-A.json,配置中包含设备的端口IP以及BGP相关配置;

(2)同时准备引导文件ztp.json,并将配置文件和引导文件同时上传至FTP服务器的相关路径;配置文件名称以实际产品能力为准,但要具备唯一性;

(3)配置DHCP服务器的boot-file字段,指导设备获取引导文件ztp.json;

(4)完成组网拓扑连线,设备Leaf A、Spine A上电;

(5)等待10分钟,登录设备Leaf A与Spine A检查是否获取了相关配置;

(6)通过ping测试互联可达并查看BGP peer的建立情况.

2.4 预计结果

  • Leaf A和Spine A获取到对应自身序列号的配置文件
  • Ping测试可达同时建立BGP peer

相关产品:CX-N超低时延交换机

CX-N-MC-LAG三层转发功能验证

1 方案概述

本文主要讲解CX-N 系列交换机基于MC-LAG实现的三层组网下的相关解决方案,验证网络通信、故障转移和恢复等能力。整个验证过程中交换机所有命令通过思科命令行配置完成。

1.1 MC-LAG二层转发

Asterfusion CX-N超低时延云交换机支持基于MC-LAG的二层转发功能,如图1所示:

基于MC-LAG的二层转发功能
图1:基于MC-LAG的二层转发功能

在上行链路故障转移和恢复测试场景中,使用Server1生成TCP/UDP流量向Server3打流,此时流量路径为:Server1->Leaf1->Spine->Leaf3->Server3。

Leaf1交换机在上联端口HG1故障的情况下,L2流量可以通过Peer-link转发到对端Leaf2,然后通过BGP学习到下一跳为Spine,最后经过Leaf3到Server3。此时流量路径:Server1->Leaf1->Leaf2->Spine->Leaf3->Server3。

1.2 MC-LAG三层转发

Asterfusion CX-N超低时延云交换机支持基于MC-LAG的三层转发功能,相较于MC-LAG的二层转发功能,三层转发新增一条三层冗余链路用于数据转发,转发和控制分离。如图2所示:

基于MC-LAG的三层转发功能
图2:基于MC-LAG的三层转发功能

在上行链路故障转移和恢复测试场景中,使用Server1生成TCP/UDP流量向Server3打流,此时流量路径为:Server1->Leaf1->Spine->Leaf3->Server3。

Leaf1交换机在上联端口HG1故障的情况下,L3流量可以通过BGP邻居学习到Server3的路由通过三层冗余链路转发到Leaf2,然后通过BGP学习到下一跳为Spine,最后经过Leaf3到Server3。此时流量路径:Server1->Leaf1->Leaf2->Spine->Leaf3->Server3。

2 物理网络拓扑

本次相关方案验证的整体物理拓扑如图1所示:

CX-N基于MC-LAG整体物理网络拓扑
图3:CX-N基于MC-LAG整体物理网络拓扑

3 硬件与软件环境

3.1 设备管理口

验证过程中所涉及到的设备、主机名及管理网口IP地址等信息,如表1所示:

设备主机名管理口IP地址备注
CX532-NSpine110.230.1.32 
CX308-NLeaf110.230.1.18 
CX308-NLeaf210.230.1.19 
CX308-NLeaf310.230.1.20 
ServerServer110.230.1.11 
ServerServer310.230.1.13 
表1:设备管理口列表

3.2 硬件环境

验证环境中涉及到的硬件环境,如表2所示:

名称型号硬件指标数量备注
SpineCX532P-N【参见产品彩页】1 
LeafCX308P-48Y-N【参见产品彩页】3 
光模块10GSFP+6为了尽量减少物料种类,线缆和模块速率进行了统一,交换机互联使用100G模块和线缆,服务器需用10G模块和线缆
100GQSFP2810
网线//6 
光纤多模10G /25G适用3 
多模100G适用5 
服务器/内存推荐8G以上2 
表2:硬件环境

3.3 软件环境

验证环境中涉及到的软件环境,如表3所示:

名称版本备注
iperf33.1.7 
CX532-NSONiC.201911.R0314P06 
CX308-NSONiC.201911.R0314P06 
服务器系统CentOS Linux 7.8.2003 
服务器内核3.10.0-1127.18.2.el7 
表3:软件环境

4 基础环境部署

在两台Server服务器上,安装部署本次验证方案的所需要的基础软件。

补充说明:以”[root@server ~]#”为开头的命令表示两台服务器都要执行。

4.1 LLDP

在两台Server服务器上安装LLDP服务,如果是X710网卡要求网卡驱动版本大于2.3.6,然后配置网卡开启LLDP。

[root@server ~]# yum -y install epel-release
[root@server ~]# yum -y install lldpd
[root@server ~]# systemctl start lldpd
[root@server ~]# systemctl enable lldpd
[root@server ~]# lspci |grep -i ether
配置网卡开启LLDP
[root@server ~]# ethtool -i ens1f0
[root@server ~]# ethtool -i ens1f1
配置网卡开启LLDP
[root@sever ~]# ethtool --set-priv-flags ens1f0 disable-fw-lldp on
[root@sever ~]# ethtool --set-priv-flags ens1f1 disable-fw-lldp on

4.2 安装iPerf3 

在2台Server服务器上安装iPerf3软件用来打流。

在2台服务器上上执行:
[root@server ~]# yum -y install iperf3
[root@server ~]# iperf3 -v
iperf 3.1.7
Linux compute-2 3.10.0-1160.62.1.el7.x86_64 #1 SMP Tue Apr 5 16:57:59 UTC 2022 x86_64
Optional features available: CPU affinity setting, IPv6 flow label, TCP congestion algorithm setting, sendfile / zerocopy, socket pacing

4.3 检查链路连接

所有交换机设备要提前检查和Server服务器之间的链路连接情况,确保交换机设备和Server服务器之间的链路连接没有问题,以下命令在所有交换机设备上执行。

admin@sonic:~$ sudo config cli-mode cli
admin@sonic:~$ sudo sonic-cli
sonic#
Spine1# show lldp table
查看Spine1链路情况
Spine2# show lldp table
查看Spine2链路情况
Leaf1# show lldp table
查看Leaf1链路情况
Leaf2# show lldp table
查看Leaf2链路情况
Leaf3# show lldp table
查看Leaf3链路情况

5 组网环境配置   

5.1 逻辑拓扑

组网逻辑拓扑与接口配置
图4:组网逻辑拓扑与接口配置

5.2 Spine1

5.2.1 设备恢复出厂设置

配置思科命令行,恢复Spine1设备到出厂设置。

Spine1@sonic:~$ sudo config cli-mode cli
Spine1@sonic:~$ sudo sonic-cli
sonic# delete startup-config
sonic# reload

5.2.2 配置Spine1接口IP

在Spine1交换机上配置与3台Leaf交换机的互联接口IP。

Spine1# configure terminal
Spine1(config)# interface ethernet 0/0
Spine1(config-if-0/0)# ip address 10.0.10.2/24
Spine1(config-if-0/0)# interface ethernet 0/4
Spine1(config-if-0/4)# ip address 10.0.11.2/24
Spine1(config-if-0/4)# interface ethernet 0/8
Spine1(config-if-0/8)# ip address 10.0.12.2/24

5.2.3 配置Spine1的BGP

在Spine1交换机上配置3台Leaf交换机的BGP邻居。

Spine1# configure terminal
Spine1(config)# interface loopback 0
Spine1(config-loif-0)# ip address 10.10.0.3/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.3/32
Loopback ip will be used as bgp router-id in frr
Spine1(config-loif-0)# ip address 10.10.0.3/3
Spine1(config-loif-0)# router bgp 65003
Spine1(config-router)# neighbor 10.0.10.1 remote-as 65007
Spine1(config-router)# neighbor 10.0.11.1 remote-as 65007
Spine1(config-router)# neighbor 10.0.12.1 remote-as 65008
Spine1(config-router)# route-map DEFAULT_EVPN_ROUTE_MAP permit 65535
Spine1(config-route-map)# route-map FROM_BGP_PEER_V4 permit 65535
Spine1(config)# address-family ipv4 unicast
Spine1(config)# router bgp 65003
Spine1(config-router)# address-family ipv4 unicast
Spine1(config-router-af)# redistribute connected
Spine1(config-router-af)# neighbor 10.0.10.1 route-map FROM_BGP_PEER_V4 in
Spine1(config-router-af)# neighbor 10.0.10.1 route-map FROM_BGP_PEER_V4 out
Spine1(config-router-af)# neighbor 10.0.11.1 route-map FROM_BGP_PEER_V4 in
Spine1(config-router-af)# neighbor 10.0.11.1 route-map FROM_BGP_PEER_V4 out
Spine1(config-router-af)# neighbor 10.0.12.1 route-map FROM_BGP_PEER_V4 in
Spine1(config-router-af)# neighbor 10.0.12.1 route-map FROM_BGP_PEER_V4 out
Spine1(config)# write
Spine1(config)# reload

5.3 Leaf1

5.3.1 设备恢复出厂设置

恢复Leaf1设备到出厂设置。

Leaf1# delete startup-config
Leaf1# reload

5.3.2 配置Leaf1端口速率

配置Leaf1交换机的Ethernet0口速率为10G。

Leaf1# configure terminal 
Leaf1(config)# interface ethernet 0/0  
Leaf1(config-if-0/0)# speed 10000
Leaf1(config-if-0/0)# show this
!
interface ethernet 0/0
speed 10000

5.3.3 配置Leaf1接口IP

在Leaf1交换机上配置与Leaf、Spine交换机的互联接口IP以及PortChannel、VLAN信息。

Leaf1# configure terminal 
Leaf1(config)# interface ethernet 0/48
Leaf1(config-if-0/48)# ip address 10.0.10.1/24
Leaf1(config-if-0/48)# interface link-aggregation 1
Leaf1(config-lagif-1)# interface ethernet 0/0     
Leaf1(config-if-0/0)# link-aggregation-group 1
Leaf1(config-if-0/0)# vlan 10
Leaf1(config-vlan-10)# vlan 30
Leaf1(config-vlan-30)# interface ethernet 0/56
Leaf1(config-if-0/56)# ip address 10.2.1.1/24
Leaf1(config-if-0/56)# mac-address 18:17:25:37:77:00
Leaf1(config-if-0/56)# interface ethernet 0/60
Leaf1(config-if-0/60)# switchport trunk vlan 10
Leaf1(config-if-0/60)# switchport trunk vlan 30
Leaf1(config-if-0/60)# interface vlan 10
Leaf1(config-vlanif-10)# ip address 100.0.10.1/24
Leaf1(config-vlanif-10)# interface link-aggregation 1
Leaf1(config-lagif-1)# switchport access vlan 10

5.3.4 配置Leaf1的MC-LAG

在Leaf1交换机上配置与Leaf2交换机互联接口的MC-LAG。

Leaf1# configure terminal 
Leaf1(config)# vlan 30
Leaf1(config-vlan-30)# interface vlan 30
Leaf1(config-vlanif-30)# ip address 11.0.0.6/24
Leaf1(config-vlanif-30)# mclag domain 1
Leaf1(mclag-domain)# local-address 11.0.0.6   
Leaf1(mclag-domain)# peer-address 11.0.0.7
Leaf1(mclag-domain)# peer-link ethernet 0/60
Leaf1(mclag-domain)# member lag 1
Leaf1(mclag-domain)# commit
Leaf1(mclag-domain)# interface vlan 10
Leaf1(config-vlanif-10)# mac-address 18:17:25:37:64:40

5.3.5 配置Leaf1的BGP

在Leaf1交换机上配置与Spine1交换机的BGP邻居。

Leaf1# configure terminal 
Leaf1(config)# router bgp 65007
Leaf1(config-router)# bgp router-id 10.10.0.6
Leaf1(config-router)# interface loopback 0
Leaf1(config-loif-0)# ip address 10.10.0.6/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.6/32
Loopback ip will be used as bgp router-id in frr
Leaf1(config-loif-0)# router bgp 65007
Leaf1(config-router)# neighbor 10.0.10.2 remote-as 65003
Leaf1(config-router)# neighbor 10.2.1.2 remote-as 65007
Leaf1(config-router)# route-map FROM_BGP_PEER_V4 permit 65535
Leaf1(config-route-map)# router bgp 65007
Leaf1(config-router)# address-family ipv4 unicast
Leaf1(config-router-af)# redistribute connected
Leaf1(config-router-af)# neighbor 10.2.1.2 route-map FROM_BGP_PEER_V4 in
Leaf1(config-router-af)# neighbor 10.2.1.2 route-map FROM_BGP_PEER_V4 out
Leaf1(config-router-af)# neighbor 10.0.10.2 route-map FROM_BGP_PEER_V4 in
Leaf1(config-router-af)# neighbor 10.0.10.2 route-map FROM_BGP_PEER_V4 out

5.4 Leaf2

5.4.1 设备恢复出厂设置

恢复Leaf2设备到出厂设置。

Leaf2# delete startup-config
Leaf2# reload

5.4.2 配置Leaf2端口速率

配置Leaf2交换机的Ethernet0口速率为10G。

Leaf2# configure terminal 
Leaf2(config)# interface ethernet 0/0 
Leaf2(config-if-0/0)# speed 10000
Leaf2(config-if-0/0)# show this
!
interface ethernet 0/0
speed 10000

5.4.3 配置Leaf2接口IP

在Leaf2交换机上配置与Leaf、Spine交换机的互联接口IP以及PortChannel、VLAN信息。

Leaf2# configure terminal 
Leaf2(config)# interface ethernet 0/48
Leaf2(config-if-0/48)# ip address 10.0.11.1/24
Leaf2(config-if-0/48)# interface link-aggregation 1
Leaf2(config-lagif-1)# interface ethernet 0/0     
Leaf2(config-if-0/0)# link-aggregation-group 1
Leaf2(config-if-0/0)# vlan 10
Leaf2(config-vlan-10)# vlan 30
Leaf2(config-vlan-30)# interface ethernet 0/56
Leaf2(config-if-0/56)# ip address 10.2.1.2/24
Leaf2(config-if-0/56)# mac-address 18:17:25:37:77:01
Leaf2(config-if-0/56)# interface ethernet 0/60
Leaf2(config-if-0/60)# switchport trunk vlan 10
Leaf2(config-if-0/60)# switchport trunk vlan 30
Leaf2(config-if-0/60)# interface vlan 10
Leaf2(config-vlanif-10)# ip address 100.0.10.1/24
Leaf2(config-vlanif-10)# interface link-aggregation 1
Leaf2(config-lagif-1)# switchport access vlan 10

5.4.4 配置Leaf2的MC-LAG

在Leaf2交换机上配置与Leaf1交换机互联接口的MC-LAG。

Leaf2# configure terminal 
Leaf2(config)# vlan 30
Leaf2(config-vlan-30)# interface vlan 30
Leaf2(config-vlanif-30)# ip address 11.0.0.7/24
Leaf2(config-vlanif-30)# mclag domain 1
Leaf2(mclag-domain)# local-address 11.0.0.7   
Leaf2(mclag-domain)# peer-address 11.0.0.6
Leaf2(mclag-domain)# peer-link ethernet 0/60
Leaf2(mclag-domain)# member lag 1
Leaf2(mclag-domain)# commit
Leaf2(mclag-domain)# interface vlan 10
Leaf2(config-vlanif-10)# mac-address 18:17:25:37:64:40

5.4.5 配置Leaf2的BGP

在Leaf2交换机上配置与Spine1交换机的BGP邻居。

Leaf2# configure terminal 
Leaf2(config)# router bgp 65007
Leaf2(config-router)# bgp router-id 10.10.0.7
Leaf2(config-router)# interface loopback 0
Leaf2(config-loif-0)# ip address 10.10.0.7/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.7/32
Loopback ip will be used as bgp router-id in frr
Leaf2(config-loif-0)# router bgp 65007
Leaf2(config-router)# neighbor 10.0.11.2 remote-as 65003
Leaf2(config-router)# neighbor 10.2.1.1 remote-as 65007
Leaf2(config-router)# route-map FROM_BGP_PEER_V4 permit 65535
Leaf2(config-route-map)# router bgp 65007
Leaf2(config-router)# address-family ipv4 unicast
Leaf2(config-router-af)# redistribute connected
Leaf2(config-router-af)# neighbor 10.2.1.1 route-map FROM_BGP_PEER_V4 in
Leaf2(config-router-af)# neighbor 10.2.1.1 route-map FROM_BGP_PEER_V4 out
Leaf2(config-router-af)# neighbor 10.0.11.2 route-map FROM_BGP_PEER_V4 in
Leaf2(config-router-af)# neighbor 10.0.11.2 route-map FROM_BGP_PEER_V4 out

5.5 Leaf3

5.5.1 设备恢复出厂设置

恢复Leaf3设备到出厂设置。

Leaf3# delete startup-config
Leaf3# reload

5.5.2 配置Leaf3端口速率

配置Leaf3交换机的Ethernet0口速率为10G。

Leaf3# configure terminal 
Leaf3(config)# interface ethernet 0/0
Leaf3(config-if-0/0)# speed 10000
Leaf3(config-if-0/0)# show this
!
interface ethernet 0/0
speed 10000

5.5.3 配置Leaf3接口IP

在Leaf3交换机上配置与Leaf、Spine交换机的互联接口IP以及PortChannel、VLAN信息。

Leaf3# configure terminal 
Leaf3(config-if-0/0)# interface ethernet 0/48
Leaf3(config-if-0/48)# ip address 10.0.12.1/24
Leaf3(config-if-0/48)# interface link-aggregation 1
Leaf3(config-lagif-1)# interface ethernet 0/0 
Leaf3(config-if-0/0)# link-aggregation-group 1
Leaf3(config-if-0/0)# vlan 20
Leaf3(config-vlan-20)# interface vlan 20
Leaf3(config-vlanif-20)# ip address 100.0.20.1/24
Leaf3(config-vlanif-20)# interface link-aggregation 1
Leaf3(config-lagif-1)# switchport access vlan 20

5.5.4 配置Leaf3的BGP

在Leaf3交换机上配置与Spine1交换机的BGP邻居。

Leaf3(config)# router bgp 65008
Leaf3(config-router)# bgp router-id 10.10.0.8
Leaf3(config-router)# interface loopback 0
Leaf3(config-loif-0)# ip address 10.10.0.8/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.8/32
Loopback ip will be used as bgp router-id in frr
Leaf3(config-loif-0)# route-map FROM_BGP_PEER_V4 permit 65535
Leaf3(config-route-map)# router bgp 65008
Leaf3(config-router)# neighbor 10.0.12.2 remote-as 65003
Leaf3(config-router)# address-family ipv4 unicast
Leaf3(config-router-af)# redistribute connected
Leaf3(config-router-af)# neighbor 10.0.12.2 route-map FROM_BGP_PEER_V4 in
Leaf3(config-router-af)# neighbor 10.0.12.2 route-map FROM_BGP_PEER_V4 out

6 故障转移和恢复测试

6.1 服务器通信测试

在Server3服务器上创建服务端,在Server1服务器使用iperf3软件生成TCP/UDP流量。

[root@server3 ~]# iperf3 -s
[root@server1 ~]# iperf3 -c 100.0.20.3  -l 20k -b 10G   -t 1000
在Server1服务器使用iperf3软件生成TCP/UDP流量

6.2 查看流量路径

Spine1:

查看流量路径

流量从Ethernet0口进,Ethernet8口出。

流量路径Server1-Leaf1-Spine1-Leaf3-Server3

6.3 查看设备路由信息

Spine1:

查看Spine1设备路由信息

Leaf1:

查看Leaf1设备路由信息

Leaf2:

查看Leaf2设备路由信息

6.4 故障测试

流量所在的上行链路断链,检查Leaf的路由信息,查看Server1和Server3打流情况。

Leaf1:
Leaf1(config)# interface ethernet 0/48
Leaf1(config-if-0/72)# shutdown
Server1 Server3打流没有出现断流,有轻微流量抖动:

查看Server1和Server3打流情况

检查Leaf1路由信息:

由于上行链路断链,Leaf1通过BGP邻居学习到100.0.20.0/24的路由通过三层冗余链路Ethernet56口10.2.1.2到Leaf2再到Spine1

检查Leaf1路由信息

检查Leaf2路由信息:

Leaf2路由信息没有变化

Leaf2路由信息

检查Spine1路由信息:

Spine1路由信息没有变化

Spine1路由信息

6.5 查看断链流量路径

Spine1:

 查看Spine1断链流量路径

流量从Ethernet4口进,Ethernet8口出。

Leaf2:

 查看Leaf2断链流量路径

流量从Leaf2三层冗余链路Ethernet56口进,Ethernet48口出到Spine1。

Leaf1:

 查看Leaf1断链流量路径

由于Leaf1上行链路断链,流量从Leaf1三层冗余链路Ethernet56口出,到Leaf2。

流量路径: Server1-Leaf1(三层冗余链路口)-Leaf2(三层冗余链路口)Spine1-Leaf3-Server3

6.6 故障恢复测试

恢复流量所在的上行链路故障,查看Server1和Server3打流情况。

Leaf1:
Leaf1(config)# interface ethernet 0/48
Leaf1(config-if-0/72)# startup

Server1 Server3打流没有出现断流,有轻微流量抖动:

Server1和Server3打流情况

检查Leaf1路由信息:

Leaf1上行链路断链恢复,路由恢复

Leaf1路由信息

检查Leaf2路由信息:

Leaf2路由信息没有变化

Leaf2路由信息

检查Spine1路由信息:

Spine1路由信息没有变化

Spine1路由信息

6.7 查看断链恢复流量路径

Spine1:

查看Spine1断链恢复流量路径

流量从Ethernet0口进,Ethernet8口出。

Leaf2:

查看Leaf2断链恢复流量路径

Leaf2没有流量

Leaf1:

查看Leaf1断链恢复流量路径

Leaf1流量从Ethernet0口进,Ethernet48口出到Spine1。

流量路径恢复: Server1-Leaf1-Spine1-Leaf3-Server3

7 结论

通过上述解决方案验证可知,CX-N系列交换机具备MC-LAG的三层高可用转发功能,同时具备端口、链路及设备组网通信的故障转移和恢复能力。

CX-N云网典型配置方案验证

1 方案概述

本文主要讲解CX-N 系列交换机基于MC-LAG实现的三层组网下的相关解决方案,验证网络通信、故障转移和恢复等能力。整个验证过程中交换机所有命令通过思科命令行配置完成。

2 物理网络拓扑

本次相关方案验证的整体物理拓扑如图1所示:

CX-N基于MC-LAG整体物理网络拓扑
图1:CX-N基于MC-LAG整体物理网络拓扑

3 硬件与软件环境

3.1 设备管理口

验证过程中所涉及到的设备、主机名及管理网口IP地址等信息,如表1所示:

设备主机名管理口IP地址备注
CX532-NSpine110.230.1.32 
CX532-NSpine210.230.1.33 
CX308-NLeaf110.230.1.18 
CX308-NLeaf210.230.1.19 
CX308-NLeaf310.230.1.20 
CX308-NLeaf410.230.1.21 
ServerServer110.230.1.11 
ServerServer210.230.1.13 
表1:设备管理口列表

3.2 硬件环境

验证环境中涉及到的硬件环境,如表2所示:

名称型号硬件指标数量备注
SpineCX532P-N【参见产品彩页】2 
LeafCX308P-48Y-N【参见产品彩页】4 
光模块10GSFP+8为了尽量减少物料种类,线缆和模块速率进行了统一,交换机互联使用100G模块和线缆,服务器需用10G模块和线缆
100GQSFP2824
网线//8 
光纤多模10G /25G适用4 
多模100G适用12 
服务器/内存推荐8G以上2 
表2:硬件环境

3.3 软件环境

验证环境中涉及到的软件环境,如表3所示:

名称版本备注
iperf33.1.7 
CX532-NSONiC.201911.R0314P04 
CX308-NSONiC.201911.R0314P04 
服务器系统CentOS Linux 7.8.2003 
服务器内核3.10.0-1127.18.2.el7 
表3:软件环境

4 基础环境部署

在两台Server服务器上,安装部署本次验证方案的所需要的基础软件。

补充说明:以”[root@server ~]#”为开头的命令表示两台服务器都要执行。

4.1 LLDP

在两台Server服务器上安装LLDP服务,如果是X710网卡要求网卡驱动版本大于2.3.6,然后配置网卡开启LLDP。

[root@server ~]# yum -y install epel-release
[root@server ~]# yum -y install lldpd
[root@server ~]# systemctl start lldpd
[root@server ~]# systemctl enable lldpd
[root@server ~]# lspci |grep -i ether
配置网卡开启LLDP
[root@server ~]# ethtool -i ens1f2
[root@server ~]# ethtool -i ens1f3
ethtool -i ens1f2
 ethtool -i ens1f3
[root@sever ~]# ethtool --set-priv-flags ens1f2 disable-fw-lldp on
[root@sever ~]# ethtool --set-priv-flags ens1f3 disable-fw-lldp on

4.2 安装iPerf3 

在2台Server服务器上安装iPerf3软件用来打流。

在3台服务器上上执行:
[root@server ~]# yum -y install iperf3
[root@server ~]# iperf3 -v
iperf 3.1.7
Linux compute-2 3.10.0-1160.62.1.el7.x86_64 #1 SMP Tue Apr 5 16:57:59 UTC 2022 x86_64
Optional features available: CPU affinity setting, IPv6 flow label, TCP congestion algorithm setting, sendfile / zerocopy, socket pacing

4.3 检查链路连接

所有交换机设备要提前检查和Server服务器之间的链路连接情况,确保交换机设备和Server服务器之间的链路连接没有问题,以下命令在所有交换机设备上执行。

admin@sonic:~$ sudo config cli-mode cli
admin@sonic:~$ sudo sonic-cli
sonic#
Spine1# show lldp table
检查Spine1链路情况
Spine2# show lldp table
检查Spine2链路情况
Leaf1# show lldp table
检查Leaf1链路情况
Leaf2# show lldp table
检查Leaf2链路情况
Leaf3# show lldp table
检查Leaf3链路情况
Leaf4# show lldp table
检查Leaf4链路情况

5 组网环境配置   

5.1 逻辑拓扑

组网逻辑拓扑与接口配置
图2:组网逻辑拓扑与接口配置

5.2 Spine1

5.2.1 设备恢复出厂设置

配置思科命令行,恢复Spine1设备到出厂设置。

Spine1@sonic:~$ sudo config cli-mode cli
Spine1@sonic:~$ sudo sonic-cli
sonic# delete startup-config
sonic# reload

5.2.2 配置Spine1 接口IP

在Spine1交换机上配置与4台Leaf交换机的互联接口IP。

Spine1# configure terminal
Spine1(config)# interface ethernet 0/0
Spine1(config-if-0/0)# ip address 10.0.10.2/24
Spine1(config)# interface ethernet 0/4
Spine1(config-if-0/4)# ip address 10.0.11.2/24
Spine1(config)# interface ethernet 0/8
Spine1(config-if-0/8)# ip address 10.0.12.2/24
Spine1(config)# interface ethernet 0/12
Spine1(config-if-0/12)# ip address 10.0.13.2/24

5.2.3 配置Spine1 的BGP

在Spine1交换机上配置4台Leaf交换机的BGP邻居。

Spine1# configure terminal
Spine1(config)# router bgp 65003     
Spine1(config-router)# bgp router-id 10.10.0.3
Spine1(config)# interface loopback 0
Spine1(config-loif-0)# ip address 10.10.0.3/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.3/32
Loopback ip will be used as bgp router-id in frr
Spine1(config)# router bgp 65003
Spine1(config-router)# no bgp ebgp-requires-policy 
Spine1(config-router)# neighbor 10.0.10.1 remote-as 65007
Spine1(config-router)# neighbor 10.0.11.1 remote-as 65007
Spine1(config-router)# neighbor 10.0.12.1 remote-as 65008
Spine1(config-router)# neighbor 10.0.13.1 remote-as 65008
Spine1(config-router)# address-family l2vpn evpn
Spine1(config-router-af)# neighbor 10.0.10.1 activate
Spine1(config-router-af)# neighbor 10.0.11.1 activate
Spine1(config-router-af)# neighbor 10.0.12.1 activate
Spine1(config-router-af)# neighbor 10.0.13.1 activate
Spine1(config-router-af)# advertise-all-vni
Spine1(config)# write
Spine1(config)# reload

5.3 Spine2

5.3.1 设备恢复出厂设置

配置思科命令行,恢复Spine2设备到出厂设置。

Spine2@sonic:~$ sudo config cli-mode cli
Spine2@sonic:~$ sudo sonic-cli
sonic# delete startup-config
sonic# reload

5.3.2 配置Spine2接口IP

在Spine2交换机上配置与4台Leaf交换机的互联接口IP。

Spine2# configure terminal
Spine2(config)# interface ethernet 0/0
Spine2(config-if-0/0)# ip address 10.1.10.2/24
Spine2(config)# interface ethernet 0/4
Spine2(config-if-0/4)# ip address 10.1.11.2/24
Spine2(config)# interface ethernet 0/8
Spine2(config-if-0/8)# ip address 10.1.12.2/24
Spine2(config)# interface ethernet 0/12
Spine2(config-if-0/12)# ip address 10.1.13.2/24

5.3.3 配置Spine2的BGP

在Spine2交换机上配置4台Leaf交换机的BGP邻居。

Spine2# configure terminal
Spine2(config)# router bgp 65004
Spine2(config-router)# bgp router-id 10.10.0.4
Spine2(config)# interface loopback 0
Spine2(config-loif-0)# ip address 10.10.0.4/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.3/32
Loopback ip will be used as bgp router-id in frr
Spine2(config)# router bgp 65004
Spine2(config-router)# no bgp ebgp-requires-policy 
Spine2(config-router)# neighbor 10.1.10.1 remote-as 65007
Spine2(config-router)# neighbor 10.1.11.1 remote-as 65007
Spine2(config-router)# neighbor 10.1.12.1 remote-as 65008
Spine2(config-router)# neighbor 10.1.13.1 remote-as 65008
Spine2(config-router)# address-family l2vpn evpn
Spine2(config-router-af)# neighbor 10.1.10.1 activate
Spine2(config-router-af)# neighbor 10.1.11.1 activate
Spine2(config-router-af)# neighbor 10.1.12.1 activate
Spine2(config-router-af)# neighbor 10.1.13.1 activate
Spine2(config-router-af)# advertise-all-vni
Spine2(config)# write
Spine2(config)# reload

5.4 Leaf1

5.4.1 设备恢复出厂设置

恢复Leaf1设备到出厂设置。

Leaf1# delete startup-config
Leaf1# reload

5.4.2 配置Leaf1端口速率

配置Leaf1交换机的Ethernet0口速率为10G。

Leaf1# configure terminal 
Leaf1(config)# interface ethernet 0/0  
Leaf1(config-if-0/0)# speed 10000
Leaf1(config-if-0/0)# show this
!
interface ethernet 0/0
speed 10000

5.4.3 配置Leaf1接口IP

在Leaf1交换机上配置与Leaf、Spine交换机的互联接口IP以及PortChannel、VLAN信息。

Leaf1# configure terminal 
Leaf1(config)# interface ethernet 0/48
Leaf1(config-if-0/48)# ip address 10.0.10.1/24
Leaf1(config)# interface ethernet 0/52
Leaf1(config-if-0/52)# ip address 10.1.10.1/24
Leaf1(config)# interface link-aggregation 1
Leaf1(config)# interface link-aggregation 3
Leaf1(config)# interface ethernet 0/0
Leaf1(config-if-0/0)# link-aggregation-group 1
Leaf1(config-if-0/0)# interface ethernet 0/56
Leaf1(config-if-0/56)# link-aggregation-group 3
Leaf1(config-if-0/56)# interface ethernet 0/60
Leaf1(config-if-0/60)# link-aggregation-group 3
Leaf1(config)# vlan 10
Leaf1(config)# interface vlan 10
Leaf1(config-vlanif-10)# ip address 100.0.10.1/24
Leaf1(config)# interface link-aggregation 1
Leaf1(config-lagif-1)# switchport access vlan 10
Leaf1(config)# interface link-aggregation 3
Leaf1(config-lagif-3)# switchport trunk vlan 10

5.4.4 配置Leaf1的MC-LAG

在Leaf1交换机上配置与Leaf2交换机互联接口的MC-LAG。

Leaf1# configure terminal 
Leaf1(config)# vlan 30
Leaf1(config)# interface link-aggregation 3
Leaf1(config-lagif-3)# switchport trunk vlan 30
Leaf1(config)# interface vlan 30
Leaf1(config-vlanif-30)# ip address 11.0.0.6/24
Leaf1(config)# mclag domain 1
Leaf1(mclag-domain)# peer-link link-aggregation 3 
Leaf1(mclag-domain)# local-address 11.0.0.6   
Leaf1(mclag-domain)# peer-address 11.0.0.7
Leaf1(mclag-domain)# member lag 1
Leaf1(mclag-domain)# commit
Leaf1(config)# interface vlan 10
Leaf1(config-vlanif-10)# mac-address 18:17:25:37:64:40

5.4.5 配置Leaf1的BGP

在Leaf1交换机上配置2台Spine交换机的BGP邻居。

Leaf1# configure terminal 
Leaf1(config)# router bgp 65007
Leaf1(config-router)# bgp router-id 10.10.0.7
Leaf1(config)# interface loopback 0
Leaf1(config-loif-0)# ip address 10.10.0.7/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.7/32
Loopback ip will be used as bgp router-id in frr
Leaf1(config)# router bgp 65007
Leaf1(config-router)# no bgp ebgp-requires-policy
Leaf1(config-router)# neighbor 10.0.10.2 remote-as 65003
Leaf1(config-router)# neighbor 10.1.10.2 remote-as 65004
Leaf1(config-router)# address-family ipv4 unicast
Leaf1(config-router)# network 10.10.0.7/32
Leaf1(config-router)# address-family l2vpn evpn
Leaf1(config-router-af)# neighbor 10.0.10.2 activate
Leaf1(config-router-af)# neighbor 10.1.10.2 activate
Leaf1(config-router-af)# advertise-all-vni

5.4.6 配置Leaf1 的EVPN

在Leaf1交换机上配置EVPN、创建VNET,建立二三层VXLAN映射。

Leaf1# configure terminal
Leaf1(config)# interface vxlan 0
Leaf1(config-vxlanif-0)# source 10.10.0.7
Leaf1(config)# evpn-overlay enable
Leaf1(config)# vrf 123
Leaf1(config-vrf)# mac 60:eb:5a:00:86:20
Leaf1(config-vrf)# interface vlan 10
Leaf1(config-vlanif-10)# vrf 123
Leaf1(config)# vlan 10
Leaf1(config-vlan-10)# vni 10
Leaf1(config)# vrf 123
Leaf1(config-vrf)# vni 1000
Leaf1(config)# write
Leaf1(config)# reload

5.5 Leaf2

5.5.1 设备恢复出厂设置

恢复Leaf2设备到出厂设置。

Leaf2# delete startup-config
Leaf2# reload

5.5.2 配置Leaf2 端口速率

配置Leaf2交换机的Ethernet0口速率为10G。

Leaf2# configure terminal 
Leaf2(config)# interface ethernet 0/0 
Leaf2(config-if-0/0)# speed 10000
Leaf2(config-if-0/0)# show this
!
interface ethernet 0/0
speed 10000

5.5.3 配置Leaf2接口IP

在Leaf2交换机上配置与Leaf、Spine交换机的互联接口IP以及PortChannel、VLAN信息。

Leaf2# configure terminal 
Leaf2(config)# interface ethernet 0/48
Leaf2(config-if-0/48)# ip address 10.0.11.1/24
Leaf2(config)# interface ethernet 0/52
Leaf2(config-if-0/52)# ip address 10.1.11.1/24
Leaf2(config) interface link-aggregation 1
Leaf2(config) interface link-aggregation 3
Leaf2(config)# interface ethernet 0/0     
Leaf2(config-if-0/0)# link-aggregation-group 1
Leaf2(config-if-0/0)# interface ethernet 0/56
Leaf2(config-if-0/56)# link-aggregation-group 3
Leaf2(config-if-0/56)# interface ethernet 0/60
Leaf2(config-if-0/60)# link-aggregation-group 3
Leaf2(config)# vlan 10
Leaf2(config)# interface vlan 10
Leaf2(config-vlanif-10)# ip address 100.0.10.1/24
Leaf2(config)# interface link-aggregation 1
Leaf2(config-lagif-1)# switchport access vlan 10
Leaf2(config)# interface link-aggregation 3
Leaf2(config-lagif-3)# switchport trunk vlan 10

5.5.4 配置Leaf2的MC-LAG

在Leaf2交换机上配置与Leaf1交换机互联接口的MC-LAG。

Leaf2# configure terminal 
Leaf2(config)# vlan 30
Leaf2(config)# interface link-aggregation 3
Leaf2(config-lagif-3)# switchport trunk vlan 30
Leaf2(config)# interface vlan 30
Leaf2(config-vlanif-30)# ip address 11.0.0.7/24
Leaf2(config)# mclag domain 1
Leaf2(mclag-domain)# peer-link link-aggregation 3 
Leaf2(mclag-domain)# local-address 11.0.0.7   
Leaf2(mclag-domain)# peer-address 11.0.0.6
Leaf2(mclag-domain)# member lag 1
Leaf2(mclag-domain)# commit
Leaf2(config)# interface vlan 10
Leaf2(config-vlanif-10)# mac-address 18:17:25:37:64:40

5.5.5 配置Leaf2的BGP

在Leaf2交换机上配置2台Spine交换机的BGP邻居。

Leaf2# configure terminal 
Leaf2(config)# router bgp 65007
Leaf2(config-router)# bgp router-id 10.10.0.7
Leaf2(config)# interface loopback 0
Leaf2(config-loif-0)# ip address 10.10.0.7/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.7/32
Loopback ip will be used as bgp router-id in frr
Leaf2(config)# router bgp 65007
Leaf2(config-router)# no bgp ebgp-requires-policy
Leaf2(config-router)# neighbor 10.0.11.2 remote-as 65003
Leaf2(config-router)# neighbor 10.1.11.2 remote-as 65004
Leaf2(config-router)# address-family ipv4 unicast
Leaf2(config-router)# network 10.10.0.7/32
Leaf2(config-router)# address-family l2vpn evpn
Leaf2(config-router-af)# neighbor 10.0.11.2 activate
Leaf2(config-router-af)# neighbor 10.1.11.2 activate
Leaf2(config-router-af)# advertise-all-vni

5.5.6 配置Leaf2 的EVPN

在Leaf2交换机上配置EVPN、创建VNET,建立二三层VXLAN映射。

Leaf2# configure terminal
Leaf2(config)# interface vxlan 0
Leaf2(config-vxlanif-0)# source 10.10.0.7
Leaf2(config)# evpn-overlay enable
Leaf2(config)# vrf 123
Leaf2(config-vrf)# mac 60:eb:5a:00:86:20
Leaf2(config-vrf)# interface vlan 10
Leaf2(config-vlanif-10)# vrf 123
Leaf2(config)# vlan 10
Leaf2(config-vlan-10)# vni 10
Leaf2(config)# vrf 123
Leaf2(config-vrf)# vni 1000
Leaf2(config)# write
Leaf2(config)# reload

5.6 Leaf3

5.6.1 设备恢复出厂设置

恢复Leaf3设备到出厂设置。

Leaf3# delete startup-config
Leaf3# reload

5.6.2 配置Leaf3 端口速率

配置Leaf3交换机的Ethernet0口速率为10G。

Leaf3# configure terminal 
Leaf3(config)# interface ethernet 0/0
Leaf3(config-if-0/0)# speed 10000
Leaf3(config-if-0/0)# show this
!
interface ethernet 0/0
speed 10000

5.6.3 配置Leaf3接口IP

在Leaf3交换机上配置与Leaf、Spine交换机的互联接口IP以及PortChannel、VLAN信息。

Leaf3# configure terminal 
Leaf3(config)# interface ethernet 0/48
Leaf3(config-if-0/48)# ip address 10.0.12.1/24
Leaf3(config)# interface ethernet 0/52
Leaf3(config-if-0/52)# ip address 10.1.12.1/24
Leaf3(config) interface link-aggregation 1
Leaf3(config) interface link-aggregation 3
Leaf3(config)# interface ethernet 0/0 
Leaf3(config-if-0/0)# link-aggregation-group 1
Leaf3(config-if-0/0)# interface ethernet 0/56
Leaf3(config-if-0/56)# link-aggregation-group 3
Leaf3(config-if-0/56)# interface ethernet 0/60
Leaf3(config-if-0/60)# link-aggregation-group 3
Leaf3(config)# vlan 20
Leaf3(config)# interface vlan 20
Leaf3(config-vlanif-20)# ip address 100.0.20.1/24
Leaf3(config)# interface link-aggregation 1
Leaf3(config-lagif-1)# switchport access vlan 20
Leaf3(config)# interface link-aggregation 3
Leaf3(config-lagif-3)# switchport trunk vlan 20

5.6.4 配置Leaf3的MC-LAG

在Leaf3交换机上配置与Leaf4交换机互联接口的MC-LAG。

Leaf3(config)# vlan 30
Leaf3(config)# interface link-aggregation 3
Leaf3(config-lagif-3)# switchport trunk vlan 30
Leaf3(config)# interface vlan 30
Leaf3(config-vlanif-30)# ip address 11.0.0.8/24
Leaf3(config)# mclag domain 1
Leaf3(mclag-domain)# peer-link link-aggregation 3 
Leaf3(mclag-domain)# local-address 11.0.0.8 
Leaf3(mclag-domain)# peer-address 11.0.0.9
Leaf3(mclag-domain)# member lag 1
Leaf3(mclag-domain)# commit
Leaf3(config)# interface vlan 20
Leaf3(config-vlanif-20)# mac-address 18:17:25:37:64:32

5.6.5 配置Leaf3的BGP

在Leaf3交换机上配置2台Spine交换机的BGP邻居。

Leaf3(config)# router bgp 65008
Leaf3(config-router)# bgp router-id 10.10.0.8
Leaf3(config)# interface loopback 0
Leaf3(config-loif-0)# ip address 10.10.0.8/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.8/32
Loopback ip will be used as bgp router-id in frr
Leaf3(config)# router bgp 65008
Leaf3(config-router)# no bgp ebgp-requires-policy
Leaf3(config-router)# neighbor 10.0.12.2 remote-as 65003
Leaf3(config-router)# neighbor 10.1.12.2 remote-as 65004
Leaf3(config-router)# address-family ipv4 unicast
Leaf3(config-router)# network 10.10.0.8/32
Leaf3(config-router)# address-family l2vpn evpn
Leaf3(config-router-af)# neighbor 10.0.12.2 activate
Leaf3(config-router-af)# neighbor 10.1.12.2 activate
Leaf3(config-router-af)# advertise-all-vni

5.6.6 配置Leaf3 的EVPN

在Leaf3交换机上配置EVPN、创建VNET,建立二三层VXLAN映射。

Leaf3# configure terminal
Leaf3(config)# interface vxlan 0
Leaf3(config-vxlanif-0)# source 10.10.0.8
Leaf3(config)# evpn-overlay enable
Leaf3(config)# vrf 456
Leaf3(config-vrf)# mac 60:eb:5a:00:86:22
Leaf3(config-vrf)# interface vlan 20
Leaf3(config-vlanif-10)# vrf 456
Leaf3(config)# vlan 20
Leaf3(config-vlan-10)# vni 20
Leaf3(config)# vrf 456
Leaf3(config-vrf)# vni 1000
Leaf3(config)# write
Leaf3(config)# reload

5.7 Leaf4

5.7.1 设备恢复出厂设置

恢复Leaf4设备到出厂设置。

Leaf4# delete startup-config
Leaf4# reload

5.7.2 配置Leaf4 端口速率

配置Leaf4交换机的Ethernet0口速率为10G。

Leaf4# configure terminal 
Leaf4(config)# interface ethernet 0/0
Leaf4(config-if-0/0)# speed 10000
Leaf4(config-if-0/0)# show this
!
interface ethernet 0/0
speed 10000

5.7.3 配置Leaf4接口IP

在Leaf4交换机上配置与Leaf、Spine交换机的互联接口IP以及PortChannel、VLAN信息。

Leaf4# configure terminal 
Leaf4(config)# interface ethernet 0/48
Leaf4(config-if-0/48)# ip address 10.0.13.1/24
Leaf4(config)# interface ethernet 0/52
Leaf4(config-if-0/52)# ip address 10.1.13.1/24
Leaf4(config) interface link-aggregation 1
Leaf4(config) interface link-aggregation 3
Leaf4(config)# interface ethernet 0/0    
Leaf4(config-if-0/0)# link-aggregation-group 1
Leaf4(config-if-0/0)# interface ethernet 0/56
Leaf4(config-if-0/56)# link-aggregation-group 3
Leaf4(config-if-0/56)# interface ethernet 0/60
Leaf4(config-if-0/60)# link-aggregation-group 3
Leaf4(config)# vlan 20
Leaf4(config)# interface vlan 20
Leaf4(config-vlanif-20)# ip address 100.0.20.1/24
Leaf4(config)# interface link-aggregation 1
Leaf4(config-lagif-1)# switchport access vlan 20
Leaf4(config)# interface link-aggregation 3
Leaf4(config-lagif-3)# switchport trunk vlan 20

5.7.4 配置Leaf4的MC-LAG

在Leaf4交换机上配置与Leaf3交换机互联接口的MC-LAG。

Leaf4(config)# vlan 30
Leaf4(config)# interface link-aggregation 3
Leaf4(config-lagif-3)# switchport trunk vlan 30
Leaf4(config)# interface vlan 30
Leaf4(config-vlanif-30)# ip address 11.0.0.9/24
Leaf4(config)# mclag domain 1
Leaf4(mclag-domain)# peer-link link-aggregation 3 
Leaf4(mclag-domain)# local-address 11.0.0.9
Leaf4(mclag-domain)# peer-address 11.0.0.8
Leaf4(mclag-domain)# member lag 1
Leaf4(mclag-domain)# commit
Leaf4(config)# interface vlan 20
Leaf4(config-vlanif-20)# mac-address 18:17:25:37:64:32

5.7.5 配置Leaf4的BGP

在Leaf4交换机上配置2台Spine交换机的BGP邻居。

Leaf4(config)# router bgp 65008
Leaf4(config-router)# bgp router-id 10.10.0.8
Leaf4(config)# interface loopback 0
Leaf4(config-loif-0)# ip address 10.10.0.8/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.8/32
Loopback ip will be used as bgp router-id in frr
Leaf4(config)# router bgp 65008
Leaf4(config-router)# no bgp ebgp-requires-policy
Leaf4(config-router)# neighbor 10.0.13.2 remote-as 65003
Leaf4(config-router)# neighbor 10.1.13.2 remote-as 65004
Leaf4(config-router)# address-family ipv4 unicast
Leaf4(config-router)# network 10.10.0.8/32
Leaf4(config-router)# address-family l2vpn evpn
Leaf4(config-router-af)# neighbor 10.0.13.2 activate
Leaf4(config-router-af)# neighbor 10.1.13.2 activate
Leaf4(config-router-af)# advertise-all-vni

5.7.6 配置Leaf4 的EVPN

在Leaf4交换机上配置EVPN、创建VNET,建立二三层VXLAN映射。

Leaf4# configure terminal
Leaf4(config)# interface vxlan 0
Leaf4(config-vxlanif-0)# source 10.10.0.8
Leaf4(config)# evpn-overlay enable
Leaf4(config)# vrf 456
Leaf4(config-vrf)# mac 60:eb:5a:00:86:22
Leaf4(config-vrf)# interface vlan 20
Leaf4(config-vlanif-10)# vrf 456
Leaf4(config)# vlan 20
Leaf4(config-vlan-10)# vni 20
Leaf4(config)# vrf 456
Leaf4(config-vrf)# vni 1000
Leaf4(config)# write
Leaf4(config)# reload

更多内容请参考:A-Lab

基于Asterfusion CX-N设备部署BGP-EVPN-VXLAN

1 目标与物理网络拓扑

本文主要描述如何在Asterfusion CX308P-N和CX532P-N(以下简称CX308和CX532)搭建的网络上部署如下解决方案:

  • BGP EVPNVXLAN

在网络上承载VXLAN网络,将原本在服务器上进行的封装、去封装全部从Server端卸载到CX308内的VTEP上,并且在网络上启动BGP EVPN,自动化地创建VXLAN隧道、传递虚拟网络路由。

如上解决方案共用一个物理拓扑,如图1所示:

物理网络拓扑
图1:物理网络拓扑

部署过程中所涉及到的设备、接口及管理网口的IP地址如下表1所示:

设备名称设备型号IP地址备注
Spine1CX532-N10.230.1.7 
Spine2CX532-N10.230.1.8 
Leaf1CX308-N10.230.1.18 
Leaf2CX308-N10.230.1.19 
Servrr1X8610.230.1.11互联网口ens1f2
Server2X8610.230.1.12互联网口ens1f3
表1:设备管理口列表

2 硬件与软件环境

部署环境中涉及到的硬件和软件如表2和表3所示:

名称型号硬件指标数量备注
交换机CX532-N【参见产品彩页】2
交换机CX308-N【参见产品彩页】2
服务器X862本方案采用10G网卡
光模块10GSFP+4
光模块100GQSFP2812
光纤多模100G适用6
光纤多模10G/25G适用2
表2:硬件环境

名称版本备注
AFCV5.0.0
服务器系统CentOS Linux 7.9.2009
服务器内核3.10.0-1127.18.2.el7
表3:软件环境

3 解决方案:BGP EVPN和VXLAN

3.1 逻辑组网与配置思路

BGP EVPN和VXLAN方案网络拓扑与接口配置
图3:BGP EVPN和VXLAN方案网络拓扑与接口配置

配置思路:

1)配置各交换机的端口IP信息

2)配置Leaf1和Leaf2的VLAN信息

3)配置各交换机的BGP

4)配置Leaf1和Leaf2使能EVPN

5)Leaf1和Leaf2创建Vnet,绑定VLAN

6)Leaf1和Leaf2配置二层和三层VXLAN映射

7)配置Server1和Server2的IP和路由信息

8)测试Server1和Server2的连通性

9)查看Leaf1的路由信息

10)查看Leaf2的路由信息

3.2 配置步骤

3.2.1 配置各交换机的端口IP信息

Spine1:
Spine1# configure terminal
Spine1(config)# interface ethernet 0/4
Spine1(config-if-0/4)# ip address 10.0.10.2/24
Spine1(config)# interface ethernet 0/8
Spine1(config-if-0/8)# ip address 10.0.11.2/24

Spine2:
Spine2# configure terminal
Spine2(config)# interface ethernet 0/4
Spine2(config-if-0/4)# ip address 10.1.10.2/24
Spine2(config)# interface ethernet 0/8
Spine2(config-if-0/8)# ip address 10.1.11.2/24

Leaf1:
Leaf1# configure terminal
Leaf1(config)# interface ethernet 0/48
Leaf1(config-if-0/4)# ip address 10.0.10.1/24
Leaf1(config)# interface ethernet 0/52
Leaf1(config-if-0/8)# ip address 10.1.10.1/24

Leaf2:
Leaf2# configure terminal
Leaf2(config)# interface ethernet 0/48
Leaf2(config-if-0/4)# ip address 10.0.11.1/24
Leaf2(config)# interface ethernet 0/52
Leaf2(config-if-0/8)# ip address 10.1.11.1/24
sudo config interface ip add Ethernet52 10.1.11.1/24

3.2.2 配置Leaf1和Leaf2的VLAN信息并配置好网口速率

Leaf1:
Leaf1# configure terminal 
Leaf1(config)# vlan 10
Leaf1(config)# interface vlan 10
Leaf1(config-vlanif-10)# ip address 100.0.10.1/24
Leaf1(config-vlanif-10)# mac-address 18:17:25:55:17:69
Leaf1(config)# interface ethernet 0/2
Leaf1(config-if-0/2)# switchport access vlan 10
Leaf1(config-if-0/2)# speed 10000

Leaf2:
Leaf2# configure terminal 
Leaf2(config)# vlan 20
Leaf2(config)# interface vlan 20
Leaf2(config-vlanif-20)# ip address 100.0.20.1/24
Leaf2(config-vlanif-20)# mac-address 18:17:25:55:17:71
Leaf2(config)# interface ethernet 0/3
Leaf2(config-if-0/3)# switchport access vlan 20
Leaf2(config-if-0/3)# speed 10000

3.2.3 配置各交换机的BGP

Spine1:
Spine1# configure terminal
Spine1(config)# router bgp 65228
Spine1(config-router)# bgp router-id 10.10.0.100
Spine1(config)# interface loopback 0
Spine1(config-loif-0)# ip address 10.10.0.100/32
Loopback ip will be used as bgp router-id in frr
Spine1(config)# router bgp 65228
Spine1(config-router)# no bgp ebgp-requires-policy 
Spine1(config-router)# neighbor 10.0.10.1 remote-as 65230
Spine1(config-router)# neighbor 10.0.11.1 remote-as 65231
Spine1(config-router)# address-family ipv4 unicast
Spine1(config-router)# address-family l2vpn evpn
Spine1(config-router-af)# neighbor 10.0.10.1 activate
Spine1(config-router-af)# neighbor 10.0.11.1 activate
Spine1(config-router-af)# advertise-all-vni

Spine2:
Spine1# configure terminal
Spine1(config)# router bgp 65229
Spine1(config-router)# bgp router-id 10.10.0.110
Spine1(config)# interface loopback 0
Spine1(config-loif-0)# ip address 10.10.0.110/32
Loopback ip will be used as bgp router-id in frr
Spine1(config)# router bgp 65229
Spine1(config-router)# no bgp ebgp-requires-policy 
Spine1(config-router)# neighbor 10.1.10.1 remote-as 65230
Spine1(config-router)# neighbor 10.1.11.1 remote-as 65231
Spine1(config-router)# address-family ipv4 unicast
Spine1(config-router)# address-family l2vpn evpn
Spine1(config-router-af)# neighbor 10.1.10.1 activate
Spine1(config-router-af)# neighbor 10.1.11.1 activate
Spine1(config-router-af)# advertise-all-vni

Leaf1:
Leaf1# configure terminal 
Leaf1(config)# router bgp 65230
Leaf1(config-router)# bgp router-id 10.10.0.120
Leaf1(config)# interface loopback 0
Leaf1(config-loif-0)# ip address 10.10.0.120/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.120/32
Loopback ip will be used as bgp router-id in frr
Leaf1(config)# router bgp 65230
Leaf1(config-router)# no bgp ebgp-requires-policy
Leaf1(config-router)# neighbor 10.0.10.2 remote-as 65228
Leaf1(config-router)# neighbor 10.1.10.2 remote-as 65229
Leaf1(config-router)# address-family ipv4 unicast
Leaf1(config-router)# network 10.10.0.120/32
Leaf1(config-router)# address-family l2vpn evpn
Leaf1(config-router-af)# neighbor 10.0.10.2 activate
Leaf1(config-router-af)# neighbor 10.1.10.2 activate
Leaf1(config-router-af)# advertise-all-vni

Leaf2:
Leaf2# configure terminal
Leaf2(config)# router bgp 65231
Leaf2(config-router)# bgp router-id 10.10.0.130
Leaf2(config)# interface loopback 0
Leaf2(config-loif-0)# ip address 10.10.0.130/32
Change Loopback0 ip from 10.1.0.1/32 to 10.10.0.130/32
Loopback ip will be used as bgp router-id in frr
Leaf2(config)# router bgp 65231
Leaf2(config-router)# no bgp ebgp-requires-policy
Leaf2(config-router)# neighbor 10.0.11.2 remote-as 65228
Leaf2(config-router)# neighbor 10.1.11.2 remote-as 65229
Leaf2(config-router)# address-family ipv4 unicast
Leaf2(config-router)# network 10.10.0.130/32
Leaf2(config-router)# address-family l2vpn evpn
Leaf2(config-router-af)# neighbor 10.0.11.2 activate
Leaf2(config-router-af)# neighbor 10.1.11.2 activate
Leaf2(config-router-af)# advertise-all-vni

3.2.4 配置Leaf1和Leaf2使能EPVN

Leaf1:
Leaf1# configure terminal
Leaf1(config)# interface vxlan 0
Leaf1(config-vxlanif-0)# source 10.10.0.120
Leaf1(config)# evpn-overlay enable

Leaf2:
Leaf2# configure terminal
Leaf2(config)# interface vxlan 0
Leaf2(config-vxlanif-0)# source 10.10.0.130
Leaf2(config)# evpn-overlay enable

3.2.5 Leaf1和Leaf2创建Vnet,绑定VLAN

Leaf1:
Leaf1(config)# vrf 123
Leaf1(config-vrf)# mac 18:17:25:55:17:69
Leaf1(config-vrf)# interface vlan 10
Leaf1(config-vlanif-10)# vrf 123

Leaf2:
Leaf2(config)# vrf 456
Leaf2(config-vrf)# mac 18:17:25:55:17:71
Leaf2(config-vrf)# interface vlan 20
Leaf2(config-vlanif-20)# vrf 456

3.2.6 Leaf1和Leaf2配置二层和三层VXLAN映射

Leaf1:
Leaf1(config)# vlan 10
Leaf1(config-vlan-10)# vni 10
Leaf1(config)# vrf 123
Leaf1(config-vrf)# vni 1000

Leaf2:
Leaf2(config)# vlan 20
Leaf2(config-vlan-20)# vni 20
Leaf2(config)# vrf 456
Leaf2(config-vrf)# vni 1000

3.2.7 保存配置并重新加载

sonic# write
sonic# reload

3.2.8 配置Server1和Server2的IP和路由信息

Server1:


[root@server1 ~]# ifconfig ens1f2
配置Server1 IP和路由信息
[root@server1 ~]# route add -net 100.0.20.0 netmask 255.255.255.0 gw 100.0.10.1 dev ens1f2

Server2:

配置Server2 IP和路由信息
[root@server1 ~]# route add -net 100.0.10.0 netmask 255.255.255.0 gw 100.0.20.1 dev ens1f3

3.2.9 测试Server1和Server2的连通性

[root@server1 ~]# ping 100.0.20.3
ping 100.0.20.3
[root@server1 ~]# ping 100.0.10.2
ping 100.0.10.2

3.2.10 查看Leaf1的路由信息

查看VTEP信息
admin@Leaf1:~$ show evpn status
查看VTEP信息
交换机路由信息
admin@Leaf1:~$ ip route show
交换机路由信息
下面信息显示Server2的路由转发到了Leaf1
admin@Leaf1:~$ ip neigh show nud all | grep Vlan
Server2的路由转发到了Leaf1
admin@Leaf1:~$ sudo bridge fdb |grep vxlan
 sudo bridge fdb |grep vxlan
admin@Leaf1:~$ show ip route vrf Vnet123
show ip route vrf Vnet123

3.2.11 查看Leaf2的路由信息

查看VTEP信息
admin@Leaf2:~$ show evpn status
查看VTEP信息
交换机路由信息
admin@Leaf2:~$ ip route show
交换机路由信息
下面信息显示Server2的路由转发到了Leaf1
admin@Leaf2:~$ ip neigh show nud all | grep Vlan
Server2的路由转发到了Leaf1
admin@Leaf2:~$ sudo bridge fdb |grep vxlan
sudo bridge fdb |grep vxlan
admin@Leaf2:~$ show ip route vrf Vnet123
show ip route vrf Vnet123

4 解决方案:AFC配置BGP和EVPN

4.1 逻辑组网与配置思路

AFC配置BGP EVPN方案网络拓扑与接口配置
图5:AFC配置BGP EVPN方案网络拓扑与接口配置

配置思路:

1)配置设备的命令行模式

2)在Server2服务器上安装AFC软件,并在AFC Web上导入软件许可

3)在AFC上自动发现物理设备

4)在AFC上自动发现物理设备间的单向和双向链路

5)在AFC上创建Fabric,选择组网类型为Spine/Leaf

6)初始化环境确认

7)在AFC上配置设备BGP邻居

8)应用配置,AFC会自动下发配置到物理设备

9)在AFC上创建租户信息

10)在AFC上创建VPC组

11)在AFC上创建虚拟路由器  

12)在AFC上创建虚拟交换机

13)在AFC上创建虚拟端口

14)测试Server1和Server2的连通性

15)查看Leaf1的路由信息

16)查看Leaf2的路由信息

4.2 配置步骤

4.2.1 安装AFC软件

下载AFC-NPB-V5.0.0软件包,在Server2服务器上安装AFC软件。具体操作请查看《AFC-NPB安装手册》,AFC安装完成之后,打开AFC Web端上传软件许可。

AFC登录界面
AFC软件许可

4.2.2 自动发现设备

【快速部署】—>【物理网络】—>【发现设备】

输入设备的起始和终止IP(10.230.1.7~10.230.1.8),(10.230.1.18~10.230.1.19)开始扫描。

4.2.3 自动发现链路

【快速部署】—>【物理网络】—>【发现链路】

自动发现链路,默认发现所有设备互联链路。

4.2.4 创建Fabric

【快速部署】—>【物理网络】—>【新建和配置Fabric】—>【添加Fabric】

选择Spine/Leaf类型,输入名称,添加设备,分配设备角色,并配置组网出入口,完成创建。

新建Fabric

4.2.5 配置BGP邻居

【快速部署】—>【物理网络】—>【配置BGP】—>【同步设备邻居】

配置BGP邻居

4.2.6 应用配置

【快速部署】—>【物理网络】—>【完成部署】—>【应用配置】

完成应用配置,大概等3分钟,等待配置下发物理设备。

等待配置下发

4.2.7 创建租户信息

【虚拟网络】—>【独立部署场景】—>【租户】—>【新建租户】

新建租户,这里的租户代表用户本身,是配置网络的逻辑前提。

编辑租户

4.2.8 创建VPC

【虚拟网络】—>【独立部署场景】—>【VPC】—>【新建VPC】

新建VPC,选择租户和之前创建的Fabric组网。

编辑VPC

4.2.9 创建虚拟路由器

【虚拟网络】—>【独立部署场景】—>【VPC】—>【内部资源】—>【虚拟路由器】—>【新建虚拟路由器】

新建虚拟路由器,预设两台Leaf设备的三层VNI和Fabric子网信息。

编辑虚拟路由

4.2.10 创建虚拟交换机

【虚拟网络】—>【独立部署场景】—>【VPC】—>【内部资源】—>【虚拟交换机】—>【新建虚拟交换机】

新建虚拟交换机,在Leaf设备上创建VLAN,并配置二层VXLAN映射;允许绑定子网,并配置三层VXLAN映射。

编辑虚拟交换机

4.2.11 创建虚拟端口

【虚拟网络】—>【独立部署场景】—>【VPC】—>【内部资源】—>【虚拟端口】—>【新建虚拟端口】

新建虚拟端口,配置VLAN绑定的物理端口。

编辑虚拟端口

4.2.12 测试Server1和Server2的连通性 

[root@server1 ~]# ping 100.0.20.3
ping 100.0.20.3
[root@server2 ~]# ping 100.0.10.2
 ping 100.0.10.2

4.2.13 查看Leaf1的路由信息

查看VETP信息
admin@Leaf1:~$ show evpn status
查看VETP信息
查看交换机本身路由显示
admin@Leaf1:~$ ip route show
查看交换机本身路由显示
下面信息显示Server2的路由转发到了Leaf1
admin@Leaf1:~$ ip neigh show nud all|grep Vlan
Server2的路由转发到了Leaf1
Server2的路由转发到了Leaf1
admin@Leaf1:~$ show ip route vrf Vnet123
show ip route vrf Vnet123

4.2.14 查看Leaf2的路由信息

查看VETP信息
admin@Leaf2:~$ show evpn status
查看VETP信息
查看交换机本身路由显示
admin@Leaf2:~$ ip route show
查看VETP信息
下面信息显示Server2的路由转发到了Leaf2
admin@Leaf2:~$ ip neigh show nud all|grep Vlan
Server2的路由转发到了Leaf2
Server2的路由转发到了Leaf2
admin@Leaf2:~$ show ip route vrf Vnet456
show ip route vrf Vnet456

5 测试结果

  • Server1Server2之间使用交换机建立的VXLAN通道完成了通信;
  • Leaf1Leaf2对服务器之间的通信进行了VXLAN封装/去封装和L2/L3路由转发。

结论: VXLAN网络的封装、去封装可以从Server端卸载到CX308内的VTEP上,并且在网络上启动BGP EVPN,自动化地创建VXLAN隧道、传递虚拟网络路由。

更多内容请参考:A-Lab

Kubernetes-Cilium部署方案

Kubernetes-Cilium部署方案

1 Kubernetes-Cilium项目简介

Kubernetes-Cilium是一个基于eBPF和XDP的高性能容器网络方案的开源项目,目标是为微服务环境提供网络、负载均衡、安全功能,主要定位是容器平台。

2 Kubernetes-Cilium项目优势

Kubernetes-Cilium主要是基于eBPF的特性来实现的,eBPF和Cilium适合应对新时代下的云发起挑战的原因主要有以下三个:

  • 可编程性:eBPF的可编程性使得Cilium能够适应云的快速发展并轻松应对云规模的快速增长,并且eBPF的通用性对于任何特定于网络的可编程性解决方案(Iptables、OpenVswitch或Nftables)相比都是一个巨大的优势。
  • 嵌入到Linux内核:eBPF的可编程的独特性已经嵌入到了Linux内核中。应用程序使用系统调用通过网络进行交互,Linux内核负责处理这些系统调用,而为了使用户空间网络框架对应用程序保持透明,仍然需要遍历Linux内核的套接字层。而eBPF通过完全保留在内核中来避免这种情况。
  • 安全高效:直接加载Linux内核模块也可以提供非常高效率的可编程性,但主要的缺点也很明显:加载内核模块运行有缺陷的代码会直接让内核崩溃。而通过eBPF程序的验证程序验证,会比直接加载内核模块安全的多。同时通过JIT(Just-In-Time)的编译,可以确保eBPF字节码在物理机上的执行速度。

3 Kubernetes-Cilium项目架构

Cilium位于容器编排系统和Linux Kernel之间,向上可以通过容器编排系统为容器进行网络以及相应的安全策略进行配置,向下可以在Linux内核hook点挂载eBPF程序,来控制容器网络数据的转发以及安全策略的实施。

Cilium项目架构

4 Kubernetes-Cilium项目组件

Cilium项目组件

在Cilium的架构中,除了Key-Value数据存储之外,主要组件包括Cilium Agent和Cilium Operator,还有一个客户端的命令行工具Cilium CLI。

  • Etcd:负责Key-Value数据存储,与Cilium和Kubernetes共用一个Etcd数据库。
  • Cilium Agent:Cilium Agent作为整个架构中最核心的组件,通过DaemonSet的方式,运行在集群的每个主机上。Cilium Agent作为用户空间的守护程序,通过插件与容器运行时和容器编排系统进行交互,进而为本机上的容器进行网络以及安全的相关配置。同时提供了开放的API,供其他组件调用。
  • Cilium Operator:Cilium Operator主要负责管理集群中的任务,尽可能的保证以集群为单位,而不是单独的以节点为单位进行任务处理。主要包括通过Etcd为节点之间同步资源信息、确保Pod的DNS可以被Cilium管理、集群NetworkPolicy的管理和更新等。
  • Cilium Client:客户端的命令行工具,与运行在同一节点上的Cilium Agent的Rest API交互。Cilium Client允许检查本地的Agent状态,它还提供了直接访问eBPF Maps以验证其状态的工具。

5 节点配置

操作系统版本:CentOS Linux release 7.7.1908 (Core)

服务器具体配置要求如下:

主机名IP地址处理器内存硬盘节点角色
Minkube-kubernetes192.168.4.2324C8G50G 系统盘All in one
  • 内核版本大于4.15
  • 至少8G内存
  • 磁盘至少50G

6 系统优化

主机的优化不单纯只是软硬件的优化,基于操作系统的性能优化也是多方面的,可以从几个方面进行衡量,以更好的提高主机的性能。

6.1 关闭SELinux

SELinux不关闭的情况下无法实现,会限制ssh免密码登录。

[root@minikube  ~]# setenforce 0
[root@minikube  ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

6.2 关闭防火墙

防止安装时出现各个组件的端口不能访问的问题。

[root@minikube  ~]#systemctl stop firewalld && systemctl disable firewalld                          

6.3 时间同步

同步时间可以有效解决因时间不同而造成的不同步。

[root@localshot  ~]# yum -y install ntp
[root@minikube  ~]# ntpdate ntp1.aliyun.com
[root@minikube  ~]# timedatectl set-timezone Asia/Shanghai

6.4 修改系统打开文件最大数量

放开系统打开文件最大数量,防止因达到上限值而导致的进程终止。

[root@minikube  ~]# vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

7 升级内核

操作系统CentOS Linux release 7.7.1908 (Core)默认的内核版本为3.10.0不满足本次部署的内核版本最低需求,需要将内核升级到4.15版本及以上。最新版的内核可以在https://www.kernel.org/上找到。

7.1 更新Yum仓库

替换阿里云Yum源,并升级。

[root@minikube  ~]# rm /etc/yum.repos.d/*.repo
[root@minikube  ~]# wget -O \ 
/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@minikube  ~]# wget -O \
/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo	
[root@minikube  ~]# yum clean all && yum -y update

7.2 启用elrepo仓库

导入elrepo软件源的GPG公钥以及软件源,可以自动下载最新的软件列表,无需修改地址。

[root@minikube  ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@minikube  ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

7.3 安装最新版内核

[root@minikube  ~]# yum -y --disablerepo=* --enablerepo=elrepo-kernel install kernel-ml
[root@minikube  ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.14.2-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-a079ba97b7ea44e6b30e09b82f929e16) 7 (Core)

7.4 配置Grub配置文件

内核安装完成之后,需要将新内核设置为默认启动选项并重启后才会生效。

[root@minikube  ~]# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

[root@minikube  ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.14.2-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.14.2-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1062.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1062.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-a079ba97b7ea44e6b30e09b82f929e16
Found initrd image: /boot/initramfs-0-rescue-a079ba97b7ea44e6b30e09b82f929e16.img
done

7.5 重启验证

[root@minikube  ~]# reboot
[root@minikube  ~]# uname -r
5.14.2-1.el7.elrepo.x86_64

8 安装环境

MiniKube是一个快速搭建单节点Kubernetes集群的工具,可以在里面创建Pods来创建对应的服务,专注于让Kubernetes易于学习和开发。

8.1 安装Docker

本次部署使用Docker作为驱动,Docker版本要大于18.09。

[root@minikube  ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@minikube  ~]# yum-config-manager\
 --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@minikube  ~]# yum install docker-ce docker-ce-cli containerd.io
[root@minikube  ~]# systemctl enable docker
[root@minikube  ~]# systemctl start docker
[root@minikube  ~]# docker -v
Docker version 20.10.8, build 3967b7d

8.2 下载MiniKube

本次部署使用二进制的方式在x86-64 Linux上安装最新MiniKube稳定版本。

[root@minikube  ~]# curl -LO https://storage.googleapis.com//releases/latest/-linux-amd64
[root@minikube  ~]# install -linux-amd64 /usr/local/bin/
[root@minikube  ~]# minikube version
minikube version: v1.23.0
commit: 5931455374810b1bbeb222a9713ae2c756daee10

8.3 启动集群

使用Docker作为驱动程序,将Kubernetes安装到现有的Docker中,避免使用虚拟化。

[root@minikube  ~]# minikube start --driver=docker
[root@minikube  ~]# minikube config set driver docker
[root@minikube  ~]# minikube kubectl -- get po -A
[root@minikube  ~]# kubectl get po -A
命令行展示

9 安装Cilium

使用Cilium的CLI工具在MiniKube上安装Cilium。Cilium将自动检测集群配置并为成功部署的集群选择合适的组件。

9.1 下载Cilium

下载Cilium二进制安装包。

[root@minikube  ~]# curl -LO \
https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
[root@minikube  ~]# tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
[root@minikube  ~]# rm cilium-linux-amd64.tar.gz

9.2 安装Cilium

部署完Cilium的集群会将Pods添加到kube-system命名空间。

[root@minikube  ~]# cilium install
Auto-detected Kubernetes kind: 
Running "minikube" validation checks
Detected minikube version "1.23.0"
Cilium version not set, using default version "v1.10.0"
Auto-detected cluster name: 
Auto-detected IPAM mode: cluster-pool
Auto-detected datapath mode: tunnel
Generating CA...
2021/09/27 02:54:44 [INFO] generate received request
2021/09/27 02:54:44 [INFO] received CSR
2021/09/27 02:54:44 [INFO] generating key: ecdsa-256
2021/09/27 02:54:44 [INFO] encoded CSR
Generating certificates for Hubble...
2021/09/27 02:54:44 [INFO] generate received request
2021/09/27 02:54:44 [INFO] received CSR
2021/09/27 02:54:44 [INFO] generating key: ecdsa-256
2021/09/27 02:54:44 [INFO] encoded CSR
Creating Service accounts...
Creating Cluster roles...
Creating ConfigMap...
Creating Agent DaemonSet...
Creating Operator Deployment...
Waiting for Cilium to be installed...

9.3 验证Cilium组件

[root@minikube  ~]# kubectl get pods --namespace=kube-system -l k8s-app=cilium 
命令行展示
[root@minikube  ~]# kubectl get po -A
命令行展示

10 验证集群

创建一个Nginx Deployment并且通过服务暴露其端口来验证Kubernetes-Cilium集群的可用性。

10.1 创建Deployment Nginx

[root@minikube  ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created

10.2 创建Service Nginx

将Deployment Nginx的Service暴露出来。名为Nginx的Pod的Deployment和Service都位于Default命名空间中。

[root@minikube  ~]# kubectl expose deployment nginx --port 80
service/nginx exposed
[root@minikube  ~]# kubectl get svc,pod --namespace=default
命令行展示

10.3 通过Pod访问Nginx

创建一个其他的Pod访问Nginx服务,在Default命名空间中启动一个最小容器访问Nginx。

[root@minikube  ~]# kubectl run busybox --rm -ti --image=busybox /bin/sh
If you don't see a command prompt, try pressing enter.
/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.106.113.251:80)
remote file exists
命令行展示

10.4 创建Service Nginx3

以Deployment方式创建Nginx3 Pod,并将Deployment Nginx3的Service以NodePort方式暴露出来使用浏览器访问。

[root@minikube  ~]# kubectl create deployment nginx3 --image=nginx
[root@minikube  ~]# kubectl expose deployment nginx3 --type=NodePort --port=80
service/nginx exposed
[root@minikube  ~]# kubectl get svc 
命令行展示

10.5 通过浏览器访问Nginx3

通过浏览器访问Nginx3

11 参考资料

如有其它问题,请填写右侧需求表单联系我们。www.asterfusion.com

更多产品信息:AsterNOS

OpenStack+K8s+Ironic网络通信部署方案

1 目标

本文的目标是通过安装配置OpenStack-Ironic和Kuryr-kubernetes组件,实现OpenStack裸机与虚机的共存,以及整合OpenStack和Kubernetes的网络,实现网络的互通。

2 OpenStack-Ironic简介

OpenStack-Ironic与OpenStack-compute都是OpenStack的计算节点,其中Ironic与OpenStack集成提供裸金属管理服务,允许用户像管理虚拟机一样管理裸金属节点,其部署的裸金属节点指没有部署操作系统的物理服务器,相对于虚拟机,裸金属节点具有更强的计算能力、资源独占以及安全隔离等优点。

3 Kuryr-kubernetes简介

Kuryr-Kubernetes是一个用Python编写的OpenStack项目,它作为一个容器网络接口(CNI)插件,通过使用OpenStack Neutron和Octavia为Kubernetes pods提供网络。Kuryr-Kubernetes的主要优点之一是不需要在OpenStack和Kubernetes中使用多个软件定义网络(SDN)进行网络管理。使用Kuryr-kubernetes,能够实现虚机、裸金属和容器网络的统一管理,实现不同计算实体的通信。

4 硬件配置

主机系统网卡1:eno1网卡2:eno2IPMI管理口IPMI信息
Controller/K8s-masterCentos7.6192.168.4.220192.168.5.220  
Compute/K8s-nodeCentos7.6192.168.4.221   
OpenStack-IronicCentos7.6192.168.4.222   
Bare Metal   192.168.5.33ADMIN/tera123

服务器具体配置要求如下:

  • 2个千兆网口
  • 至少8G内存
  • 磁盘至少40G
  • 计算节点的BISO中开启CPU嵌套虚拟化(INTEL叫VT-x,AMD的叫AMD-V)

5 系统优化

主机的优化不单纯只是软硬件的优化,基于操作系统的性能优化也是多方面的,可以从几个方面进行衡量,以更好的提高主机的性能。

5.1 关闭SELinux(控制节点、计算节点)

SELinux不关闭的情况下无法实现,会限制ssh免密码登录。

[root@controller  ~]# setenforce 0
[root@controller  ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

5.2 关闭防火墙(控制节点、计算节点)

防止安装时出现各个组件的端口不能访问的问题。

[root@controller  ~]#systemctl stop firewalld && systemctl disable firewalld                          

5.3 时间同步(控制节点、计算节点)

同步时间可以有效解决因时间不同而造成的不同步。

[root@controller  ~]# yum -y install ntp
[root@controller  ~]# ntpdate ntp1.aliyun.com
[root@controller  ~]# timedatectl set-timezone Asia/Shanghai

5.4 修改系统打开文件最大数量(计算节点、控制节点)

放开系统打开文件最大数量,防止因达到上限值而导致的进程终止。

[root@controller  ~]# vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

5.5 降低Swap分区使用率(控制节点、计算节点)

现在服务器的内存一般是上百GB,所以我们可以把这个参数值设置的低一些(如10-30之间),让操作系统尽可能的使用物理内存,降低系统对swap的使用,从而提高宿主机系统和虚拟机的性能。

[root@controller  ~]# echo 'vm.swappiness=10' >>/etc/sysctl.conf

6 安装Kuryr-kubernetes

6.1 设置主机名,hosts文件(控制节点、计算节点)

控制节点

[root@controller  ~]#hostnamectl set-hostname controller
[root@controller  ~]#echo "controller"> /etc/hostname

计算节点根据节点名称修改

[root@compute  ~]#vim /etc/hosts
192.168.4.220 controller
192.168.4.221 compute

6.2 安装PIP(控制节点、计算节点)

因为在安装的过程会自动升级PIP至最新版本21.0,而PIP21.0在2021年初官方已经停止维护并且不再支持Python2和Python3,所以使用PIP21.0在安装的过程中会发生报错,必须降级安装指定版本PIP20.3.4。

官方链接:https://pip.pypa.io/en/stable/

[root@controller  ~]# wget https://bootstrap.pypa.io/2.7/get-pip.py
[root@controller  ~]# python get-pip.py
[root@controller  ~]# pip -V
pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (python 2.7)

6.3 安装PIP编译环境(控制节点、计算节点)

[root@controller  ~]# yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python

6.4 安装docker repo包(控制节点、计算节点)

[root@controller  ~]# tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
[root@controller  ~]#yum install -y docker-engine docker-engine-selinux

6.5 Git clone Devstack(控制节点、计算节点)

Devstack不允许直接使用Root用户运行,git拉取之后要先创建stack用户。

[root@controller  ~]# yum -y install git
[root@controller  ~]# git clone https://opendev.org/openstack-dev/devstack
[root@controller  ~]# git clone https://opendev.org/openstack/kuryr-kubernetes
[root@controller  ~]# ./devstack/tools/create-stack-user.sh
[root@controller  ~]# sudo su stack

6.6 修改配置文件(控制节点、计算节点)

修改各组件用户密码。

[root@controller  ~]# cp kuryr-kubernetes/devstack/local.conf.sample devstack/local.conf 
[root@controller  ~]# cat devstack/local.conf
# Credentials
ADMIN_PASSWORD=tera123
DATABASE_PASSWORD=tera123
RABBIT_PASSWORD=tera123
SERVICE_PASSWORD=tera123
SERVICE_TOKEN=tera123
# Enable Keystone v3
IDENTITY_API_VERSION=3
# In pro of speed and being lightweight, we will be explicit in regards to
# which services we enable
SERVICE_HOST=192.168.4.220
MYSQL_HOST=192.168.4.220
RABBIT_HOST=192.168.4.220
GLANCE_HOSTPORT=192.168.4.220:9292
Q_HOST=192.168.4.220
KEYSTONE_AUTH_HOST=192.168.4.220
KEYSTONE_SERVICE_HOST=192.168.4.220
CEILOMETER_BACKEND=mongodb
DATABASE_TYPE=mysql
ENABLED_SERVICES=n-cpu,n-net,n-api-meta,c-vol

6.7 Git clone拉取超时(控制节点、计算节点)

官方给出的Devstack脚本在安装的过程中Git clone是通过https加密获取的,可能会发生超时的问题,需要通过修改stackrc这个文件解决。

[root@controller  ~]# vi devstack/stackrc
BASE=${GIT_BASE:-http://opendev.org}
CINDER_REPO=${CINDER_REPO:-${GIT_BASE}/openstack/cinder.git}
CINDER_BRANCH=${CINDER_BRANCH:-$TARGET_BRANCH}
# image catalog service
GLANCE_REPO=${GLANCE_REPO:-${GIT_BASE}/openstack/glance.git}
GLANCE_BRANCH=${GLANCE_BRANCH:-$TARGET_BRANCH}
# django powered web control panel for openstack
HORIZON_REPO=${HORIZON_REPO:-${GIT_BASE}/openstack/horizon.git}
HORIZON_BRANCH=${HORIZON_BRANCH:-$TARGET_BRANCH}
# unified auth system (manages accounts/tokens)
KEYSTONE_REPO=${KEYSTONE_REPO:-${GIT_BASE}/openstack/keystone.git}
KEYSTONE_BRANCH=${KEYSTONE_BRANCH:-$TARGET_BRANCH}
# neutron service
NEUTRON_REPO=${NEUTRON_REPO:-${GIT_BASE}/openstack/neutron.git}
NEUTRON_BRANCH=${NEUTRON_BRANCH:-$TARGET_BRANCH}
# compute service
NOVA_REPO=${NOVA_REPO:-${GIT_BASE}/openstack/nova.git}
NOVA_BRANCH=${NOVA_BRANCH:-$TARGET_BRANCH}
# object storage service
SWIFT_REPO=${SWIFT_REPO:-${GIT_BASE}/openstack/swift.git}
SWIFT_BRANCH=${SWIFT_BRANCH:-$TARGET_BRANCH}
PLACEMENT_REPO=${PLACEMENT_REPO:-${GIT_BASE}/openstack/placement.git}
PLACEMENT_BRANCH=${PLACEMENT_BRANCH:-$TARGET_BRANCH}

6.8 软件包Timeout

在安装etcd等组件时,可能会发生Timeout等报错,这是因为网络问题需要手动wget到本地。

[root@controller  ~]#wget -c https://github.com/coreos/etcd/releases/download/v3.1.10/etcd-v3.1.10-linux-amd64.tar.gz

6.9 PIP not found

做软链接到stack用户的bin目录下。

[root@controller  ~]# which pip
/usr/local/bin/pip
[root@controller  ~]# ln -s /usr/local/bin/pip /opt/stack/.vnc/bin/

6.10 修改脚本所支持的Linux版本

修改Devstack脚本支持的Linux版本,官方给出的Devstack不支持Centos7.6,只支持Centos8,需要手动添加Linux rhel7。

[root@controller  ~]# vi devstack/stack.sh
SUPPORTED_DISTROS="bionic|focal|f31|f32|opensuse-15.2|opensuse-tumbleweed|rhel8|rhel7"
if [[ ! ${DISTRO} =~ $SUPPORTED_DISTROS ]]; then
    echo "WARNING: this script has not been tested on $DISTRO"
    if [[ "$FORCE" != "yes" ]]; then
        die $LINENO "If you wish to run this script anyway run with FORCE=yes"
    fi
fi

6.11 执行Devstack脚本

执行Devsyack安装脚本,脚本执行完成后会输出安装信息以及操作系统的版本信息。

[root@controller  ~]# ./devstack/stack.sh
DevStack Component Timing
 (times are in seconds)  
=========================
run_process           28
test_with_retry         4
apt-get-update         17
async_wait             0
osc                   482
wait_for_service        14
dbsync                77
pip_install             98
apt-get                9
-------------------------
Unaccounted time      951
=========================
Total runtime        1680
This is your host IP address: 192.168.4.220
This is your host IPv6 address: ::1
Keystone is serving at http://192.168.4.220/identity/
The default users are: admin and demo
The password: tera123
Services are running under systemd unit files.
For more information see: 
https://docs.openstack.org/devstack/latest/systemd.html
DevStack Version: wallaby
Change: 83821a11ac1d6738b63cb10878b8aaa02e153374 Merge "Address feedback from glance-remote patch" 2021-03-23 16:56:21 +0000
OS Version: CentOS Linux release 7.8.2003 (Core)

7 配置OpenStack-ironic

7.1 上传Deploy Images(控制节点)

镜像通过disk-image-create命令构建。

[root@controller  ~]# glance image-create --name deploy-vmlinuz --visibility public --disk-format aki --container-format aki < coreos_production_pxe.vmlinuz
[root@controller ~]# glance image-create --name deploy-initrd --visibility public --disk-format ari --container-format ari < coreos_production_pxe_image-oem.cpio.gz
[root@controller ~]# glance image-create --name my-image.vmlinuz --visibility public --disk-format aki --container-format aki < my-image.vmlinuz
[root@controller ~]# glance image-create --name my-image.initrd --visibility public --disk-format ari --container-format ari < my-image.initrd
[root@controller ~]# export MY_VMLINUZ_UUID=$(openstack image list | awk '/my-image.vmlinuz/ { print $2 }')
[root@controller ~]# export MY_INITRD_UUID=$(openstack image list | awk '/my-image.initrd/ { print $2 }')
[root@controller ~]# glance image-create --name my-image --visibility \
public --disk-format qcow2 --container-format bare --property \
kernel_id=$MY_VMLINUZ_UUID --property ramdisk_id=$MY_INITRD_UUID < my-image.qcow2

7.2 创建Ironic Node(控制节点)

创建一个执行 IPMI 的 Ironic Node。

[root@controller ~]# export IRONIC_API_VERSION=1.11
[root@controller ~]# export OS_BAREMETAL_API_VERSION=1.11
[root@controller ~]# openstack baremetal node create --driver ipmi --name node1

7.3 设备部署接口类型(控制节点)

设置部署接口类型,现在可支持ISCSI、Direct、Ansible等类型。

[root@controller ~]# openstack baremetal node list
设置部署接口类型
[root@controller ~]# openstack baremetal --os-baremetal-api-version 1.31 \
node set c83162c6-748f-4c90-840b-d5e07df83c97  \ 
--deploy-interface iscsi      --raid-interface agent

7.4 设置IPMI Info(控制节点)

这里主要配置IPMI的登录账户信息。

[root@controller ~]# openstack baremetal node set c83162c6-748f-4c90-840b-d5e07df83c97 \
                   --driver-info ipmi_username=ADMIN \
                   --driver-info ipmi_password=tera123 \
                   --driver-info ipmi_address=192.168.5.33

7.5 设置Deploy Images(控制节点)

通过RAMDisk的方式启动。

[root@controller ~]# openstack baremetal node set c83162c6-748f-4c90-840b-d5e07df83c97 \
                   --driver-info deploy_kernel=fcce4694-3955-40c8-be2f-c5ba890071ec \
                   --driver-info deploy_ramdisk= 0fbd622c-bb9e-4729-8cab-f2aae07a5814

7.6 设置Provisioning/Cleaning Network(控制节点)

[root@controller ~]# openstack baremetal node set c83162c6-748f-4c90-840b-d5e07df83c97 \
                   --driver-info cleaning_network= 3793d3bd-5a26-4dd2-a637-007b8ed7c2b0 \
--driver-info provisioning_network= 3793d3bd-5a26-4dd2-a637-007b8ed7c2b0

7.7 设置PXE网卡MAC地址(控制节点)

在Provisioning网络中通过这个MAC地址为Node分配IP地址。

[root@controller ~]# openstack baremetal port create ac:1f:6b:da:d9:c0 \
 --node c83162c6-748f-4c90-840b-d5e07df83c97

7.8 配置Resource Class(控制节点)

为Ironic node设置Placement筛选候选人的Resource Class类型,Nova-compute for Ironic会自动为其创建Placement Resource Provider。

[root@controller ~]# openstack --os-baremetal-api-version 1.21 baremetal node set c83162c6-748f-4c90-840b-d5e07df83c97 --resource-class BAREMETAL_TEST

7.9 设置Ironic Node基础信息(控制节点)

[root@controller ~]# openstack baremetal node set c83162c6-748f-4c90-840b-d5e07df83c97 \
--property cpus=48 --property memory_mb=131072 --property local_gb=1000
[root@controller ~]# openstack baremetal node set c83162c6-748f-4c90-840b-d5e07df83c97 \
--property capabilities='boot_mode:bios'

7.10 验证Ironic Node纳管(控制节点)

[root@controller ~]# openstack baremetal --os-baremetal-api-version 1.11 node manage c83162c6-748f-4c90-840b-d5e07df83c97
[root@controller ~]# openstack baremetal --os-baremetal-api-version 1.11 node provide c83162c6-748f-4c90-840b-d5e07df83c97
[root@controller ~]# openstack baremetal node show c83162c6-748f-4c90-840b-d5e07df83c97\
| grep provision_state
| provision_state        | available

7.11 创建实例Flavor(控制节点)

[root@controller ~]# openstack flavor create --ram 131072 --vcpus 48 --disk 100 my-baremetal-flavor
[root@controller ~]# openstack flavor set --property resources:CUSTOM_BAREMETAL_TEST=1 my-
baremetal-flavor
[root@controller ~]# openstack flavor set --property resources:VCPU=0 my-baremetal-flavor 
[root@controller ~]# openstack flavor set --property resources:MEMORY_MB=0 my-baremetal-flavor 
[root@controller ~]# openstack flavor set --property resources:DISK_GB=0 my-baremetal-flavor

8 实例部署

8.1 部署Baremetal Node(控制节点)

[root@controller ~]# openstack server create --flavor my-baremetal-flavor \ 
--nic net-id=3793d3bd-5a26-4dd2-a637-007b8ed7c2b0 \
--image 08e111be-d256-4c43-bb07-ea65a1219f77 Bare

8.2 部署VM(控制节点)

[root@controller ~]# openstack server create –flavor my-vm-flavor\ 
--nic net-id=38795737-afc4-4ecf-b023-434ee4e327f9 \
--image fd697710-f267-429e-8bdd-62870f86291e VM

8.3 部署Pod(控制节点)

[root@controller ~]# kubect create deployment demo --image=celebdor/kuryr-demo
Deployment “demo” created
[root@controller ~]# kubectl scale deploy/demo --deplices=2
deployment.apps/demo scaled

8.4 验证部署结果(控制节点)

[root@controller ~]# openstack server list
 openstack server list
[root@controller ~]# kubectl get pod -o wide 
kubectl get pod -o wide
[root@controller ~]# openstack port list |awk '/10.0.0.106|10.0.0.109/'
openstack port list

9 验证通信

9.1 Pod与Pod(控制节点)

[root@controller ~]# kubect create deployment demo --image=celebdor/kuryr-demo
Deployment “demo” created
[root@controller ~]# kubectl scale deploy/demo --deplices=2
deployment.apps/demo scaled
[root@controller ~]# kubectl exec -it demo-cdb8599db-blv8j -- ping 10.0.0.109
 Pod与Pod(控制节点)

9.2 Pod与VM(控制节点)

[root@controller ~]# kubectl exec -it demo-cdb8599db-blv8j -- ping 10.0.0.49
Pod与VM(控制节点)

9.3 Pod与Bare Metal(控制节点)    

[root@controller ~]# kubectl exec -it demo-cdb8599db-blv8j -- ping 192.168.4.8
Pod与Bare Metal(控制节点)    

10 参考资料

更多内容请参考:A-Lab

对星融元产品感兴趣?

立即联系!

返回顶部

© 星融元数据技术(苏州)有限公司 苏ICP备17070048号-2