iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
DevOps

5G 核心網路與雲原生開發之亂彈阿翔系列 第 27

使用 Docker compose 模擬網路拓墣:free5gc-compose 專案解說

  • 分享至 

  • xImage
  •  

本文目標:

  • 認識 Docker Compose
  • 以 free5gc-compose 為例解說 docker-compose 的用途
  • 使用 docker-compose 模擬 ULCL 的網路拓墣

什麼是 Docker Compose?

Docker Compose repository: Docker Compose is a tool for running multi-container applications on Docker defined using the Compose file format.

參考官方的描述可以得知,Docker Compose 是一套讓使用者藉由描述 compose file 建立多容器應用程式的專案:

services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
  redis:
    image: redis

上面的程式碼為官方提供的 docker-compose.yml 範例,它描述了應用包含了兩個服務,分別是:

  • web container:使用自定義的 Dockerfile,啟動時會將 port 5000 打通,使外部連線可以進入到容器的 5000 端口。
  • redis container:使用官方的 redis image。

完成描述檔案的構建後,在 docker-compose.yml 所處的位置下使用 docker compose up 命令即可啟動整個服務。

看完官網簡單的範例後,我們來簡單的看一下 free5gc-compose 的 compose file 吧:

上圖標示了 compose file 的幾個重點(Network Function 也只考慮 UPF,因為 Network Function 的描述方法基本上差異不大):

  1. 表示當 Container 啟動後首先執行的命令
  2. 將 config mapping 到 cotainer 內
  3. 定義 container 所屬的 Docker network,我們可以為容器指定 IP 或是一個 Domain(這邊是以它 aliases 為主)
  4. 描述 Docker network,包含:network name、CIDR、bridge name 等資訊

進入正題

free5gc 的安裝與測試教學都可以在 free5gc 官網上取得,如果讀者希望能夠在不使用 VM 的情況下建立核網與 RAN 模擬器的測試環境,可以考慮使用 free5gc-compose 這個專案來進行實驗。

free5gc-compose 使用 docker-compose 建立的容器化應用程式專案,它將每一個 Network Functions 進行容器化,當我們啟動 free5gc-compose 後就可以立刻測試我們的核心網路囉!

安裝要求

在使用 free5gc-compose 之前,請先確保你已經在電腦上安裝以下軟體:

  • GTP5G kernel module
    UPF 的 Data Plane,由於 GTP5G 是 Linux kernel module,根據官網描述,建議你在 kernel 為 5.0.0-23-generic 或 5.4.0 以後的版本下安裝。

BTW,從這個 commit 之後的版本應該都能使 gtp5g 在 5.11 以後的 kernel 上運作。

  • Docker Engine
  • Docker Compose

安裝 free5gc-compose

若你已經正確的安裝上述所需的軟體,我們就能安裝 free5gc-compose 了:

$ git clone https://github.com/free5gc/free5gc-compose.git
$ cd free5gc-compose

將專案 clone 下來以後,必須先編譯 base image 用來產生每一個 NF 的執行檔:

$ make base

將 base image 編譯後,使用以下命令產生每一個 NF 使用到的 container:

$ docker-compose build

安裝且編譯完成後,我們就能使用以下命令開啟剛剛產生出來的 Container:

$ sudo docker-compose up

使用 webconsole 新增訂閱用戶的資料

打開瀏覽器連上 localhost:5000 就可以看到 webconsole 的登入畫面,預設的登入帳號與密碼為:

- Account: admin
- Password: free5gc

接著請依造上圖所示的樣子新增一個新的 Subscriber Data。

補充:
Subscriber Data 的內容需要與下一個步驟 UE simulator 使用到的 configuration file 一致,如果無法看到 PDU Session 順利建立的訊息請反覆檢查兩邊的內容。

使用 UERANSIM 與 free5gc 互動

當所有 NF 被啟動以後,可以使用以下命令查詢 Running Container 的資訊:

$ docker container ls

結果如下:

如果有順利啟動,請把 ueransim container 的 id 記下來,以上圖為例就是 d442c241d63c
接著,我們進入 d442c241d63c container:

$ docker exec -it d442c241d63c bash

啟動 ue simulator:

$ /ueransim# ./nr-ue -c ./config/uecfg.yaml

啟動後,如果設定檔無誤應該可以看到 PDU Session 建立成功的訊息:

ULCL 介紹

圖 1:取自 User plane Architecture for the Uplink Classifier

取自 TS 23.501

早期的 EPC(4G CN)並沒有分流的概念,而 5GC 提出了 Uplink Classifier 的架構,讓核心網路可以針對不同的業務區隔不同類型的流量。
以上圖來說,充當 Uplink Classifier 的 Branching UPF 會識別來自 N3 的資料流,依據自身的設定將流量透過 N9 接口轉發給不同的 Anchor UPF。

下行資料流如何被處理?

當 Anchor UPF 收來來自 N6 接口的 DL Data flow 會將它轉發到 Branching UPF,等到 Branching UPF 從 N9 接口收到資料流後,會將所有資料流匯整在一起發送給 RAN。

小試身手:使用 free5gc-compose 模擬 ULCL 場景

目前 free5GC 的官方文件對於 ULCL 的設定方式並沒有交代的非常清楚,唯一的教學影片又需要架設多台 Virtual Machine。
為了節省時間,筆者使用 free5gc-compose 去實作 ULCL,架構上會有 3 個 UPF,分別是:

  • Branching UPF
  • Anchor UPF - 1
  • Anchor UPF - 2

Branching UPF 作為 Uplink Classifier,其餘兩個 UPF 會從 N9 Interface 接收到來自 Branching UPF 的 Uplink Data Flow。
當 Anchor UPF 收到來自 N6 的 Downlink Data 時,會透過 N9 將資料轉發給 Branching UPF,Branching UPF 會負責將這些 Downlink Data 傳送至 RAN。

首先,打開終端機輸入以下命令取得 free5gc-compose:

git clone https://github.com/free5gc/free5gc-compose.git
cd free5gc-compose

切換至 ulcl 分支:

git checkout ulcl-example

編譯 Service 所需要的 Docker image:

make base
docker-compose build

編譯完成後,使用以下命令啟動它:

sudo docker-compose up

使用完後,可以使用以下命令移除已建立的容器:

docker-compose rm

References


上一篇
Docker Network 介紹
下一篇
使用 Prometheus 結合 free5GC 實作告警系統
系列文
5G 核心網路與雲原生開發之亂彈阿翔36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言