📞

Kubernetes(k8s)で4G CoreをAWS上に作る[道半ば]

2022/08/03に公開

専用ハード、キャリアグレードLinuxで動く電話サーバアプリの発注しかしたことない電話屋さんがAWS上にモバイルコア(4GCore=LTE)をインストールしてみます。
知識0からやる方に向けたメモ。
day1 8/3 参考文献を読む
day2 全体像と構成要素はわかった。まだAWSに触ってない。
day3 AWSに触り始めたが、AWS各種サービスへのアクセス権の設定で終わる。

参考文献

[1] Amazon Elastic Kubernetes Service 上でのオープンソースモバイルコアネットワークの実装
https://aws.amazon.com/jp/blogs/news/open-source-mobile-core-network-implementation-on-amazon-elastic-kubernetes-service/
[2]通信業界の仮想化とKubernetes
https://zenn.dev/k_satone/articles/d064e7390098c2
[3]AWS アカウントでの IAM ユーザーの作成
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_users_create.html

1. AWSのチュートリアルを進める[1]

1.1. チュートリアルを読む

1.1.1. 材料

a. オープンースソフト

4Gコア: Open5gs

b. AWSサービス

(1) コンテナ管理:Amazon Elastic Kubernetes Service (Amazon EKS)、
(2) DNS:Amazon Route 53
(3) ドキュメントDB?: Amazon DocumentDB、
(4) コンテナのDB?:Amazon Elastic Container Registry (Amazon ECR)、
(5) AWS CloudFormation: ノードの立ち上げとかをCLI(というかコード)で実施
(6) 障害監視:Amazon CloudWatch
(7) アプリの実行リソース?:AWS Lambda

1.1.2. Open5Gsの構成

モバイル網のエンティティ(論理機能部)
(a) MME:S-GW間の端末の移動の管理
(b) HSS:加入者DB(認証キーとか電話番号とか)
(c) PCRF:ポリシ管理:ユーザ後の速度を制限したりする指示を出す(7G超過で128kbps制限等)
(d) S-GW : データ通信の入り口(認証済のユーザの通信だけ通す等)
(e) SMF+P-GW-C : ポリシを元にセッション(通信毎のデータの処理のルールをUPFに渡す)
(f) SMF*P-GW-U : データを処理する(ルーチングとか速度制限かけたり)
(g) NRF: NFのリポジトリ :DNSのNF版で必要なサービスがどこにあるか引きに行く感じ?
(h) Web-UI : HSS/PCRFに加入者のプロファイル(ユーザ名、電話番号、契約サービス月間
5G等を登録)

(https://aws.amazon.com/jp/blogs/news/open-source-mobile-core-network-implementation-on-amazon-elastic-kubernetes-service/)

1.2. 構築手順・シナリオ

  1. VPC:ネットワークを作る
  2. EKS cluseter:ElasticなKubernetesを管理するソフト
  3. ワーカーノード作成:モバイルのCプレーン、Uプレーン
  4. Helmのデプロイ:インストールやUpdateの自動化テンプレ???
  5. CNFの設定:Cloud native ntwrok function??? (各機能部 MMEとかのこと?)
    (https://aws.amazon.com/jp/blogs/news/open-source-mobile-core-network-implementation-on-amazon-elastic-kubernetes-service/)
    Multus CNI プラグイン:インタフェースで異なるプロトコルに対応するために必要らしい

1.3. インフラストラクチャ作成テンプレ

1.3.1 ネットワーク

a. EpcVpc: デプロイに使用する VPC:EPCのネットワーク
b. PublicSubnet1/2:インターネットアクセス用のサブネットkubectlコマンド(k8sのCLI)実行用
c. PrivateSubnetAz1/2:EKS(k8s)コントロールプレーン用サブネット AZ分けるの?上長構成?
d. MultusSubnet1Az1:Multus(k8sのNICをはやす機能) EPCのコントロールプレーンのIF1
e. MultusSubnet1Az1:Multus(k8sのNICをはやす機能) EPCのコントロールプレーンのIF2
f. EksCluster:ネットワーク機能を干すティング???イミフ モバイルエンティティを建てるってこと?
g. DocumentDBCluster:加入者プロファイル(SIM認証、ユーザ名等)の保存用
  JSONで書き込めるDBっぽい
h. Route53 Private Hosted Zones:DNS 各モバイルエンティティのインタフェース毎(S6a, Gx, S11等)のアドレス管理用

1.3.2.ワーカーノードグループ作成テンプレ

モバイルの各エンティティを作る

  1. コントロールプレーンノード: MME、SGW-c、SMF
  2. ユーザプレーンノード: SGW-u, UPF
  3. Lambda関数:Multus(k8sのNICをはやす機能)の実行環境?
  4. CloudWatch:モニタリングして スケールアップしたりダウンしたり。

    https://aws.amazon.com/jp/blogs/news/open-source-mobile-core-network-implementation-on-amazon-elastic-kubernetes-service/

・冗長化のためにマルチAvailability Zone構成(いきなりやりすぎでは)
・Public Subnetに、AZ間で共通のEKS(k8s)のコントロールプレーン
・サブネット
 ・SGi(インターネットに抜ける&加入者管理のUI)、
 ・Cプレーン用(S11, S6aとかのDiameter、API)
・Uプレーン用(S1u等データ・メディアが流れる)
・CプレーンのPodとUプレーンのポッドは別のWorkerNodeで管理する

1.3.3.自動化

DNS更新コントローラ:モバイルエンティティを増やした際にNICのアドレスをRoute 53に自動登録
Multus IP更新コントローラ:セカンダリIPを関連付けて、ポートをリッスン?死活監視用?

1.3.4.端末のシミュレータ

srsLTE Simulator

2.手順概要

  1. CloudFormationでインフラをコードで書いて作る
  2. 踏み台ホストを作る
  3. DocumentDB(加入者情報を初期化)
  4. Route 53で3GPPのインタフェースをDNSに登録
  5. Multusワーカーノード(NIC生やす機能)をCloudFormationでインフラをコードで書いて作る
  6. 自動化用の DNS コントローラーと Multus-IP 更新コントローラーのデプロイ
  7. クラスターを初期化??? なぜここで?
  8. Helm をインストール ???

3. 前提条件

3.1. AWSアカウント

→パス忘れた 初期化から ルートユーザーしか持ってなかったので
モバイルコア用IAM作成
[3]IAM 公式ユーザーガイドを見てユーザ作る

  1. Identity and Access Management (IAM) ? ユーザー > ユーザー追加
    認証タイプはID/PASSで(セキュリティより慣れ優先)
  2. ポリシ(アクセス権)
    ・サービス
     コンテナ管理:Amazon EKS、DNS:Amazon Route 53 ドキュメントDB:Amazon DocumentDB、
     コンテナのDNS:Amazon ECR、CLI:AWS CloudFormation、障害監視:Amazon CloudWatch
     アプリ実行環境:AWS Lambda

★DocumentDBは選べなかった。RDSをとりあえず登録あとで困るだろう。
・アクション
 すべて
・送信元IP
 送信元をIPを絞ってみる /16で。

3.2. GitHub リポジトリ をローカルマシン

Git? リポジトリ? なにそれおいしいの?

Discussion