Kubernetes Learning 第8章:ServiceとIngress ~クラスタ外との橋渡し~

KubernetesではアプリケーションをPodとして動かしますが、Podは一時的な存在でIPアドレスも固定されません。

そのため、「ユーザーがアクセスできるようにする仕組み」が必要です。
それが ServiceIngress です。


🔹 Service:Podへの安定したアクセス口を提供する

Serviceは「動的なPodに対する固定的なアクセス手段」を提供します。

主な役割:

  • PodのIPが変わっても、Service経由なら常にアクセスできる
  • ロードバランシングを行い、複数Podに振り分ける
  • クラスタ内/外からのアクセスを柔軟に制御できる

主な種類

種類用途
ClusterIP(デフォルト)クラスタ内部でのみアクセス可能
NodePortノードの固定ポートを公開し、外部アクセスを可能に
LoadBalancerクラウド環境で外部LBを自動作成(GCP/AWSなど)
ExternalName外部ドメインに名前解決(少し特殊なケース)

例:NodePort型 Service の定義

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30080

selector: ServiceがどのPodに流すかを決定(ラベルにより)

nodePort: ホストマシンのポートを開けて、外部からアクセスできるようにする

curl http://<NodeIP>:30080/

🔸 Ingress:HTTP(S)向けの統合的なルーティング

Serviceはポート単位での公開ですが、複数のアプリを一つの入口でさばく場合、**Ingress(HTTPルーター)**が便利です。

Ingressは 「クラスタの玄関(HTTP用)」として、URLやホスト名ごとにリクエストをルーティングします。

イメージ図

ユーザー
   ↓
 [Ingress] -- /api → Service A
     ↓
         -- /web → Service B

例:簡単なIngress定義(Nginx Ingress Controllerが前提)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: sample-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /app
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80
  • /app というパスへのアクセスが my-service に流れます
  • Ingress単体では機能せず、Ingress Controller(Nginxなど)が必要

📊 ServiceとIngressの使い分け

特徴ServiceIngress
対象プロトコルTCP/UDP 全般HTTP/HTTPS専用
アクセス単位ポート単位パス/ホスト単位
ロードバランシング可能(Pod間)可能(複数サービスへ)
外部公開の手段NodePort / LoadBalancerなど外部URLを使った柔軟なルーティング
利用用途単体アプリ・API公開など複数アプリの統合的な公開に最適

💡 まとめ

  • Serviceは「Podに対する安定したアクセス口」
    → 単体でのアプリ公開、Pod管理には必須
  • Ingressは「HTTPアクセスのルーター」
    → 1つのドメインで複数アプリを出し分けたいときに最適

mh

Related Posts

Kubernetes Learning 第7章:Pod / ReplicaSet / Deployment / StatefulSet を理解する

Kubernetesではアプリケーションを「コンテナで動かす…

Kubernetes Learning 第6章:DeploymentとPodを動かす簡単なハンズオン

Kubernetesを使ううえで最も基本的かつ実用的なリソー…

You Missed

Kubernetes Learning 第8章:ServiceとIngress ~クラスタ外との橋渡し~

  • 投稿者 mh
  • 5月 12, 2025
  • 9 views

Android application development 第12章:Activityのライフサイクルと onCreate / onStart / onResume の扱い方

  • 投稿者 mh
  • 5月 12, 2025
  • 10 views

Kubernetes Learning 第7章:Pod / ReplicaSet / Deployment / StatefulSet を理解する

  • 投稿者 mh
  • 5月 11, 2025
  • 21 views

Android application development 第11章:Fragmentの導入とActivityとの連携

  • 投稿者 mh
  • 5月 11, 2025
  • 23 views

Kubernetes Learning 第6章:DeploymentとPodを動かす簡単なハンズオン

  • 投稿者 mh
  • 5月 10, 2025
  • 24 views

Android application development 第10章:Bundleを使ったデータの受け渡し

  • 投稿者 mh
  • 5月 10, 2025
  • 24 views