0Pricing
Kubernetes Basics · レッスン

外部アクセスのためのIngress

Ingressを設定してServiceへの外部アクセスを管理し、HTTP/Sルーティングとロードバランシングを提供します。

「外部アクセスのためのIngress」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全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: 80

Ingressのデプロイ

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: 80

1つのホストに複数のパス

同じホスト名上の異なる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: 80

Ingressの目的を確認

Kubernetes Ingressを使用する主なメリットは、次のうちどれですか。

まとめ:Ingressによるスマートルーティング

よくできました。外部ユーザーがアプリケーションとどのようにやり取りするかを管理する重要なコンポーネント、Kubernetes Ingressについて学びました。

  • Ingressは、ホスト名とURLパスに基づく柔軟なHTTP/Sルーティングを提供します。
  • Ingressルールを監視してルーティングを設定するIngress Controller(Nginxなど)が必要です。
  • 単一の外部IPアドレスを通じて複数のServiceを公開できるため、クラスタをより効率的かつ管理しやすくできます。

Ingressを使いこなすことは、堅牢でアクセスしやすいクラウドネイティブアプリケーションを構築するための鍵です。

よくある質問

「外部アクセスのためのIngress」レッスンは無料ですか?

はい。「外部アクセスのためのIngress」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。

「外部アクセスのためのIngress」で何を学びますか?

Ingressを設定してServiceへの外部アクセスを管理し、HTTP/Sルーティングとロードバランシングを提供します。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kubernetes Basicsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「外部アクセスのためのIngress」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKubernetes Basicsレッスンでコードを書いて実行できますか?

はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Serviceによるアプリの公開
  2. Serviceタイプ:ClusterIP、NodePort、LoadBalancer
  3. 外部アクセスのためのIngress
  4. DNSとサービスディスカバリ
← Kubernetes Basicsに戻る