当前位置: 首页 > news >正文

【5G核心网】手把手教你将Open5gs托管到k8s(KubeSphere)

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。


博客内容主要围绕:
       5G/6G协议讲解
       算力网络讲解(云计算,边缘计算,端计算)
       高级C语言讲解
       Rust语言讲解



open5gs托管到k8s(KubeSphere)


在这里插入图片描述

演示环境准备

我们总共需要使用三个Ubuntu20.04虚拟机,每个虚拟机至少要有40G的磁盘空间,其中一个作为主节点,另外两个作为工作节点。同时我们这边并没有直接使用k8s,而是使用一个开源的基于k8s开发的管理编排软件kubesphere来托管open5gs。

主机名角色网口名(必须是eth0,否则需要修改open5gs Helm项目)
mastercontrol plane, etcdeth0
node1workereth0
node2workereth0

修改Ubuntu虚拟机网卡名字

sudo vim /etc/default/grub

在GRUB_CMDLINE_LINUX添加 “net.ifnames=0 biosdevname=0”。保存退出后,执行下面的命令

sudo update-grup
reboot

kubesphere官网链接

我们使用的open5gs镜像来自Docker Hub

Docker Hub官网链接

使用的open5gs镜像如下图:

在这里插入图片描述
我们这边没有去自己写open5gs的k8s配置文件,我使用了OpenVerso开源项目,这里包含整个open5gs每个网元的配置文件,整个项目是基于Helm构建。

项目传送门


搭建NFs持久化存储

master节点执行下面的命令,

sudo apt-get install nfs-server -y
sudo mkdir /open5gs
sudo chmod 777 /open5gs/

配置nfs参数,执行下面的命令,

sudo vim /etc/exports

添加下面的命令,

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#

/open5gs *(rw,sync,no_root_squash,no_subtree_check)

重启nfs-server

sudo systemctl restart nfs-server.service 

我们在Slave1上执行下面的命令,看看我们的NFS是否创建成功,

showmount -e 192.168.21.137

如果创建成功就会看到下面的内容(我们创建的NFS路径为/open5gs),

在这里插入图片描述
如果上面的命令执行失败,则安装下面的库之后重新执行,

sudo apt install nfs-common

重启后,将我们NFS挂载到其它节点上,在slave1slave2上分别执行下面的命令,

sudo apt install nfs-common
sudo mkdir /open5gs
sudo mount 192.168.21.137:/open5gs /open5gs/

安装Kubesphere

首先我们需要保证我们三台Ubuntu虚拟机可以通过SSH相互访问,下面是我三台Ubuntu虚拟机的IP地址信息:

虚拟机nameIP地址
master192.168.21.137
slave1192.168.21.139
slave2192.168.21.141

我尝试ssh访问slave1发现被拒了,

在这里插入图片描述

这个问题在于我们没有在工作节点上安装ssh服务,分别在slave1和slave2上执行下面的命令安装ssh server,

sudo apt-get install openssh-server -y

安装完成之后master可以ssh连接到slave1,

在这里插入图片描述

之后我们还需要在三台Ubuntu上安装一些依赖库,执行下面的命令,

sudo apt-get install curl openssl tar socat conntrack ebtables ipset -y

现在我们正式开始安装kubesphere,首先我们在master节点上下载kubesphere的命令工具kubekey

export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | VERSION=v2.2.2 sh -

然后在master节点上生成一个默认配置文件,

./kk create config --with-kubernetes --with-kubesphere  -f open5gs.yaml

使用vim命令打开open5gs.yaml配置文件,修改文件内容,

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: master, address: 192.168.21.137, internalAddress: 192.168.21.137, user: pu, password: "123"}
  - {name: node1, address: 192.168.21.139, internalAddress: 192.168.21.139, user: pu, password: "123"}
  - {name: node2, address: 192.168.21.141, internalAddress: 192.168.21.141, user: pu, password: "123"}
  roleGroups:
    etcd:
    - master
    control-plane:
    - master
    worker:
    - node1
    - node2
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers 
    # internalLoadbalancer: haproxy

    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: --with-kubesphere
    clusterName: cluster.local
    autoRenewCerts: true
    containerManager:
  etcd:
    type: kubekey
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
    ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
    multusCNI:
      enabled: false
  registry:
    privateRegistry: ""
    namespaceOverride: ""
    registryMirrors: []
    insecureRegistries: []
  addons: 
  - name: nfs-client
    namespace: kube-system
    sources:
      chart:
        name: nfs-client-provisioner
        repo: https://charts.kubesphere.io/main
        values:
        - storageClass.defaultClass=false
        - nfs.server=192.168.21.137
        - nfs.path=/open5gs
  

👆关于上面的每个参数的含义:
hosts 中列出您的所有机器并添加详细信息

参数名字含义
name实例的主机名
address任务机和其他实例通过 SSH 相互连接所使用的 IP 地址。根据您的环境,可以是公有 IP 地址或私有 IP 地址。例如,一些云平台为每个实例提供一个公有 IP 地址,用于通过 SSH 访问。在这种情况下,您可以在该字段填入这个公有 IP 地址
internalAddress实例的私有 IP 地址

此外,您必须提供用于连接至每台实例的登录信息,以下示例供您参考:
使用密码登录示例:

hosts:
 #端口 22 是 SSH 的默认端口,因此您无需将它添加至该 YAML 文件中。否则,您需要在 IP 地址后添加对应端口号,如上所示。
 - {name: master, address: 192.168.0.2, internalAddress: 192.168.0.2, port: 8022, user: ubuntu, password: Testing123}

默认 root 用户示例:

hosts:
 - {name: master, address: 192.168.0.2, internalAddress: 192.168.0.2, password: Testing123}

使用 SSH 密钥的无密码登录示例:

hosts:
 - {name: master, address: 192.168.0.2, internalAddress: 192.168.0.2, privateKeyPath: "~/.ssh/id_rsa"}

在 ARM 设备上安装的示例:

hosts:
 - {name: master, address: 192.168.0.2, internalAddress: 192.168.0.2, user: ubuntu, password: Testing123, arch: arm64}

roleGroups

参数名字含义
etcdetcd 节点名称
control-plane主节点名称
worker工作节点名称

addons
您可以在 open5gs.yaml 的 addons 字段下指定存储,从而自定义持久化存储插件,例如 NFS 客户端、Ceph RBD、GlusterFS 等。
KubeSphere 会默认安装 OpenEBS,为开发和测试环境配置 LocalPV,方便新用户使用。在本多节点安装示例中,使用了默认存储类型(本地存储卷)。对于生产环境,您可以使用 Ceph/GlusterFS/CSI 或者商业存储产品作为持久化存储解决方案。
各种持久化配置参考方案示例

开始安装k8s、kubesphere以及构建集群,在master节点输入下面的命令,

./kk create cluster --with-kubesphere -f open5gs.yaml

安装时间大约10~20分钟。当显示下面的信息,则表示安装成功:

在这里插入图片描述

登录进来后选择平台管理集群管理节点集群节点

在这里插入图片描述

我们在Kubesphere上创建一个项目open5gs,之后将Helm项目安装在这里。点击平台管理集群管理项目下的创建:

在这里插入图片描述

点击确定完成创建,

在这里插入图片描述


安装open5gs-2.0.5

从git仓库下载open5gs 2.0.5 版本,点击下载 。

下载后进行解压和安装,

tar xvf open5gs-2.0.5.tgz
cd open5gs/
helm install ngc ./ -n open5gs

现在open5gs所有的网元已经都部署到kubesphere上了,如下图:

在这里插入图片描述

取决于网速和虚拟机能力,上面容器部署时间可能较长。

开放核心网数据库配置接口

我们都知道,open5gs有一个webui的子模块,用来注册用户信息。当前的项目中webui只能在本地节点访问,无法在部署节点外的节点访问,我们现在配置其可被外部节点访问。

点击平台管理集群管理项目open5gs服务ngc-webui,将显示下面的内容

在这里插入图片描述

点击更多操作编辑外部访问,设置访问模式为NodePort

在这里插入图片描述

修改之后我们会看到,新增了一个NodePort端口号,

在这里插入图片描述

我们查询一下当前webui所在的节点IP地址,

在这里插入图片描述

之后你就可以使用http://NodeIP:NodePort的方式访问核心网数据库了。效果如下,

在这里插入图片描述

因为这一节的内容是后加的,所以节点名和节点IP地址与上面的描述有一些差异。



在这里插入图片描述

相关文章:

  • 空城机在CSDN的四周年创作纪念日
  • C++ Reference: Standard C++ Library reference: C Library: clocale: struct lconv
  • JavaSE进阶--集合(2万字总结)
  • CKA考题 [k8s1.21]
  • AcWing第 70 场周赛题解
  • 读FFA-net: Feature Fusion Attention Network for Single Image Dehazing
  • 测试需求平台4-Flask实现API服务入门实战
  • js单行代码-----dom
  • 模型压缩常用方法简介
  • css常用属性
  • 【Android】Android Binder进程间通信AIDL示例与过程分析
  • C#教程 - 模式匹配(Pattern matching)
  • 动手学习深度学习 05:深度学习计算
  • 状体模式-优雅解决物流状态
  • CTF之加密解密训练
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • HTTP中GET与POST的区别 99%的错误认识
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript设计模式之工厂模式
  • JSDuck 与 AngularJS 融合技巧
  • Linux中的硬链接与软链接
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • SOFAMosn配置模型
  • vue-router 实现分析
  • XForms - 更强大的Form
  • 测试开发系类之接口自动化测试
  • 从PHP迁移至Golang - 基础篇
  • 翻译--Thinking in React
  • 给第三方使用接口的 URL 签名实现
  • 配置 PM2 实现代码自动发布
  • 扑朔迷离的属性和特性【彻底弄清】
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • ​2020 年大前端技术趋势解读
  • #include<初见C语言之指针(5)>
  • (1)常见O(n^2)排序算法解析
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (windows2012共享文件夹和防火墙设置
  • (二)Linux——Linux常用指令
  • (附源码)计算机毕业设计ssm电影分享网站
  • (转)fock函数详解
  • .Mobi域名介绍
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core 中插件式开发实现
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • @Autowired 与@Resource的区别
  • [ 第一章] JavaScript 简史
  • []T 还是 []*T, 这是一个问题
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [bzoj1324]Exca王者之剑_最小割
  • [C++]C++基础知识概述
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [Gradle] 在 Eclipse 下利用 gradle 构建系统