外部アクセスのためのIngress
Ingressを設定してServiceへの外部アクセスを管理し、HTTP/Sルーティングとロードバランシングを提供します。
「外部アクセスのためのIngress」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
NodePortとLoadBalancerの先へ
これまで、アプリケーションを外部に公開するためのNodePortやLoadBalancerなど、さまざまなKubernetes Serviceタイプについて見てきました。
これらは便利ですが、外部アクセス要件が複雑になると、管理が難しくなることがあります。特に、特定のルーティングルールを使って1つのIPアドレス上に多数のアプリケーションやAPIをホストする必要がある場合は、なおさらです。
そこで登場するのが、より強力で柔軟なソリューションであるIngressです。
Kubernetes Ingressの紹介
Ingressは、主にHTTPおよびHTTPSトラフィックを対象として、クラスタ内のサービスへの外部アクセスを管理するKubernetes APIオブジェクトです。
- 外部リクエストの単一の入口として機能します。
- ホスト名やURLパスに基づくHTTP/Sルーティングを可能にします。
- SSL/TLS終端やロードバランシングなどの機能も提供できます。
Ingressは、Webトラフィックを適切な内部Serviceへ振り分ける、賢い交通整理役だと考えるとよいでしょう。
Ingress Controller
Ingressリソース自体はルールの集合にすぎず、トラフィックを直接処理するわけではありません。Ingressを機能させるには、クラスタ内でIngress Controllerを実行する必要があります。
Ingress ControllerはIngressリソースを監視し、定義されたルールに従って外部ロードバランサー(またはリバースプロキシ)を設定します。
代表的なIngress Controllerには、Nginx、Traefik、Google Cloud向けのGCE IngressやAWS Load Balancer Controllerなど、クラウド固有のものがあります。
Ingressルールの仕組み
Ingressは、外部から入ってくるリクエストをクラスタ内の特定のバックエンドServiceに対応付けるルールを定義します。通常、ルールでは次の項目を指定します。
- Host:ドメイン名(例:
www.my-app.com)。 - Path:URLパス(例:
/api、/blog)。 - Backend Service:トラフィックの転送先となるKubernetes Serviceとポート。
Ingress Controllerは、受信するすべてのリクエストについてこれらのルールを評価し、適切な転送先を決定します。
Ingress YAMLの作成
ほかのKubernetesリソースと同様に、IngressはYAMLマニフェストを使って定義します。主要なフィールドを示した基本的な構造は次のとおりです。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-web-service
port:
number: 80シンプルなパスベースIngress
myapp.example.comのルートパス(/)宛てのすべてのトラフィックを、ポート80のmy-web-serviceという名前のServiceにルーティングするIngressリソースを作成しましょう。
このIngressを適用する前に、クラスタ内でmy-web-serviceという名前のDeploymentとServiceが実行されていることを確認してください。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: basic-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-web-service
port:
number: 80Ingressのデプロイ
Ingressリソースをデプロイするには、YAMLをファイル(例:basic-ingress.yaml)に保存し、kubectl applyを使用します。
kubectl apply -f basic-ingress.yaml
kubectl get ingressを使うと、Ingressのステータスを確認できます。その後、Ingress Controllerがこれらのルールに基づいて外部ロードバランサーを設定します。
テストするには通常、ローカルの/etc/hostsファイル(またはDNS)を更新し、myapp.example.comがIngress Controllerの外部IPアドレスを指すようにする必要があります。
ホストベースルーティングの例
Ingressを使うと、異なるホスト名を利用して、1つの外部IPアドレス上で複数のアプリケーションをホストできます。ここでは、app1.example.comをservice-app1に、app2.example.comをservice-app2にルーティングしています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: host-routing-ingress
spec:
rules:
- host: app1.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-app1
port:
number: 80
- host: app2.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-app2
port:
number: 801つのホストに複数のパス
同じホスト名上の異なるURLパスを、別々のバックエンドServiceにルーティングすることもできます。これは、マイクロサービスアーキテクチャや、1つのアプリケーション内の異なるセクションに適しています。
たとえば、api.example.com/usersへのリクエストはusers-serviceに、api.example.com/productsへのリクエストはproducts-serviceに送られます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: path-routing-ingress
spec:
rules:
- host: api.example.com
http:
paths:
- path: /users
pathType: Prefix
backend:
service:
name: users-service
port:
number: 80
- path: /products
pathType: Prefix
backend:
service:
name: products-service
port:
number: 80Ingressの目的を確認
Kubernetes Ingressを使用する主なメリットは、次のうちどれですか。
まとめ:Ingressによるスマートルーティング
よくできました。外部ユーザーがアプリケーションとどのようにやり取りするかを管理する重要なコンポーネント、Kubernetes Ingressについて学びました。
- Ingressは、ホスト名とURLパスに基づく柔軟なHTTP/Sルーティングを提供します。
- Ingressルールを監視してルーティングを設定するIngress Controller(Nginxなど)が必要です。
- 単一の外部IPアドレスを通じて複数のServiceを公開できるため、クラスタをより効率的かつ管理しやすくできます。
Ingressを使いこなすことは、堅牢でアクセスしやすいクラウドネイティブアプリケーションを構築するための鍵です。
AI チューターと学ぶ DevOps Bootcamp — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 142
- レッスン
- 568
よくある質問
「外部アクセスのためのIngress」レッスンは無料ですか?
はい。「外部アクセスのためのIngress」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「外部アクセスのためのIngress」で何を学びますか?
Ingressを設定してServiceへの外部アクセスを管理し、HTTP/Sルーティングとロードバランシングを提供します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「外部アクセスのためのIngress」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。