Kubernetes Namespace
Kubernetes クラスター内のリソースを論理的に分離し、マルチテナントやチーム間の境界を設ける仕組み
Kubernetes Namespace とは
Namespace は、Kubernetes クラスター内のリソースを論理的に分離する仕組みである。1 つのクラスターを複数の仮想クラスターのように使い分けられる。環境 (dev/stg/prod)、チーム、アプリケーションごとに Namespace を分けるのが一般的だ。
基本的な使い方
基本的な使い方の例を示す。
# Namespace の作成
kubectl create namespace production
kubectl create namespace staging
# Namespace を指定してリソースを操作
kubectl get pods -n production
kubectl apply -f deployment.yaml -n production
apiVersion: v1
kind: Namespace
metadata:
name: production
labels:
env: production
team: backend
デフォルトの Namespace
デフォルトの Namespace を以下にまとめる。
| Namespace | 用途 |
|---|---|
default |
Namespace を指定しない場合のデフォルト |
kube-system |
Kubernetes システムコンポーネント (CoreDNS, kube-proxy) |
kube-public |
全ユーザーが読み取り可能な公開リソース |
kube-node-lease |
ノードのハートビート |
default Namespace にアプリケーションを配置するのは避ける。明示的に Namespace を作成し、リソースを整理する。
Namespace の分割パターン
環境ごと (小規模チーム)
namespace: development
namespace: staging
namespace: production
チームごと (中〜大規模)
namespace: team-backend
namespace: team-frontend
namespace: team-data
アプリケーションごと
namespace: order-service
namespace: payment-service
namespace: notification-service
RBAC による Namespace レベルのアクセス制御
RBAC による Namespace レベルのアクセス制御の例を示す。
# backend チームに production Namespace の読み取り権限を付与
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: backend-readonly
namespace: production
subjects:
- kind: Group
name: backend-team
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
ResourceQuota でリソース制限
Namespace ごとに CPU、メモリ、Pod 数の上限を設定し、1 つの Namespace がクラスター全体のリソースを占有するのを防ぐ。
apiVersion: v1
kind: ResourceQuota
metadata:
name: production-quota
namespace: production
spec:
hard:
requests.cpu: "10"
requests.memory: 20Gi
limits.cpu: "20"
limits.memory: 40Gi
pods: "50"
NetworkPolicy による通信制御
デフォルトでは全 Namespace 間の通信が許可されている。NetworkPolicy で Namespace 間の通信を制限する。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-from-other-namespaces
namespace: production
spec:
podSelector: {}
ingress:
- from:
- podSelector: {} # 同じ Namespace 内からのみ許可
Namespace はセキュリティ境界ではない
Namespace は論理的な分離であり、セキュリティ境界ではない。悪意のある Pod が他の Namespace のリソースにアクセスする可能性がある。強い分離が必要な場合は、クラスターを分ける。
現場での応用を知るには関連書籍も役立つ。
この記事は役に立ちましたか?
関連用語
Kubernetes
コンテナのデプロイ、スケーリング、管理を自動化するオープンソースのオーケストレーションプラットフォーム
RBAC
ロール (役割) に基づいてアクセス権限を管理する認可モデル
Network Policy
Kubernetes で Pod 間のネットワーク通信を制御し、不要な通信を遮断するセキュリティ機能
Namespace 分離
Kubernetes の Namespace を使ってリソース、ネットワーク、権限を論理的に分離するマルチテナント戦略
Resource Quota
Kubernetes の Namespace ごとにリソース使用量の上限を設定し、リソースの公平な配分を保証する仕組み
Namespace と cgroup
Linux コンテナの基盤技術で、プロセスの隔離とリソース制限を実現するカーネル機能
関連する記事
セキュリティ本ガイド - Web 開発者が読むべき技術書の選び方
Web セキュリティの基礎から実践まで学べる技術書の選び方マトリクスと、読了後にやるべき 3 つのアクションを紹介します。
README を書くように本を読む - エンジニアのための構造化読書法
エンジニアが日常的に書く README のフォーマットを読書に応用する方法を紹介します。目的・使い方・注意点の 3 点で本の内容を整理すると、知識の再利用性が飛躍的に高まります。
技術書の読む順番戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで理解の深さと速度を飛躍的に高める方法を解説します。