Kubernetes Learning 第16章:外部アクセスとDNS、LoadBalancerのしくみ

Kubernetesの中にアプリケーションを立てただけでは、インターネットから直接アクセスすることはできません。この章では、どうすれば外部ユーザーがKubernetes上のアプリにアクセスできるようになるか、そのしくみを整理していきます。


🔒 クラスタは基本的に「閉じた世界」

KubernetesのPodやServiceは、**クラスタ内ネットワーク(仮想ネットワーク)**上で動いています。外部から直接アクセスできないのはセキュリティや設計上の理由です。

そのため、「外部 → クラスタ内」への経路を作る仕組みが必要になります。


🛣 外部アクセスの3つの方法

Kubernetesでは、主に次の3つの方法で外部公開を行います:

方法用途特徴
NodePortテスト用途など簡易公開各Nodeのポートを経由。ポート番号が固定される
LoadBalancerクラウド環境での標準的な公開方法外部IPが自動割り当て。DNSと組みやすい
IngressHTTP/HTTPSのルーティング管理ホスト名やパスベースで柔軟に振り分け可能

本章では LoadBalancer と DNS を中心に説明します。


🌀 LoadBalancerタイプのServiceとは?

Kubernetesでは、次のようにServiceに type: LoadBalancer を指定するだけで、クラウドプロバイダが自動的にロードバランサを作成してくれます

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 8080

クラウドの場合(GKE / EKS / AKS)

たとえばGKE(Google Kubernetes Engine)の場合、このようなServiceを作成すると:

  • GCP上にHTTPロードバランサが自動作成される
  • グローバルIPが割り当てられる
  • インターネットから直接アクセス可能になる

ローカル環境(Minikubeなど)の場合

MinikubeやKindでは本物のクラウドLBはないため、minikube tunnel などで疑似的に LoadBalancer を扱えます。

minikube tunnel
kubectl get svc my-service

🌍 DNSとの関係

ロードバランサにより、外部からアクセスできるIPアドレスが割り当てられたら、次はそれを名前(ドメイン)でアクセスできるようにします。

例:独自ドメインで公開する場合

  1. ドメイン(例:example.com)を取得する
  2. DNSのAレコードをLoadBalancerのIPに向ける
  3. ブラウザで http://example.com にアクセスするとKubernetes内のServiceに届く

ローカル開発環境では?

  • /etc/hosts に以下のように追加することでテスト可能:
192.168.49.2  myapp.local

これにより、http://myapp.local でローカルクラスター内アプリにアクセス可能になります。


🗂 構成イメージ図

✅ まとめ

  • Kubernetesクラスタは基本的に外部から直接アクセスできない
  • Service type=LoadBalancer を使うと、クラウドで自動的に公開可能に
  • DNSと組み合わせることで、独自ドメインやHTTPS化も実現できる
  • ローカルでは minikube tunnel/etc/hosts で疑似体験できる

mh

Related Posts

Kubernetes Learning 第15章:ServiceとIngressを使った公開

Kubernetesクラスターの中で動いているアプリケーショ…

Kubernetes Learning 第14章:Webアプリケーションの例 〜Spring Boot + MySQLをKubernetesに載せてみる〜

Kubernetesの基本を学んできた今、実際に現場でよくあ…

You Missed

Kubernetes Learning 第16章:外部アクセスとDNS、LoadBalancerのしくみ

  • 投稿者 mh
  • 5月 20, 2025
  • 5 views

Android application development 第20章:非同期処理(Handler / AsyncTask / Coroutineの比較)

  • 投稿者 mh
  • 5月 20, 2025
  • 4 views

Kubernetes Learning 第15章:ServiceとIngressを使った公開

  • 投稿者 mh
  • 5月 19, 2025
  • 14 views

Android application development 第19章:JSONパース(Gson)

  • 投稿者 mh
  • 5月 19, 2025
  • 14 views

Kubernetes Learning 第14章:Webアプリケーションの例 〜Spring Boot + MySQLをKubernetesに載せてみる〜

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

Android application development 第18章:Retrofitを使ったAPI通信

  • 投稿者 mh
  • 5月 18, 2025
  • 17 views