Kubernetes(k8s)で4G CoreをAWS上に作る[道半ば]
専用ハード、キャリアグレードLinuxで動く電話サーバアプリの発注しかしたことない電話屋さんがAWS上にモバイルコア(4GCore=LTE)をインストールしてみます。
知識0からやる方に向けたメモ。
day1 8/3 参考文献を読む
day2 全体像と構成要素はわかった。まだAWSに触ってない。
day3 AWSに触り始めたが、AWS各種サービスへのアクセス権の設定で終わる。
参考文献
[1] Amazon Elastic Kubernetes Service 上でのオープンソースモバイルコアネットワークの実装
[2]通信業界の仮想化とKubernetes [3]AWS アカウントでの IAM ユーザーの作成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. 構築手順・シナリオ
- VPC:ネットワークを作る
- EKS cluseter:ElasticなKubernetesを管理するソフト
- ワーカーノード作成:モバイルのCプレーン、Uプレーン
- Helmのデプロイ:インストールやUpdateの自動化テンプレ???
- 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.ワーカーノードグループ作成テンプレ
モバイルの各エンティティを作る
- コントロールプレーンノード: MME、SGW-c、SMF
- ユーザプレーンノード: SGW-u, UPF
- Lambda関数:Multus(k8sのNICをはやす機能)の実行環境?
- 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.手順概要
- CloudFormationでインフラをコードで書いて作る
- 踏み台ホストを作る
- DocumentDB(加入者情報を初期化)
- Route 53で3GPPのインタフェースをDNSに登録
- Multusワーカーノード(NIC生やす機能)をCloudFormationでインフラをコードで書いて作る
- 自動化用の DNS コントローラーと Multus-IP 更新コントローラーのデプロイ
- クラスターを初期化??? なぜここで?
- Helm をインストール ???
3. 前提条件
3.1. AWSアカウント
→パス忘れた 初期化から ルートユーザーしか持ってなかったので
モバイルコア用IAM作成
[3]IAM 公式ユーザーガイドを見てユーザ作る
- Identity and Access Management (IAM) ? ユーザー > ユーザー追加
認証タイプはID/PASSで(セキュリティより慣れ優先) - ポリシ(アクセス権)
・サービス
コンテナ管理: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