カスタムVNetにAzure Container Appsをデプロイしたときの名前解決

このエントリは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と一致していることがわかる(というか、一致していないと困る)。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中