• 【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地址与上面的描述有一些差异。



    在这里插入图片描述

  • 相关阅读:
    AcWing算法基础课笔记 1.基础算法
    数据结构【二叉搜索树、leetcode刷题】
    leetcode-每日一题-119-杨辉三角2(简单,dp)
    EFLK日志平台(filebeat-->kafka-->logstash-->es-->kiabana)
    02 | docker镜像文件制作
    HTML期末大作业:基于HTML+CSS+JavaScript新能源汽车资讯门户网站
    选课通知 | 北交大《人工智能与大数据应用实战》第二次开课,欢迎选修~
    详细剖析pyecharts大屏的Page函数配置文件:chart_config.json
    python+nodejs+vue考研辅导网站系统
    CKA 06_Kubernetes 工作负载与调度 Pod 管理 yaml 资源清单 标签 Pod 生命周期 容器探针
  • 原文地址:https://blog.csdn.net/qq_31985307/article/details/126914125