5G核心网手把手教你将Open5gs托管到k8s(KubeSphere)
Posted 从善若水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5G核心网手把手教你将Open5gs托管到k8s(KubeSphere)相关的知识,希望对你有一定的参考价值。
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。
博客内容主要围绕:
5G/6G协议讲解
算力网络讲解(云计算,边缘计算,端计算)
高级C语言讲解
Rust语言讲解
open5gs托管到k8s(KubeSphere)
演示环境准备
我们总共需要使用三个Ubuntu20.04
虚拟机,每个虚拟机至少要有40G的磁盘空间,其中一个作为主节点,另外两个作为工作节点。同时我们这边并没有直接使用k8s,而是使用一个开源的基于k8s开发的管理编排软件kubesphere
来托管open5gs。
主机名 | 角色 | 网口名(必须是eth0,否则需要修改open5gs Helm项目) |
---|---|---|
master | control plane, etcd | eth0 |
node1 | worker | eth0 |
node2 | worker | eth0 |
修改Ubuntu虚拟机网卡名字
sudo vim /etc/default/grub
在GRUB_CMDLINE_LINUX添加 “net.ifnames=0 biosdevname=0”。保存退出后,执行下面的命令
sudo update-grup reboot
我们使用的open5gs镜像来自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挂载到其它节点上,在slave1
和slave2
上分别执行下面的命令,
sudo apt install nfs-common
sudo mkdir /open5gs
sudo mount 192.168.21.137:/open5gs /open5gs/
安装Kubesphere
首先我们需要保证我们三台Ubuntu虚拟机可以通过SSH相互访问,下面是我三台Ubuntu虚拟机的IP地址信息:
虚拟机name | IP地址 |
---|---|
master | 192.168.21.137 |
slave1 | 192.168.21.139 |
slave2 | 192.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
参数名字 含义 etcd etcd 节点名称 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地址与上面的描述有一些差异。
以上是关于5G核心网手把手教你将Open5gs托管到k8s(KubeSphere)的主要内容,如果未能解决你的问题,请参考以下文章