Kubernetes

Namespace(名前空間) なまえくうかん

Kubernetesリソース分離マルチテナントRBACクラスター管理スコープ
Namespaceについて教えて

簡単に言うとこんな感じ!

Kubernetesの中に作れる「仕切り」みたいなものだよ!同じクラスターを開発チームと本番チームで共有するとき、それぞれ別の部屋に分けておくことで、お互いの設定やアプリが混ざらないようにできるんだ。同じ名前のアプリでもNamespaceが違えば別物として扱われるってこと!


Namespaceとは

Kubernetes(コンテナ管理基盤)では、複数のチームやプロジェクト1つのクラスター(サーバー群)を共有することがよくあります。そのとき、アプリやサービスの設定が混ざってしまうと大変です。Namespace(名前空間)は、クラスターを論理的に区切る仕組みで、「開発用」「テスト用」「本番用」のように分割して管理できます。

Namespaceを使うと、同じ名前のリソース(Podやサービスなど)でもNamespaceが違えば別物として扱われます。たとえば development Namespaceの web-appproduction Namespaceの web-app は完全に別のアプリとして独立します。また、アクセス権(RBAC)やリソース使用量の上限(ResourceQuota)もNamespace単位で設定できるので、チームをまたいだ管理がしやすくなります。

ただし、Namespaceはあくまで「論理的な仕切り」です。ノード(物理的なサーバー)やストレージボリュームなど、クラスター全体で共有するリソースはNamespaceの外に存在します。大規模なプロジェクトや複数チームで1つのKubernetesクラスターを使い回すマルチテナント構成において、Namespaceは欠かせない概念です。


Namespaceの構造と特徴

Namespaceが分けるもの・分けないもの

対象Namespaceで分離できる?補足
Pod(コンテナ)✅ できる別Namespace同士は独立
Service(通信口)✅ できる名前が重複してもOK
ConfigMap / Secret✅ できる設定・機密情報を分離
RBAC(アクセス権)✅ できるNamespace単位で権限設定
ResourceQuota(上限)✅ できるCPU・メモリの割り当て制限
Node(サーバー本体)❌ できないクラスター全体で共有
PersistentVolume(永続ストレージ)❌ できないクラスタースコープのリソース
ClusterRole(クラスター権限)❌ できないNamespace外のリソース

デフォルトで用意されているNamespace

Kubernetesをセットアップすると、最初から以下の4つのNamespaceが自動的に作られます。

Namespace名用途
default何も指定しないとここに作られる。初学者が最初に触れる場所
kube-systemKubernetesのシステムコンポーネントがいるNamespace。触らないのが基本
kube-public全ユーザーが読み取り可能な公開情報用。ほとんど使われない
kube-node-leaseノードの死活監視(ハートビート)用。自動管理される

覚え方・イメージ

「Namespaceはオフィスの部屋割り」

1フロア(クラスター)を複数の部屋(Namespace)に仕切るイメージ。 部屋ごとに鍵(RBAC)や備品の上限(ResourceQuota)を決められる。 廊下(Node)や電気・水道(ネットワーク基盤)はフロア全体で共有。


歴史と背景

  • 2014年 — Kubernetesがオープンソースとして公開。当初からNamespaceの概念が設計に組み込まれていた
  • 2016年頃 — 企業が本番環境でKubernetesを使い始め、複数チームが同一クラスターを共有する「マルチテナント」ニーズが急増
  • 2018年 — CNCF(クラウドネイティブ技術の標準化団体)がKubernetesをGraduateプロジェクトに認定。Namespaceを使ったRBAC(役割ベースのアクセス制御)が標準的な設計パターンとして普及
  • 現在 — 大企業では「チームごとにNamespaceを1つ」「環境(dev/stg/prod)ごとにNamespaceを分ける」などの運用パターンが定着。HierarchicalなNamespace管理を実現するOSSツール(HNC)も登場している

Namespaceの使い分けパターンと関連機能

実際の現場ではどのようにNamespaceを切るか、パターンがあります。

代表的な設計パターン

パターンNamespace例向いているケース
環境別development / staging / production1チームで複数環境を同一クラスターで管理
チーム別team-frontend / team-backend / team-data複数チームが独立して開発・運用
アプリ別app-shop / app-blog / app-adminマイクロサービスを明確に分離したいとき
組み合わせteam-a-prod / team-a-dev大規模でチームも環境も多い場合

Namespaceと連携する主要機能

Namespace 論理的なクラスター分割 RBAC アクセス権をNS単位で管理 ResourceQuota CPU・メモリ上限を設定 NetworkPolicy NS間の通信ルールを制御 Role / RoleBinding NS内のユーザー権限 LimitRange Pod単体のリソース制限

Namespaceをまたいだ通信

Namespace間でも、サービス名にNamespaceを付けた形式で通信できます。

# 同じNamespace内の場合
http://web-service

# 別のNamespace(prod)へアクセスする場合
http://web-service.prod.svc.cluster.local

関連する規格・RFC

規格・仕様内容
Kubernetes API v1Namespaceはコアリソース(v1 グループ)として定義
CNCF Kubernetes仕様マルチテナント設計ガイドラインにNamespaceの使い方が含まれる
HNC(Hierarchical Namespace Controller)Namespaceの親子関係を実現するKubernetesアドオン(CNCF管理)

関連用語

  • Kubernetes — コンテナのデプロイ・管理を自動化するプラットフォーム
  • Pod — Kubernetes上で動くコンテナの最小単位
  • RBAC — ロールベースのアクセス制御。Namespace単位での権限管理に使う
  • ResourceQuota — Namespace内のCPU・メモリ使用量に上限を設ける機能
  • NetworkPolicy — Namespace間やPod間の通信ルールを定義する機能
  • マルチテナント — 複数の組織やチームが1つのシステムを共有する構成