本文目標:
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
範例,它描述了應用包含了兩個服務,分別是:
完成描述檔案的構建後,在 docker-compose.yml
所處的位置下使用 docker compose up
命令即可啟動整個服務。
看完官網簡單的範例後,我們來簡單的看一下 free5gc-compose 的 compose file 吧:
上圖標示了 compose file 的幾個重點(Network Function 也只考慮 UPF,因為 Network Function 的描述方法基本上差異不大):
aliases
為主)free5gc 的安裝與測試教學都可以在 free5gc 官網上取得,如果讀者希望能夠在不使用 VM 的情況下建立核網與 RAN 模擬器的測試環境,可以考慮使用 free5gc-compose 這個專案來進行實驗。
free5gc-compose 使用 docker-compose 建立的容器化應用程式專案,它將每一個 Network Functions 進行容器化,當我們啟動 free5gc-compose 後就可以立刻測試我們的核心網路囉!
在使用 free5gc-compose 之前,請先確保你已經在電腦上安裝以下軟體:
BTW,從這個 commit 之後的版本應該都能使 gtp5g 在 5.11 以後的 kernel 上運作。
若你已經正確的安裝上述所需的軟體,我們就能安裝 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
打開瀏覽器連上 localhost:5000
就可以看到 webconsole 的登入畫面,預設的登入帳號與密碼為:
- Account: admin
- Password: free5gc
接著請依造上圖所示的樣子新增一個新的 Subscriber Data。
補充:
Subscriber Data 的內容需要與下一個步驟 UE simulator 使用到的 configuration file 一致,如果無法看到 PDU Session 順利建立的訊息請反覆檢查兩邊的內容。
當所有 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 建立成功的訊息:
圖 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 的官方文件對於 ULCL 的設定方式並沒有交代的非常清楚,唯一的教學影片又需要架設多台 Virtual Machine。
為了節省時間,筆者使用 free5gc-compose 去實作 ULCL,架構上會有 3 個 UPF,分別是:
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