VoIPのコンテナ対応トレンドについて調べてみた

# はじめに
<!-- 発端や概要を記載 -->
VoIPなパッケージ製品をコンテナに展開したいという相談を受けて、ステートフルなものはコンテナ化の利点は受けにくいと即答したものの、実際のところ対応するソリューションはまだ登場していないのか、業界動向など気になって調べてみました。

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [調査前提](#Chapter1)
1. [実現しているソリューションや事例を調べてみた](#Chapter2)
1. [まとめ](#Chapter3)
1. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# 　調査前提

* VoIPとSIP、RTPを中心に追跡しました
* コンテナ基盤はk8sとk8sベースのオーケストレーターでの実現を考慮
* 実際の事例や取り組みの結果がメインで難しい仕組みは今回は参考先へ


<a id="#Chapter2"></a>
# 実現しているソリューションや事例を調べてみた

事例や利用できそうなアプリやソリューションについて調べてみた

* [Viking-VoIP](https://github.com/Viking-VoIP)
K8s,VoIPで調べると最初に出てくるgithub上のプロジェクトです。kubernetesやdockerでVoIP環境を構築するためのアプリケーションサーバ一式が構築できるようです。現状で正式にリリースはされていませんが、freeSWITCHやkamailioなどをEKSに展開して構成する形となっており、いわゆるOSSによるVoIPのブループリントとしては一般的な内容であるように見えます。
> このプロジェクトの目標は、Kubernetesに基づく完全で本格的なVoIPプラットフォームを人々に提供することです。

* [How to implement a VoIP platform in public cloud](https://softwaremind.com/how-to-implement-a-voip-platform-in-public-cloud/)
SoftwareMind社が実際にVoIPをクラウドに持ってこようとして最終的にハイブリッドクラウドにしたという話。ポイントはUDPパケット、SIP,RTPといった複数の複雑なプロトコルに対応するにはk8sは標準では処理ができず、対応にはヘッドレスサービスを使うか、カスタムCNIを必要とするという点。この時点で対応しているk８sソリューションやサポートからすでに遠い場所にいるように感じます。一応UDPにはFlannelがプラグイン対応しているようですが、この道を進むのは企業としてはかなりハードな予感です。


* [Migrating real-time communication applications to Kubernetes at scale: learnings from 8×8’s experience
](https://www.cncf.io/online-programs/migrating-real-time-communication-applications-to-kubernetes-at-scale-learnings-from-8x8s-experience/)
CNCFの事例紹介。米国のVoIPプロバイダである8x8がオンプレミスからクラウドへ移行した事例についての掲載記事です。あまりソリューションについては掘り下げていないものの貴重な実例。

> VoIPオファリングをオンプレミス環境からAWSのKubernetesに正常に移行する際の重要な考慮事項と学習について説明します。

*　[Kubernetes Networking for VoIP Systems – Seán McCord](https://www.youtube.com/watch?v=uWe9lMAcm5Q)
Astatiskの公式動画が出ています。DANMを用いることで内部IPを持つPoDと外部IPを持つPoDを構成できる。このやり方であればK8sの限定的なIP マッピングやポートの利用を回避して対応することができるかもしれない。ただこちらでもクラウドプロバイダーはTCPとUDPが共存するようなものはサポートしていないし、DANMに必要な仕組みもサポートしていない場合が多い。らしい。

> 特にDANMは、IP VLAN VX LANやSR IO Vなどの仕組みを利用して成功を収めているため、ほとんどのクラウドプロバイダーのインストール環境では動作しないでしょう。しかし、BGPに依存しており、これもクラウド事業者が一般的にサポートしているわけではない。そのため、多くの導入先では、これらの特殊なCNIは選択肢から外れています。

<a id="#Chapter3"></a>
# まとめ
* まとめになるほど情報は集まらなかった。
* コンテナ環境下でのVoIPのニーズは高まっており、実際にソリューションモデルの検討は進んでいる。
* 現時点で実用を考慮する場合、いくつかの問題点がある
    * 事例はほぼ無い。特に国内は。
    * Kubernetesの標準的な機能では十分な構成は不可能。
        * IPやプロトコル、多数のポートを利用するにはまだ課題あり
    * クラウドプロバイダーが対応していない可能性が高い
        * オンプレミスではコストメリットが半減してしまう
        * オンプレミスで自社全面的なメンテナンスをするのは既存の仕組みより複雑

部品となるVoIPサーバアプリケーションはコンテナ対応しているが、その利用についてはクラウドやコンテナの環境がまだ追いついていない。DANMプロジェクトの集大成として利用実例(とデファクト構成)が出てくると一気に普及しそうなので今後も着目していきたいです。



<a id="#reference"></a>
# 参考文献
- [kubernetes](https://kubernetes.io/ja/docs/concepts/services-networking/service/)
- [Viking-VoIP](https://github.com/Viking-VoIP)
- [How to implement a VoIP platform in public cloud](https://softwaremind.com/how-to-implement-a-voip-platform-in-public-cloud/)
- [Migrating real-time communication applications to Kubernetes at scale: learnings from 8×8’s experience
](https://www.cncf.io/online-programs/migrating-real-time-communication-applications-to-kubernetes-at-scale-learnings-from-8x8s-experience/)
- [Kubernetes Networking for VoIP Systems – Seán McCord](https://www.youtube.com/watch?v=uWe9lMAcm5Q)