Azure Container Apps における Ingress の構成パターン例 2 (マイクロサービス)
はじめに
この記事は、Azure Container Apps における Ingress の構成パターンを実際に構築してみて触ってみた記録です。
この記事ではパターン②を取り上げます。
構成
作成した環境は以下の通りです。今回は上記mermaidに含まれる(任意)のコンポーネントは省略しています。
前回パターン①で作成した環境で、aca-without-vnet の Ingress を環境内に限定します。
Container Apps
aca-without-vnet
Ingress の構成でトラフィックを環境内に限定にすることで、FQDN に .internal. が表示されるようになります。
※ パターン①で試しましたが、.internal. FQDNは、環境内のトラフィックに限定しない状態でも利用可能です。

$ az containerapp show -g zenn-aca-without-vnet -n aca-without-vnet \
--query "properties.{environmentId: environmentId,
configuration: {ingress: configuration.ingress},
latestRevisionFqdn: latestRevisionFqdn,
outboundIpAddresses: outboundIpAddresses}" \
-o json
{
"configuration": {
"ingress": {
"additionalPortMappings": null,
"allowInsecure": false,
"clientCertificateMode": "Ignore",
"corsPolicy": null,
"customDomains": null,
"exposedPort": 0,
"external": false, // ★★★ external が false
"fqdn": "aca-without-vnet.internal.whitemoss-043fed62.japaneast.azurecontainerapps.io", // ★★★ FQDNに .internal.が追加される
"ipSecurityRestrictions": null,
"stickySessions": {
"affinity": "none"
},
"targetPort": 80,
"targetPortHttpScheme": null,
"traffic": [
{
"latestRevision": true,
"weight": 100
}
],
"transport": "Auto"
}
},
"environmentId": "/subscriptions/<サブスクリプションID>/resourceGroups/zenn-aca-without-vnet/providers/Microsoft.App/managedEnvironments/aca-env-without-vnet",
"latestRevisionFqdn": "aca-without-vnet--internal.internal.whitemoss-043fed62.japaneast.azurecontainerapps.io", // ★★★ FQDNに .internal.が追加される
"outboundIpAddresses": [
"20.210.72.88",
"20.210.72.103",
"135.149.35.113",
・・・//省略 合計 70件のパブリックIPが含まれる。
]
}
アプリケーションへのルーティングの確認
Env 外のクライアントからのアクセス
aca-without-vnet.whitemoss-043fed62.japaneast.azurecontainerapps.io に対するHTTPリクエストは Env の staticIp である 130.33.219.240 に解決されますが、404 応答となります。
この応答はパターン①で確認した存在しない App 名を指定した場合と同様の応答になります。

$ curl -v https://aca-without-vnet.whitemoss-043fed62.japaneast.azurecontainerapps.io/
* Trying 130.33.219.240:443...
* Connected to aca-without-vnet.whitemoss-043fed62.japaneast.azurecontainerapps.io (130.33.219.240) port 443 (#0)
<省略>
> GET / HTTP/2
> Host: aca-without-vnet.whitemoss-043fed62.japaneast.azurecontainerapps.io
> user-agent: curl/7.81.0
> accept: */*
>
<!DOCTYPE html>
<html>
<head>
<title>Azure Container App - Unavailable</title>
<省略>
<div id="feature">
<div id="content">
<h1 id="unavailable">Error 404 - This Container App is stopped or does not exist.</h1>
<p id="tryAgain">The Container App you have attempted to reach is currently stopped or does not exist.</p>
<p id="toAdmin">If you are the Container App administrator, please visit <a href="https://portal.azure.com/">Azure Portal</a>.</p>
</div>
</div>
</body>
</html>
* Connection #0 to host aca-without-vnet.whitemoss-043fed62.japaneast.azurecontainerapps.io left intact
aca-without-vnet.internal.whitemoss-043fed62.japaneast.azurecontainerapps.io についても同様に 404 となり、Env 外からはアクセスできません。
$ curl -I https://aca-without-vnet.internal.whitemoss-043fed62.japaneast.azurecontainerapps.io/
HTTP/2 404
content-type: text/html; charset=utf-8
content-length: 1946
date: Wed, 07 Jan 2026 08:09:00 GMT
Env 内からのアクセス
前回と同様に Nginx コンテナから試してみます。
デフォルト FQDN(.internal.なし) でのアクセス
パブリックIPに解決されて 404 となります。これは Env 外からアクセスしたことと同等といえます。
root@aca-without-vnet-2--0000002-77756d5fdc-hdcwc:/# nslookup aca-without-vnet.whitemoss-043fed62.japaneast.azurecontainerapps.io
Server: 127.0.0.11
Address: 127.0.0.11#53
Non-authoritative answer:
Name: aca-without-vnet.whitemoss-043fed62.japaneast.azurecontainerapps.io
Address: 130.33.219.240
root@aca-without-vnet-2--0000002-77756d5fdc-hdcwc:/# curl -I https://aca-without-vnet.whitemoss-043fed62.japaneast.azurecontainerapps.io/
HTTP/2 404
content-type: text/html; charset=utf-8
content-length: 1946
date: Wed, 07 Jan 2026 08:17:24 GMT
.internal. FQDN でのアクセス
プライベートIP に解決され 200 応答を得ることができます。
root@aca-without-vnet-2--0000002-77756d5fdc-hdcwc:/# nslookup aca-without-vnet.internal.whitemoss-043fed62.japaneast.azurecontainerapps.io
;; Got recursion not available from 127.0.0.11
Server: 127.0.0.11
Address: 127.0.0.11#53
Name: aca-without-vnet.internal.whitemoss-043fed62.japaneast.azurecontainerapps.io
Address: 100.100.0.210
;; Got recursion not available from 127.0.0.11
root@aca-without-vnet-2--0000002-77756d5fdc-hdcwc:/# curl -I https://aca-without-vnet.internal.whitemoss-043fed62.japaneast.azurecontainerapps.io/
HTTP/2 200
accept-ranges: bytes
content-length: 4332
content-type: text/html; charset=utf-8
last-modified: Mon, 13 Oct 2025 15:12:40 GMT
date: Wed, 07 Jan 2026 08:17:51 GMT
<AppName> でのアクセス
プライベートIP に解決され 200 応答を得ることができます。
root@aca-without-vnet-2--0000002-77756d5fdc-hdcwc:/# nslookup aca-without-vnet
;; Got recursion not available from 127.0.0.11
Server: 127.0.0.11
Address: 127.0.0.11#53
Name: aca-without-vnet.k8se-apps.svc.cluster.local
Address: 100.100.241.104
;; Got recursion not available from 127.0.0.11
root@aca-without-vnet-2--0000002-77756d5fdc-hdcwc:/# curl -I http://aca-without-vnet
HTTP/1.1 200 OK
accept-ranges: bytes
content-length: 4332
content-type: text/html; charset=utf-8
last-modified: Mon, 13 Oct 2025 15:12:40 GMT
date: Wed, 07 Jan 2026 08:18:36 GMT
まとめ
無事想定通り aca-without-vnet にデプロイされたアプリケーションに対して、外部からアクセスできないようにすることができました。
この構成を使ったサンプルとして以下が公開されていました。
また下記の workshop の Module 2 においても同様の構成をしています。
今回の構成では、Env 内の App 間の通信は FrontApp のコンソールから curl を用いていますが、アプリ内でHTTP通信を実装していると言い換えることができます。
直接アプリとして通信する以外には、Dapr のサービス間呼び出しを利用する方法もあります。別記事で検証予定。
Discussion