Azure Container Apps でのイングレス

Azure Container Apps を使用すると、イングレスを有効にすることで、コンテナー アプリをパブリック Web、仮想ネットワーク (VNET)、環境内の他のコンテナー アプリに公開できます。 イングレス設定は、コンテナー アプリへの外部トラフィックと内部トラフィックのルーティングを制御する一連の規則によって適用されます。 イングレスを有効にする場合、受信 HTTP 要求または TCP トラフィックを有効にするために、Azure Load Balancer、パブリック IP アドレス、またはその他の Azure リソースを作成する必要はありません。

イングレスでは、次の機能がサポートされます。

2 つのリビジョン間のイングレス分割を示すイングレス構成の例:

2 つのリビジョン間でトラフィックを分割するイングレス構成を示す図。

構成の詳細については、「 イングレスの構成」を参照してください。

外部イングレスと内部イングレス

イングレスを有効にすると、次の 2 種類のイングレスから選択できます。

  • 外部: パブリック インターネットとコンテナー アプリの内部環境の両方からのトラフィックを受け入れます。
  • 内部: コンテナー アプリの環境内からの内部アクセスのみを許可します。

環境内の各コンテナー アプリは、異なるイングレス設定で構成できます。 たとえば、複数のマイクロサービス アプリを使用するシナリオでは、セキュリティを強化するために、パブリック要求を受け取り、その要求をバックグラウンド サービスに渡す単一のコンテナー アプリがある場合があります。 このシナリオでは、外部イングレスを使用して一般向けコンテナー アプリを構成し、内部イングレスを備えた内部向けコンテナー アプリを構成します。

プロトコルの種類

Container Apps では、イングレス用に HTTP と TCP の 2 つのプロトコルがサポートされています。

HTTP

HTTP イングレスが有効になっている場合、コンテナー アプリには次の機能があります。

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

HTTP ヘッダー

HTTP イングレスは、クライアント要求に関するメタデータをコンテナー アプリに渡すヘッダーを追加します。 たとえば、 ヘッダーは X-Forwarded-Proto 、クライアントが Container Apps サービスとの接続に使用したプロトコルを識別するために使用されます。 次の表に、Container Apps のイングレスに関連する HTTP ヘッダーを示します。

ヘッダー 説明
X-Forwarded-Proto Container Apps サービスに接続するためにクライアントによって使用されるプロトコル。 http または https
X-Forwarded-For 要求を送信したクライアントの IP アドレス。
X-Forwarded-Host Container Apps サービスとの接続に使用するクライアントのホスト名。
X-Forwarded-Client-Cert が設定されている場合 clientCertificateMode のクライアント証明書。 Hash、Cert、Chain のセミコロン区切りリスト。 例: Hash=....;Cert="...";Chain="...";

TCP

Container Apps では、HTTP または HTTPS 以外の TCP ベースのプロトコルがサポートされています。 たとえば、TCP イングレスを使用して、 Redis プロトコルを使用するコンテナー アプリを公開できます。

注意

外部 TCP イングレスは、 カスタム VNET を使用する Container Apps 環境でのみサポートされます。

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

  • 同じ環境内の他のコンテナー アプリにアクセスするには、その名前 (Container Apps リソースの name プロパティで定義) と公開されたポート番号を使用します。
  • 完全修飾ドメイン名 (FQDN) を介して外部からアクセスでき、イングレスが "external" に設定されている場合は公開されるポート番号。

ドメイン名

アプリには、次の方法でアクセスできます。

  • 既定の完全修飾ドメイン名 (FQDN): Container Apps 環境内の各アプリには、環境の DNS サフィックスに基づいて FQDN が自動的に割り当てられます。 環境の DNS サフィックスをカスタマイズするには、「 カスタム環境の DNS サフィックス」を参照してください。
  • カスタム ドメイン名: Container Apps 環境用にカスタム DNS ドメインを構成できます。 詳細については、「 カスタム ドメイン名と証明書」を参照してください。
  • アプリ名: 同じ環境のアプリ間の通信にアプリ名を使用できます。

アプリの FQDN を取得するには、「 場所」を参照してください。

IP 制限

Container Apps では、イングレスの IP 制限がサポートされています。 コンテナー アプリへのアクセスが許可または拒否される IP アドレスを構成するルールを作成できます。 詳細については、「 IP 制限の構成」を参照してください。

認証

Azure Container Apps には、外部イングレス対応コンテナー アプリをセキュリティで保護するための組み込みの認証と承認機能が用意されています。 詳細については、「 Azure Container Apps での認証と承認」を参照してください。

認証とトラフィックの暗号化のためにクライアント証明書 (mTLS) をサポートするようにアプリを構成できます。 詳細については、「クライアント証明書の構成」を参照してください。

トラフィックの分割

Containers Apps を使用すると、アクティブなリビジョン間で受信トラフィックを分割できます。 分割ルールを定義するときは、受信トラフィックの割合を割り当てて、異なるリビジョンに移動します。 詳細については、「トラフィックの分割」を参照してください。

セッション アフィニティ

セッション アフィニティ (スティッキー セッションとも呼ばれます) は、クライアントから同じコンテナー アプリ レプリカにすべての HTTP 要求をルーティングできる機能です。 この機能は、同じレプリカへの一貫した接続を必要とするステートフル アプリケーションに役立ちます。 詳細については、「 セッション アフィニティ」を参照してください。

クロス origin リソース共有 (CORS)

既定では、ページからページの配信元ドメインと一致しないドメインへのブラウザー経由で行われた要求はすべてブロックされます。 Container Apps にデプロイされたサービスに対するこの制限を回避するには、クロスオリジン リソース共有 (CORS) を有効にします。

詳細については、「 Azure Container Apps で CORS を構成する」を参照してください。

次の手順