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 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

Kubernetes Learning 第36章:Argo CDとFluxの概要~Kubernetesの自動運用を支えるGitOpsツール~

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 9 views

Kubernetes Learning 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

  • 投稿者 mh
  • 6月 17, 2025
  • 11 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第10章:Cloud DNS:インターネットの「電話帳」サービス

  • 投稿者 mh
  • 6月 16, 2025
  • 15 views

Kubernetes Learning 第36章:Argo CDとFluxの概要~Kubernetesの自動運用を支えるGitOpsツール~

  • 投稿者 mh
  • 6月 15, 2025
  • 30 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第9章:IPアドレス(外部IP、内部IP、静的IP):GCPリソースの「住所」と「電話番号」

  • 投稿者 mh
  • 6月 14, 2025
  • 28 views

Kubernetes Learning 第35章:GitOpsとは?~Kubernetes運用をもっとスマートにする考え方~

  • 投稿者 mh
  • 6月 13, 2025
  • 52 views