※Azure Container Apps はこの投稿時点ではパブリック プレビューでの提供のため、一般提供 (GA) のタイミングで手順や挙動が変更になる場合があります。
VNet 統合された Azure Container Apps (ACA) は、実際には ACA 作成時に指定した (新規作成、もしくは既存の) VNet 統合されたコンテナー アプリ環境上で動作します。
VNet 統合されたコンテナー アプリ環境のネットワーク構成は、Azure Kubernetes Service (AKS) で Azure CNI (Container Network Interface) を利用した際の構成と同様のものである事が確認できています。
ただし、この Azure CNI についてのドキュメントは存在しますが、AKS やコンテナー アプリ環境に照らし合わせたような、イメージできる概念図が見当たらなかったため、纏めてみました。
VNet 統合された ACA のネットワーク構成について
※設定している VNet およびサブネットのネットワーク範囲は、Azure ポータルから作成する際の既定のものを使用しています。
内部に仮想 IP を持つように構成した場合
内部に仮想 IP を持つように構成した場合のネットワーク構成は、以下の図のようになります。
ドキュメント上では、デプロイした ACA は App Subnet (アプリ サブネット) が使用される雰囲気の記載がありますが、現時点で実際には使用されていませんでした。
GA 時にはどうなるか不明ですが、ACA の App Subnet は AKS でいうところの Virtual Node Subnet (仮想ノード サブネット) ではないかと推測しています。
Virtual Node Subnet は Azure Container Instances (ACI) を Kubernetes の仮想ノードとしてデプロイされたコンテナー アプリが使用するサブネットとなっていますが、ACA では現状対応していないためと考えています。
それ以外では、以下の Azure リソースではないネットワーク セグメントがコンテナー アプリ環境に自動的に設定されます。
- dockerBridgeCidr (10.2.0.1/16)
- platformReservedCider (10.1.0.0/16)
- platformReservedDnsIP (10.1.0.2)
これらは主に Kubernetes サービスや ACA を含むコンテナー アプリ間通信で内部的に使用されるものとなり、この設定値は Azure ポータルのコンテナー アプリ環境の管理ブレード内から [概要] – [Json ビュー] で確認することが可能です。
また、Azure ポータルから構成、作成する際には、自動的にネットワーク セグメントが固定で設定されますが、Azure CLI でデプロイする際には指定することはk脳となっています。
外部に仮想 IP を持つように構成した場合
外部に仮想 IP を持つように構成した場合のネットワーク構成は、以下の図のようになり、内部の場合とほぼ同様の構成となります (違いは ELB のフロントエンドに着信用のパブリック IP アドレスが割り当てられる、ILB は存在しない点)。
補足 : AKS で Azure CNI を利用した場合
AKS で Azure CNI を利用した場合のネットワーク構成は、以下となります。
コンテナー アプリ環境とは、サブネット名やネットワーク セグメント名は異なりますが、同じ Azure CNI の構成である事が確認できています。
まとめ
蒸気を踏まえて、Kubernetes で使用されるネットワーク セグメントを含めた形の構成は、以下となります。
図にすることで、コンテナー アプリ環境のネットワーク構成が理解することができましたが、Azure リソースとして管理されていない点については、ネットワーク設計するに当たっては大きな考慮事項になりそうです。
ちなみに内部的に使用されるネットワーク セグメントとの重複は推奨していない (予期しない動作やエラーの原因となるため) とのこと (ツライ