本文へスキップ
BecomeCoder

Kubernetesコース · 第4章 ネットワーキング ― Service と Ingress · レッスン23

Ingress ― HTTPの入口とパスルーティング

ブラウザで完結

導入

Web サービスを公開したいとき、画面用・API 用・管理画面用…とアプリが増えるたびに LoadBalancer の Service を1つずつ立てると、コストも管理も膨れ上がります。Ingress は、HTTP/HTTPS 専用の一枚看板の入口を用意し、ホスト名やパスごとに適切な Service へ振り分ける仕組みです。

説明

Ingress は L7(レイヤー7、HTTP のレベル) で動く交通整理役です。「/api で来たら api の Service へ、/ で来たら web の Service へ」「shop.example.com はこっち、admin.example.com はあっち」といった パスルーティング/ホストルーティング を1か所で定義できます。加えて TLS 終端https://暗号化をここで解く役目)も担えます。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: shop-ingress
spec:
  rules:
    - host: shop.example.com
      http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: api-svc     # /api は api-svc へ
                port:
                  number: 80
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web-svc     # それ以外は web-svc へ
                port:
                  number: 80

ここで注意が1つ。上の Ingress はルール(設定)を書いた紙にすぎません。実際にトラフィックをさばく実体として、Ingress Controller(イングレスコントローラー)クラスタに導入しておく必要があります。よく使われるのは nginx ベースのものです。Ingress Controller が、あなたが書いた Ingress のルールを読み取り、そのとおりに通信を振り分けます。

graph TB
    User["外部の利用者<br/>shop.example.com"]
    User --> ING["Ingress Controller<br/>(nginx等・唯一の入口)"]
    ING -->|"/api"| S1["Service: api-svc"]
    ING -->|"/"| S2["Service: web-svc"]
    S1 --> P1["api の Pod"]
    S2 --> P2["web の Pod"]

まとめると、Service は「変わらない内部の宛先」、Ingress は「外部からの HTTP を1か所で受けて振り分ける入口」です。小さな検証なら NodePort、クラウド本番外部公開は LoadBalancer や Ingress、という使い分けを覚えておきましょう。

実際に動かしてみよう

上がマニフェスト(YAML)エディタ、下が kubectl の端末です。エディタの内容は `manifest.yaml` として保存され、下で `kubectl apply -f manifest.yaml` を実行するとクラスタに反映されます(pod.yaml / deploy.yaml / service.yaml も最初から置いてあります)。`kubectl get pods` / `describe` / `scale` / `rollout` などで結果を確かめましょう(本物のKubernetesではなく、動きを再現した軽量なシミュレータです)。各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」で戻せます。

kubectl(シミュレート)

マニフェスト(YAML)を書いて kubectl コマンドを試せる学習用クラスタを読み込みます(本物のKubernetesではなく、apply/get/describe/scale/rollout などの動きを再現した軽量な自作シミュレータです)。
スクロールして表示された時点でも自動で読み込まれます。