はじめに
以前4回に分けてDockerとAzure Kubernetes Serviceのネットワークの内部構造を色々と調査しました。
今度はAzure Container Apps(以下、ACA)のネットワーク構造について紐解いてみたくなりました。以下では、ACAの内部構造を暴くために検証してみた結果を書いていきます。
ACAとは
- 2022年5月にGAした、コンテナベースのアプリケーションを簡単にデプロイ、管理、スケールできるサービス
- フルマネージドk8sベースのアプリケーションプラットフォーム
- k8sが提供する高い可用性、セキュリティ、スケーラビリティの恩恵を受けつつ、k8sの管理は不要
- KEDA、Dapr、EnvoyといったCNCFプロジェクトの成果物をマネージドサービスとして提供する
- 内部的にはAzure Kubernetes Service (AKS) を使用している
※AKSについては以前の記事を参照。
AKSとの違い
AKS:k8sAPI使いたい、k8sの設定自由度を確保したいならAKSを使うべき。
ACA:k8sAPIは意識しない。k8sの機能は使いたいけどクラスターの管理とかはしたくない人向けの便利なプラットフォーム。
なので、k8sが提供する高い可用性、セキュリティ、スケーラビリティの恩恵を受けたいがk8sの管理が大変、そもそもk8sを勉強するのが難しい、k8s開発スピード早すぎてついていけないという人にACAがおすすめ。
参考
やってみたこと
VMSSへのSSHログイン
想定
ACAを構成するAKSクラスター内のVMSSにログインできれば内部構造が鮮明になるのではないか。
結果
-
VMSSへのnmapコマンド実行(ポートスキャン)
→SSHは空いていた。 「22/tcp open ssh」 -
VMSSへのSSHログイン
→右記メッセージが出て、ログインできなかった。 「 Permission denied (publickey).」
内部向けLBへのTraceroute
想定
ホップアドレスとしてACAを構成するAKS内のPod等のIPアドレスが確認できるのではないか。
結果
コマンドの結果からは送信元の検証用VMと内部向けLB(10.33.0.62)が直接通信しているように見えた。
SDNの世界でルーティングされているため、このような結果となったと推測している。
TRACEROUTE (using port 80/tcp)
HOP RTT ADDRESS
1.00 ms 10.33.0.62
Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds
ACAにおけるコンテナ間通信のTraceroute
想定
2つのコンテナが内部的には異なるVMSSにて起動している場合、AKSでTracerouteすると以下のような流れになる。
送信元PodのIPアドレス→送信元NodeのIPアドレス→送信先NodeのIPアドレス→送信先PodのIPアドレス
ACAは内部的にAKSを使用しているので、ACAでも同様の結果となるはずである。
検証環境
送信元PodのIPアドレス:10.33.0.61
送信元NodeのIPアドレス:10.33.0.33
送信先NodeのIPアドレス:10.33.0.4
送信先PodのIPアドレス:10.33.0.21
結果
コマンドの結果から、想定は正しいと考えている。
sh-5.1# traceroute 10.33.0.21
traceroute to 10.33.0.21 (10.33.0.21), 30 hops max, 60 byte packets
1 10-33-0-33.npm-metrics-cluster-service.kube-system.svc.cluster.local (10.33.0.33) 0.058 ms 0.015 ms 0.010 ms
2 10-33-0-4.npm-metrics-cluster-service.kube-system.svc.cluster.local (10.33.0.4) 0.853 ms 0.784 ms 0.843 ms
3 10-33-0-21.azfooaca-aca01-2--7b6u83h-headless.k8se-apps.svc.cluster.local (10.33.0.21) 0.923 ms 0.894 ms 0.878 ms
なお「npm-metrics-cluster-service.kube-system.svc.cluster.local」については以下の通り。
- kube-system:AKSに既定で作成される名前空間名
- npm-metrics-cluster-service:Prometheusの設定で、クラスターレベルのメトリクスを集めるために使用されるサービス。AKSクラスター上のkube-system名前空間内に存在している
おわりに
上記に加えて、3回に分けてACAの選択できるネットワークオプションごとにネットワーク構造を整理した記事もありますので、是非見てみて下さい!