このエントリは2022/11/29現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。
今回はいつもの人から問い合わせをもらった。
現在Azure Container Appsを検証している。カスタムVNet (/23はちょっと広すぎるんちゃうの、って思うけど)を使い、VNetに閉じた内部環境としてデプロイしている。VNetに接続しているVMからアクセスするにあたり、名前解決をしたいのだが、うまくいかない。どうすればいいか?
そのものズバリの答えがドキュメントにある。
DNS
https://learn.microsoft.com/azure/container-apps/networking#dns
なのでそれで終わってもいいのだが、はまりどころをメモしておく。
今回の問い合わせ主の場合、
- VNetスコープのイングレス
- カスタムドメインは使っていない
だったので、以下の設定が必要。
- Private DNS Zoneの構成
- Private DNS ZoneへのVNetリンク
1. Private DNS Zoneの構成
ドキュメントに記載の通り、Container Apps環境の既定のドメインをContainer Apps環境の静的IPアドレスに解決する、Private DNS Zoneを作成する必要がある。Azure Private DNSを使う場合は、以下を設定・構成する。
- Private DNS Zoneの名前は、コンテナー アプリ環境の既定のドメイン (<一意の識別子>.<リージョン名>.azurecontainerapps.io)であること
- Container Apps環境の静的IPアドレスを指すAレコードをContainer AppsのAレコードとして登録すること
例えば以下のようなContainer Appsを作成していたとすると、アプリケーションのURLは黄色でマークした通り、https://logicojp-aca.kindbeach-6e80433e.westus.azurecontainerapps.io
である。このkindbeach-6e80433e.westus.azurecontainerapps.io
を使ってPrivate DNS Zoneを作成する。

続いて、Container Apps環境をPortalで確認すると、静的IPアドレスは10.0.100.240
であることがわかる。このIPアドレスをlogicojp-aca
のAレコードとして作成する。

Private DNS Zoneはこんな感じ。

2. Private DNS ZoneをVNetに紐付ける
Private DNS Zoneを作成しても、VNetから利用できるようにしなければ、名前解決に失敗する。そこで必要な作業がVNetリンク。設定 (Settings) >仮想ネットワークリンク (Virtual network links) で、【+追加 (Add) 】をクリックし、リンク名、紐付けるVNetを選択もしくは明示的にリソースIDで指定し、【OK】をクリックする。

これでおしまい。
テスト
ドキュメントに記載の通り設定しているので、特に問題は起こらない(はず)と思われるが、一応確認しておく。VNetにContainer Appsが使うサブネットとは別のサブネットを作成し、そこにVMを立てておく。VNetリンク済みなので、VMからContainer Appsにアクセスすれば、アプリケーションは応答してくれるはず。
今回はテスト目的で、Container Appsの送信アドレスを確認できるアプリケーションを使っている。このJSON内のIPアドレス(20.245.112.171
)はContainer Appsの送信IPと一致していることがわかる(というか、一致していないと困る)。
