Azure Container Apps での HTTPS または TCP イングレスの設定

Azure Container Apps を使用すると、イングレスを有効にすることで、コンテナー アプリをパブリック Web、VNET、または環境内の他のコンテナー アプリに公開できます。 イングレスを有効にすると、Azure Load Balancer、パブリック IP アドレス、またはその他の Azure リソースを作成しなくても、受信 HTTPS 要求を有効にすることができます。

各コンテナー アプリは、異なるイングレス設定で構成できます。 たとえば、パブリック Web に公開されるコンテナー アプリと、Container Apps 環境内からのみアクセスできるコンテナー アプリを 1 つ設けられます。

イングレスの種類

Azure Container Apps では、HTTPS と TCP の 2 種類のイングレスがサポートされています。

HTTPS

HTTPS イングレスが有効になっているコンテナー アプリには、次のような特徴があります。

  • TLS 終端をサポートする
  • HTTP/1.1 および HTTP/2 をサポートする
  • WebSocket と gRPC をサポートする
  • HTTPS エンドポイントは常に TLS 1.2 を使用し、イングレス ポイントで終了する
  • エンドポイントは、常にポート 80 (HTTP 用) と 443 (HTTPS 用) を公開する
    • 既定では、ポート 80 への HTTP 要求は 443 の HTTPS に自動的にリダイレクトされる
  • コンテナー アプリには、完全修飾ドメイン名 (FQDN) を使用してアクセスする
  • 要求のタイムアウトは 240 秒である

TCP (プレビュー)

TCP イングレスは、HTTP または HTTPS 以外の TCP ベースのプロトコルを使用するコンテナー アプリを公開する場合に役立ちます。

注意

TCP イングレスはパブリック プレビュー段階であり、カスタム VNET を使用する Azure Container Apps 環境でのみサポートされます。

TCP イングレスが有効になっているコンテナー アプリには、次のような特徴があります。

  • コンテナー アプリには、完全修飾ドメイン名 (FQDN) と公開されているポート番号を使用してアクセスする
  • 同じ環境内の他のコンテナー アプリは、その名前 (Azure Container Apps リソースの name プロパティで定義) と公開されているポート番号を使用して、TCP イングレス対応コンテナー アプリにアクセスすることも可能

構成

イングレスは、アプリケーション全体に適用される設定です。 イングレス設定の変更はすべてのリビジョンに同時に適用され、新しいリビジョンは生成されません。

イングレス構成セクションは、次のような形式になります。

{
  ...
  "configuration": {
      "ingress": {
          "external": true,
          "targetPort": 80,
          "transport": "auto"
      }
  }
}

イングレスを構成するときには、次の設定を使用できます。

プロパティ 説明 必須
external イングレス対応アプリが Container Apps 環境の外部からアクセスできるかどうか。 アプリ環境エンドポイントの構成に応じて、インターネットまたは VNET から表示可能にするには true、アプリ環境内でのみ表示可能にするには false。 (既定値)。 はい
targetPort コンテナーが受信要求をリッスンするポート。 この値には、コンテナーで使用するポート番号を設定します。 アプリケーションのイングレス エンドポイントは、常にポート 443 で公開されています。 はい
exposedPort (TCP イングレスのみ) アプリへのアクセスに使用されるポート。 externaltrue の場合、値は Azure Container Apps 環境で一意である必要があり、80 または 443 にできません。 1 から 65535 へのポート番号。 いいえ
transport 転送の種類。 HTTP/1 の場合 http、HTTP/2 の場合 http2、HTTP/1 または HTTP/2 (既定) を自動的に検出するには auto、TCP の場合 tcp いいえ
allowInsecure コンテナー アプリへの、セキュリティで保護されていないトラフィックを許可します。 false (既定値)、true

true に設定した場合、ポート 80 への HTTP 要求は HTTPS を使用してポート 443 に自動的にリダイレクトされず、安全でない接続が許可されます。
いいえ

注意

アプリケーションのイングレスを無効にするには、ingress 構成プロパティ全体を省略します。

完全修飾ドメイン名

イングレスが有効になっている場合、アプリケーションには完全修飾ドメイン名 (FQDN) が割り当てられます。 ドメイン名の形式は次のとおりです。

イングレスの可視性の設定 完全修飾ドメイン名
外部 <APP_NAME>.<UNIQUE_IDENTIFIER>.<REGION_NAME>.azurecontainerapps.io
内部 <APP_NAME>.internal.<UNIQUE_IDENTIFIER>.<REGION_NAME>.azurecontainerapps.io

HTTP イングレスの場合、トラフィックは、ホスト ヘッダー内の FQDN に基づいて個々のアプリケーションにルーティングされます。

TCP イングレスの場合、トラフィックは FQDN とその 公開ポート番号に基づいて個々のアプリケーションにルーティングされます。 同じ環境内の他のコンテナー アプリは、名前 (コンテナー アプリの name プロパティで定義) とその exposedPort 番号を使用して、TCP イングレス対応コンテナー アプリにアクセスすることもできます。

外部イングレス可視性を持つアプリケーションの場合は、次の条件が適用されます。

  • 内部 Container Apps 環境には、アプリケーション用の 1 つのプライベート IP アドレスがあります。 内部環境のコンテナー アプリの場合は、VNET スコープのイングレス用に DNS を構成する必要があります。
  • 外部 Container Apps 環境または VNET 内にない Container Apps 環境には、アプリケーションのパブリック IP アドレスが 1 つ存在します。

環境の設定に対してクエリを実行することで、環境の一意の識別子を取得できます。

完全修飾ドメイン名の取得

この az containerapp show コマンドは、コンテナーアプリの完全修飾ドメイン名を返します。

az containerapp show \
  --resource-group <RESOURCE_GROUP_NAME> \
  --name <CONTAINER_APP_NAME> \
  --query properties.configuration.ingress.fqdn

この例では、で囲まれたプレースホルダーを <> 実際の値に置き換えます。

このコマンドから返される値は、次の例のようなドメイン名に似ています。

myapp.happyhill-70162bb9.canadacentral.azurecontainerapps.io

IP アドレス範囲別の受信アクセス制限 (プレビュー)

既定では、イングレスではトラフィックはフィルター処理されません。 IP アドレスに基づいてアクセスを制限する制限を追加できます。 トラフィックをフィルター処理するには、次の 2 つの方法があります。

  • 許可リスト: すべての受信トラフィックを拒否しますが、IP アドレス範囲のリストからのアクセスを許可します
  • 許可リスト: すべての受信トラフィックを拒否しますが、IP アドレス範囲のリストからのアクセスを許可します

注意

定義されている場合、すべてのルールは同じ型である必要があります。 許可規則と拒否規則を組み合わせることはできません。

サポートされているのは、IPv4 アドレスです。 クラスレス ドメイン間ルーティング (CIDR) 表記で IPv4 アドレス ブロックを定義します。 CIDR 表記の詳細については、「クラスレス ドメイン間ルーティング」を参照してください。

許可リストを構成する

指定した IP 範囲からの受信トラフィックを許可するには、次の Azure CLI コマンドを実行します。

az containerapp ingress access-restriction set \
   --name MyContainerapp \
   --resource-group MyResourceGroup \
   --rule-name restrictionName \
   --ip-address 192.168.1.1/28 \
   --description "Restriction description." \
   --action Allow

--ip-address パラメーターに異なる IP アドレス範囲を指定してコマンドを繰り返し、許可規則をさらに追加します。 1 つ以上の許可ルールを構成すると、少なくとも 1 つのルールに一致するトラフィックのみが許可されます。 その他のトラフィックはすべて拒否されます。

拒否リストを構成する

指定した IP 範囲からの受信トラフィックを拒否するには、次の Azure CLI コマンドを実行します。

az containerapp ingress access-restriction set \
  --name MyContainerapp \
  --resource-group MyResourceGroup \
  --rule-name my-restriction \
  --ip-address 192.168.1.1/28 \
  --description "Restriction description."
  --action Deny

--ip-address パラメーターに異なる IP アドレス範囲を指定してコマンドを繰り返し、拒否規則をさらに追加します。 1 つ以上の拒否ルールを構成すると、少なくとも 1 つのルールに一致するトラフィックのみが拒否されます。 その他のトラフィックはすべて許可されます。

アクセス制限の削除

アクセス制限を削除するには、次の Azure CLI コマンドを実行します。

az containerapp ingress access-restriction remove
  --name MyContainerapp \
  --resource-group MyResourceGroup \
  --rule-name my-restriction

次のステップ