Azure Container Apps でアプリのイングレスを構成する
この記事では、コンテナー アプリのイングレス機能を有効にする方法について説明します。 イングレスは、アプリケーション全体に適用される設定です。 イングレス設定の変更はすべてのリビジョンに同時に適用され、新しいリビジョンは生成されません。
イングレス設定
以下のイングレス テンプレート プロパティを設定できます。
プロパティ | 説明 | 値 | 必須 |
---|---|---|---|
allowInsecure |
コンテナー アプリへの、セキュリティで保護されていないトラフィックを許可します。 true に設定すると、ポート 80 への HTTP 要求は HTTPS を使用してポート 443 に自動的にリダイレクトされず、安全でない接続が許可されます。 |
false (既定値)、true (安全でない接続を有効にできます) |
いいえ |
clientCertificateMode |
mTLS 認証のクライアント証明書モード。 Ignore は、転送時にサーバーがクライアント証明書を削除することを示します。 Accept は、サーバーはクライアント証明書を転送するがクライアント証明書を必要としないことを示します。 Require は、サーバーがクライアント証明書を必要とすることを示します。 | Required 、Accept 、Ignore (既定値) |
いいえ |
customDomains |
Container Apps のホスト名についてのカスタム ドメインのバインド。 カスタム ドメインと証明書に関するページを参照してください | バインドの配列 | いいえ |
exposedPort |
(TCP イングレスのみ) TCP がリッスンする場所のポート。 external が true の場合、値は Container Apps 環境で一意である必要があります。 |
1 から 65535 へのポート番号。 (80 や 443 にはできません) |
いいえ |
external |
Container Apps 環境外からアプリへのイングレスを許可します。 | true または false (既定値) |
はい |
ipSecurityRestrictions |
IP イングレスの制限。 IP イングレス制限の設定に関するページを参照してください | ルールの配列 | いいえ |
stickySessions.affinity |
セッション アフィニティを有効にします。 | none (既定値)、sticky |
いいえ |
targetPort |
コンテナー アプリが受信要求をリッスンするポート。 | この値には、コンテナー アプリで使うポート番号を設定します。 HTTP イングレスの場合、アプリケーションのイングレス エンドポイントは常にポート 443 で公開されています。 |
はい |
traffic |
トラフィックの分割により、リビジョン間の分割に重み付けします。 | ルールの配列 | いいえ |
transport |
トランスポート プロトコルの種類。 | auto (既定値) では HTTP/1 または HTTP/2 を、http では HTTP/1 を、http2 では HTTP/2 を、tcp では TCP を検出します。 |
いいえ |
ポートの自動検出
コンテナー アプリで HTTP イングレスが有効になっていて、ターゲット ポートを設定していない場合、Azure Container Apps は、コンテナー上のすべてのリッスン ポートをスキャンすることで、ターゲット ポートを自動的に検出します。 検出されたポートが 1 つしかない場合、そのポートはコンテナー アプリのターゲット ポートとして設定されます。 検出されたポートが 1 つ以上ある場合、コンテナー アプリはターゲット ポートを自動的に設定せず、ターゲット ポートを手動で設定する必要があります。
- ポートの自動検出は、TCP トラフィックではなく HTTP トラフィックに対してのみ機能します。
- ポート 80 またはポート 443 でリッスンしている HTTP 正常性プローブがある場合、これはポートの自動検出に干渉する可能性があります。 既定のイングレス構成では、TCP 正常性プローブが使用されます。 詳細については、「正常性プローブ」を参照してください。
イングレスの有効化
コンテナー アプリのイングレスは、Azure CLI、ARM テンプレート、または Azure portal を使用して構成できます。
この az containerapp ingress enable
コマンドにより、コンテナー アプリのイングレスが有効になります。 ターゲット ポートを指定する必要があります。また、トランスポートの種類が tcp
の場合は、必要に応じて公開ポートを設定できます。
az containerapp ingress enable \
--name <app-name> \
--resource-group <resource-group> \
--target-port <target-port> \
--exposed-port <tcp-exposed-port> \
--transport <transport> \
--type <external>
--allow-insecure
az containerapp ingress enable
のイングレス引数:
オプション | プロパティ | 説明 | 値 | 必須 |
---|---|---|---|---|
--type |
外部 | どこからであってもアプリへのイングレスを許可するか、イングレスを内部 Container Apps 環境に制限します。 | external または internal |
はい |
--allow-insecure |
allowInsecure | アプリへの HTTP 接続を許可します。 | いいえ | |
--target-port |
targetPort | コンテナーが受信要求をリッスンするポート。 | この値には、コンテナーで使用するポート番号を設定します。 アプリケーションのイングレス エンドポイントは、常にポート 443 で公開されています。 |
はい |
--exposed-port |
exposedPort | (TCP イングレスのみ) TCP イングレスのポート。 external が true の場合 (イングレスが外部からのものの場合)、値は Container Apps 環境内で一意である必要があります。 |
1 から 65535 へのポート番号。 (80 や 443 にはできません) |
いいえ |
--transport |
transport | トランスポート プロトコルの種類。 | auto (既定値) では HTTP/1 または HTTP/2 を、http では HTTP/1 を、http2 では HTTP/2 を、tcp では TCP を検出します。 |
いいえ |
ポータルを使用してコンテナー アプリのイングレスを有効にします。
コンテナー アプリを作成するときにイングレスを有効にすることも、既存のコンテナー アプリのイングレスを有効にすることもできます。
- コンテナー アプリを作成するときにイングレスを構成するには、コンテナー アプリ作成ウィザードの [アプリの構成] タブから [イングレス] を選択します。
- 既存のコンテナー アプリのイングレスを構成するには、コンテナー アプリのリソース ページの [設定] メニューから [イングレス] を選択します。
コンテナー アプリのイングレスの有効化:
コンテナー アプリを作成するときに、Azure portal を使用してイングレスを構成できます。
- [イングレス] を [有効] に設定します。
- コンテナー アプリのイングレス設定を構成する
- 内部イングレスには [Container Apps 環境に限定] を選択し、外部イングレスには [どこからでもトラフィックを受け入れ] を選択します。
- [イングレスの種類] として、[HTTP] または [TCP] を選択します (TCP イングレスは、カスタム仮想ネットワークを使用して構成された環境でのみ使用できます)。
- [イングレスの種類] で [HTTP] を選択した場合は、[トランスポート] で [自動]、[HTTP/1]、または [HTTP/2] を選択します。
- アプリへの HTTP 接続を許可する場合は、[セキュリティで保護されていない接続] を選択します。
- コンテナー アプリのターゲット ポートを入力します。
- [トランスポート] オプションで [TCP] を選択した場合は、コンテナー アプリの公開ポートを入力します。 公開ポート番号は、
1
から65535
までにできます。 (80
や443
にはできません)
コンテナー アプリの [イングレス] 設定ページでは、IP 制限を構成することもできます。 IP 制限の構成については、IP 制限に関するページを参照してください。
ingress
構成プロパティを使用して、コンテナー アプリのイングレスを有効にします。 external
プロパティを true
に設定し、transport
プロパティと targetPort
プロパティを設定します。
-external
プロパティは、外部の場合は true に、内部イングレスの場合は false に設定できます。
transport
は、HTTP/1 または HTTP/2 を検出するにはauto
に、HTTP/1 の場合はhttp
に、HTTP/2 の場合はhttp2
に、TCP の場合はtcp
に設定します。targetPort
は、コンテナーで使用するポート番号に設定します。 アプリケーションのイングレス エンドポイントは、常にポート443
で公開されています。- トランスポートの種類が
tcp
の場合は、exposedPort
プロパティを TCP イングレス用のポートに設定します。 イングレスが外部からの場合、値は Container Apps 環境内で一意である必要があります。1
から65535
へのポート番号。 (80
や443
にはできません)
{
...
"configuration": {
"ingress": {
"external": true,
"transport": "tcp",
"targetPort": 80,
"exposedPort": 8080,
},
}
}
イングレスを無効にする
az containerapp ingress
コマンドを使用してコンテナー アプリのイングレスを無効にします。
az containerapp ingress disable \
--name <app-name> \
--resource-group <resource-group> \
ポータルを使用してコンテナー アプリのイングレスを無効にできます。
- コンテナー アプリ ページの [設定] メニューから [イングレス] を選択します。
- [イングレス] の [有効] 設定をオフにします。
- [保存] を選択します。
properties.configuration
から ingress
構成プロパティを省略して、コンテナー アプリのイングレスを完全に無効にします。
その他の TCP ポートを使用する
アプリケーションから追加の TCP ポートを公開できます。 詳細については、イングレスの概念に関する記事を参照してください。
Note
この機能を使用するには、コンテナー アプリの CLI 拡張機能が必要です。 最新バージョンのコンテナー アプリ CLI 拡張機能をインストールするには、az extension add -n containerapp
を実行してください。
CLI を使用して、TCP ポート構成で YAML ファイルを参照することによって、他の TCP ポートを追加できます。
az containerapp create \
--name <app-name> \
--resource-group <resource-group> \
--yaml <your-yaml-file>
次に、上記の CLI コマンドで参照できる YAML ファイルの例を示します。 追加の TCP ポートの構成は、additionalPortMappings
の下にあります。
location: northcentralus
name: multiport-example
properties:
configuration:
activeRevisionsMode: Single
ingress:
additionalPortMappings:
- exposedPort: 21025
external: false
targetPort: 1025
allowInsecure: false
external: true
targetPort: 1080
traffic:
- latestRevision: true
weight: 100
transport: http
managedEnvironmentId: <env id>
template:
containers:
- image: maildev/maildev
name: maildev
resources:
cpu: 0.25
memory: 0.5Gi
scale:
maxReplicas: 1
minReplicas: 1
workloadProfileName: Consumption
type: Microsoft.App/containerApps
- [イングレス] ブレード内の [追加の TCP ポート] セクションを展開します。
- [ターゲット ポート] フィールドに、アプリケーションがトラフィックを受け入れる追加の TCP ポートを追加します。 [公開されたポート] が空のままの場合、これは [ターゲット ポート] に設定した値と同じ値が使用されます。
- 必要に応じて、[イングレス トラフィック] フィールドを変更します。 これにより、各ポートのイングレス トラフィックが制限される場所が構成されます。
- 完了したら、 [保存] をクリックします。
次の ARM テンプレートは、コンテナー アプリに他のポートを追加する方法の例を示しています。 コンテナー アプリの properties
内で、configuration
の ingress
セクション内の additionalPortMappings
の下に、追加するポートをそれぞれ追加する必要があります。 以下に例を示します。
{
...
"properties": {
...
"configuration": {
"ingress": {
...
"additionalPortMappings": [
{
"external": false
"targetPort": 80
"exposedPort": 12000
}
]
}
}
...
}