Azure Container Apps でアプリのイングレスを構成する

この記事では、コンテナー アプリのイングレス機能を有効にする方法について説明します。 イングレスは、アプリケーション全体に適用される設定です。 イングレス設定の変更はすべてのリビジョンに同時に適用され、新しいリビジョンは生成されません。

イングレス設定

以下のイングレス テンプレート プロパティを設定できます。

プロパティ 説明 必須
allowInsecure コンテナー アプリへの、セキュリティで保護されていないトラフィックを許可します。 true に設定すると、ポート 80 への HTTP 要求は HTTPS を使用してポート 443 に自動的にリダイレクトされず、安全でない接続が許可されます。 false (既定値)、true (安全でない接続を有効にできます) いいえ
clientCertificateMode mTLS 認証のクライアント証明書モード。 Ignore は、転送時にサーバーがクライアント証明書を削除することを示します。 Accept は、サーバーはクライアント証明書を転送するがクライアント証明書を必要としないことを示します。 Require は、サーバーがクライアント証明書を必要とすることを示します。 RequiredAcceptIgnore (既定値) いいえ
customDomains Container Apps のホスト名についてのカスタム ドメインのバインド。 カスタム ドメインと証明書に関するページを参照してください バインドの配列 いいえ
exposedPort (TCP イングレスのみ) TCP がリッスンする場所のポート。 externaltrue の場合、値は Container Apps 環境で一意である必要があります。 1 から 65535 へのポート番号。 (80443 にはできません) いいえ
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 を検出します。 いいえ

イングレスの有効化

コンテナー アプリのイングレスは、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 イングレスのポート。 externaltrue の場合 (イングレスが外部からのものの場合)、値は Container Apps 環境内で一意である必要があります。 1 から 65535 へのポート番号。 (80443 にはできません) いいえ
--transport transport トランスポート プロトコルの種類。 auto (既定値) では HTTP/1 または HTTP/2 を、http では HTTP/1 を、http2 では HTTP/2 を、tcp では TCP を検出します。 いいえ

ポータルを使用してコンテナー アプリのイングレスを有効にします。

コンテナー アプリを作成するときにイングレスを有効にすることも、既存のコンテナー アプリのイングレスを有効にすることもできます。

  • コンテナー アプリを作成するときにイングレスを構成するには、コンテナー アプリ作成ウィザードの [アプリの構成] タブから [イングレス] を選択します。
  • 既存のコンテナー アプリのイングレスを構成するには、コンテナー アプリのリソース ページの [設定] メニューから [イングレス] を選択します。

コンテナー アプリのイングレスの有効化:

コンテナー アプリを作成するときに、Azure portal を使用してイングレスを構成できます。

  1. [イングレス][有効] に設定します。
  2. コンテナー アプリのイングレス設定を構成する
  3. 内部イングレスには [Container Apps 環境に限定] を選択し、外部イングレスには [どこからでもトラフィックを受け入れ] を選択します。
  4. [イングレスの種類] として、[HTTP] または [TCP] を選択します (TCP イングレスは、カスタム仮想ネットワークを使用して構成された環境でのみ使用できます)。
  5. [イングレスの種類][HTTP] を選択した場合は、[トランスポート][自動][HTTP/1]、または [HTTP/2] を選択します。
  6. アプリへの HTTP 接続を許可する場合は、[セキュリティで保護されていない接続] を選択します。
  7. コンテナー アプリのターゲット ポートを入力します。
  8. [トランスポート] オプションで [TCP] を選択した場合は、コンテナー アプリの公開ポートを入力します。 公開ポート番号は、1 から 65535 までにできます。 (80443 にはできません)

コンテナー アプリの [イングレス] 設定ページでは、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 へのポート番号。 (80443 にはできません)
{
  ...
  "configuration": {
    "ingress": {
        "external": true,
        "transport": "tcp",
        "targetPort": 80,
        "exposedPort": 8080,
    },
  }
}

イングレスを無効にする

az containerapp ingress コマンドを使用してコンテナー アプリのイングレスを無効にします。

az containerapp ingress disable \
    --name <app-name> \
    --resource-group <resource-group> \

ポータルを使用してコンテナー アプリのイングレスを無効にできます。

  1. コンテナー アプリ ページの [設定] メニューから [イングレス] を選択します。
  2. [イングレス][有効] 設定をオフにします。
  3. [保存] を選択します。

コンテナー アプリのイングレスの無効化を示すスクリーンショット。

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

ポータルを使用して Container Apps のイングレス用に TCP ポートを追加するスクリーンショット。

  1. [イングレス] ブレード内の [追加の TCP ポート] セクションを展開します。
  2. [ターゲット ポート] フィールドに、アプリケーションがトラフィックを受け入れる追加の TCP ポートを追加します。 [公開されたポート] が空のままの場合、これは [ターゲット ポート] に設定した値と同じ値が使用されます。
  3. 必要に応じて、[イングレス トラフィック] フィールドを変更します。 これにより、各ポートのイングレス トラフィックが制限される場所が構成されます。
  4. 完了したら、 [保存] をクリックします。

次の ARM テンプレートは、コンテナー アプリに他のポートを追加する方法の例を示しています。 コンテナー アプリの properties 内で、configurationingress セクション内の additionalPortMappings の下に、追加するポートをそれぞれ追加する必要があります。 以下に例を示します。

{
  ...
  "properties": {
    ...
    "configuration": {
      "ingress": {
        ...
        "additionalPortMappings": [
          {
            "external": false
            "targetPort": 80
            "exposedPort": 12000
          }
        ]
      }
    }
  ...
}

次のステップ