イングレス(Ingress)は、ITおよびネットワークの分野において「入り口」や「内部への流入」を指す重要な用語です。
インターネットやローカルネットワークを流れるデータ通信において、特定のネットワーク境界を外側から内側へと通過するトラフィックのことを「イングレス」と呼びます。
特にクラウドコンピューティングやコンテナオーケストレーションの分野では、外部からのアクセスを制御するための不可欠な仕組みとして定義されています。
この記事では、ネットワーク全般におけるイングレスの意味から、Kubernetes(K8s)における役割、さらにはセキュリティやコスト面での重要性について詳しく解説します。
ネットワークにおけるイングレスの基本概念
ネットワーク通信において、イングレスは外部ネットワークから特定のネットワーク内に入ってくるトラフィックを指します。
例えば、社内LANやデータセンターのルーターにおいて、外部のインターネットから届くパケットはすべてイングレス通信として扱われます。
イングレスの対義語はエグレス(Egress)であり、こちらは内部から外部へ出て行くトラフィックを意味します。
ネットワーク管理者は、このイングレス通信を適切に監視・制御することで、システムの安定性と安全性を維持しています。
イングレスとエグレスの違い
イングレスとエグレスは、トラフィックがネットワーク境界をどちらの方向に通過するかによって区別されます。
以下の表に、それぞれの主な特徴と役割をまとめました。
| 項目 | イングレス(Ingress) | エグレス(Egress) |
|---|---|---|
| 通信の方向 | 外部から内部への流入 | 内部から外部への流出 |
| 主な役割 | リクエストの受信、サービスの公開 | レスポンスの返信、外部APIの利用 |
| セキュリティ対策 | 不正アクセスの遮断、WAFの適用 | 情報漏洩の防止、C&Cサーバ通信の遮断 |
| クラウドの料金 | 多くの場合で無料(データ受信) | 転送量に応じた課金(データ送信) |
このように、通信の向きを明確に区別することは、ネットワーク構成を設計する上での基本となります。
Kubernetesにおけるイングレスの役割
コンテナ管理システムのKubernetes(K8s)において、イングレスはクラスター外部からのHTTPおよびHTTPSアクセスを管理するためのAPIオブジェクトを指します。
通常、クラスター内のサービス(Service)は内部ネットワークに閉じられていますが、イングレスを利用することで外部公開が可能になります。
イングレスは単なる公開手段ではなく、ホスト名やパスに基づいた高度なルーティング機能を提供します。
L7(アプリケーション層)での高度なルーティング
イングレスの最大の特徴は、OSI参照モデルの第7層であるアプリケーション層で動作することです。
これにより、「example.com/api」へのアクセスはAPIサービスへ、「example.com/web」へのアクセスはWebサービスへと振り分けるパスベースのルーティングが可能になります。
また、複数のドメインを一つのIPアドレスで待ち受ける「名前ベースの仮想ホスト」の設定も容易に行えます。
これにより、限られたグローバルIPリソースを効率的に活用しながら、複雑なWebサービスを構築できます。
イングレスコントローラーの必要性
Kubernetesでイングレスを利用するためには、実際にトラフィックを処理するイングレスコントローラーをクラスター内に配置する必要があります。
イングレス自体は「設定ルール」に過ぎず、そのルールを読み取ってトラフィックを振り分ける実体が必要です。
代表的なイングレスコントローラーには、以下のものがあります。
- NGINX Ingress Controller
- AWS Load Balancer Controller (ALB)
- Google Cloud Load Balancing
- Istio Ingress Gateway
プロジェクトの要件や利用しているクラウドサービスに合わせて、最適なコントローラーを選択することが重要です。
イングレスリソースの定義例
イングレスの設定は、通常YAML形式のファイルで記述されます。
以下は、特定のパスへのアクセスをバックエンドのサービスに振り分けるための基本的な設定例です。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: www.example.com
http:
paths:
- path: /shop
pathType: Prefix
backend:
service:
name: shop-service
port:
number: 80
- path: /blog
pathType: Prefix
backend:
service:
name: blog-service
port:
number: 80
この設定により、URLのパスに応じて異なるバックエンドサービスへと通信が誘導されます。
イングレスのセキュリティ対策
イングレスは外部との接点であるため、ネットワークにおける最大の防御拠点でもあります。
適切なセキュリティ設定を行わないと、脆弱性を突いた攻撃や不正アクセスの入り口となってしまいます。
イングレスフィルタリングとアクセス制御
イングレスフィルタリングとは、外部から流入するパケットの送信元IPアドレスを検証し、不適切な通信を遮断する技術です。
例えば、送信元がプライベートIPアドレスになっている不審なパケット(IPスプーフィング攻撃など)を、ネットワークの入り口で破棄します。
また、特定のIPアドレス範囲からのみアクセスを許可する「ホワイトリスト方式」を適用することで、管理画面などの機密性の高いサービスを保護できます。
SSL/TLSターミネーション
イングレスは、暗号化通信であるHTTPSを終端する(TLSターミネーション)場所としても機能します。
イングレスコントローラーでSSL証明書を一括管理することで、バックエンドの各サービスで個別に証明書を持つ必要がなくなります。
これにより、証明書の更新漏れを防ぎ、運用負荷を大幅に軽減できるというメリットがあります。
さらに、イングレスの段階で暗号化を解除することで、WAF(Web Application Firewall)によるパケット検査が可能になります。
WAF(Web Application Firewall)との連携
イングレスにWAFを導入することで、SQLインジェクションやクロスサイトスクリプティング(XSS)などの攻撃をリアルタイムで検知・遮断できます。
クラウド環境では、AWS WAFやAzure WAFをイングレス(ロードバランサー)に直接統合するのが一般的です。
これにより、アプリケーション本体に届く前に悪意のあるリクエストを排除し、システムの堅牢性を高めることができます。
クラウドにおけるイングレスとコストの関係
多くのパブリッククラウドサービス(AWS、Azure、GCPなど)において、イングレス通信のコスト体系には特徴があります。
一般的に、外部からクラウド環境内へのデータ流入(イングレス)は無料に設定されていることが多いです。
これは、ユーザーがデータをクラウドにアップロードしやすくするための戦略的な料金設定と言えます。
注意すべきコストのポイント
ただし、データ転送料金が無料であっても、以下のコストが発生する可能性があることに注意が必要です。
- イングレスを処理するロードバランサー(ALBやNLBなど)の稼働料金
- WAFなどのセキュリティサービスの検査料金
- 異なるリージョンやアベイラビリティゾーン(AZ)をまたぐ通信の転送料金
大規模なシステムでは、データの「入り口」での処理負荷に応じたリソース料金が無視できない金額になることがあります。
システム設計時には、単純な転送量だけでなく、関連するコンポーネントの費用も合算して見積もる必要があります。
まとめ
イングレス(Ingress)は、ネットワークの外部から内部へと向かう通信の通り道であり、システムの安全な公開に欠かせない概念です。
単なる「入り口」としての機能だけでなく、KubernetesにおけるL7ルーティングやSSLの集中管理、さらにはWAFによる強力なセキュリティ保護など、多岐にわたる役割を担っています。
現代のITインフラ構築において、イングレスを正しく理解し最適に設定することは、パフォーマンス向上とリスク低減の両面で非常に重要です。
システムの規模やセキュリティ要件に応じた最適なイングレス戦略を立てることで、より信頼性の高いネットワーク環境を実現できるでしょう。
