Kubernetesの中にアプリケーションを立てただけでは、インターネットから直接アクセスすることはできません。この章では、どうすれば外部ユーザーがKubernetes上のアプリにアクセスできるようになるか、そのしくみを整理していきます。
🔒 クラスタは基本的に「閉じた世界」
KubernetesのPodやServiceは、**クラスタ内ネットワーク(仮想ネットワーク)**上で動いています。外部から直接アクセスできないのはセキュリティや設計上の理由です。
そのため、「外部 → クラスタ内」への経路を作る仕組みが必要になります。
🛣 外部アクセスの3つの方法
Kubernetesでは、主に次の3つの方法で外部公開を行います:
方法 | 用途 | 特徴 |
---|---|---|
NodePort | テスト用途など簡易公開 | 各Nodeのポートを経由。ポート番号が固定される |
LoadBalancer | クラウド環境での標準的な公開方法 | 外部IPが自動割り当て。DNSと組みやすい |
Ingress | HTTP/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アドレスが割り当てられたら、次はそれを名前(ドメイン)でアクセスできるようにします。
例:独自ドメインで公開する場合
- ドメイン(例:
example.com
)を取得する - DNSのAレコードをLoadBalancerのIPに向ける
- ブラウザで
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
で疑似体験できる