関連ページ
Kubernetes における namespace について
namespace とは、1つのクラスタ内を仮想クラスタとして論理的に分けるもの
(参考URL: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ external_link)
分けると何が嬉しいのか
- Pod などのオブジェクト一覧を namespace ごとに見ることができるようになる
- たくさんの Pod が実行されるアプリでは、一定の基準で分けておくと管理しやすくなる
- namespace ごとに k8s API のアクセス制限をかけることができる
- この namespace の Pod API にはアクセス可能だけど、他の namespace の API は触れない、とか
- https://kubernetes.io/docs/reference/access-authn-authz/rbac/ external_link
- Pod 間通信の基準にすることができる
- この namespace にいる Pod とは通信可能だけど、他の namespace にいる Pod とは通信ちゃダメ、とか
- https://kubernetes.io/docs/concepts/services-networking/network-policies/ external_link
分けると面倒なこと
- cluster-wide オブジェクトがないものだと、namespace ごとに用意する必要がある
- 例えば、TLS 証明書が入った Secret とか
- kubectl によるオペレーションで、今いる namespace を意識してオペレーションする必要がある
- default namespace にいる状態で kube-system namespace のものを弄る場合は、
kubectl -n kube-system get pod
みたいにしないといけない、とか - ただこれは、
kubens
という便利コマンドである程度和らげられる
- default namespace にいる状態で kube-system namespace のものを弄る場合は、
Rancher における Project について
Kubernetes の namespace の概念を Rancher が独自に拡張して Project と命名した
Project の役割
- one Project has many namespaces の関係
- Rancher デフォルトで、同一 Project 内しか Pod の通信ができなくなっている
(※この挙動は最近変わっている可能性がある)kubectl -n <namespace> get networkpolicy np-default
を見ると NetworkPolicy が見られるspec: ingress: - from: - namespaceSelector: matchLabels: field.cattle.io/projectId: project-rnfh8 podSelector: {} policyTypes: - Ingress
- この NetworkPolicy は namespace を Project に割り当てると自動的に設定される