본문 바로가기

Kubenetes/Kubernetes Pods

Pod 4 - (Namespace)

- 객체를 서로 겹치지 않는 별개의 그룹으로 분리하려는 경우 쿠버네티스는 객체를 네임스페이스로 그룹화 함.

- 이 네임스페이스는 리눅스 네임스페이스와는 다름

- 동일한 리소스 이름을 여러 네임스페이스에서 여러 번 사용할 수 있다.

 

[네임스페이스의 필요성]

 

- 여러 네임스페이스를 사용하면 많은 구성 요소를 포함하는 복잡한 시스템을 더 작은 그룹으로 분할 가능

- 멀티 테넌트(multi-tenant) 환경에서 리소스를 분리하고 리소스를 생산, 개발 및 QA 환경으로 또는 기타 필요한 방식으로 분할 하는데 사용 가능

- 리소스 이름은 네임스페이스 내에서만 고유하면 됨, 두 개의 네임스페이스는 동일한 이름의 리소스 포함 가능

 

[다른 네임스페이스와 네임스페이스의 포드]

 

클러스터에 있는 모든 네임스페이스 나열

 

$ kubectl get ns

- kubectl get 명령으로 리소스 나열 시 네임스페이스 지정을 안하면 기본 네임스페이스를 기본 값으로 사용

 

kubectl에 해당 네임스페이스에 속한 포드를 살펴 보기 위해서는 아래와 같이 --namespace or -n을 사용한다.

$ kubectl get po --namespace kube-system

 

[네임 스페이스 만들기]

 

ㅁ YAML 파일로 네임스페이스 만들기

 

custom-namespace.yaml

apiVersion: v1
kind: Namespace                       # 네임스페이스를 정의했다는 의미
metadata:
    name: custom-namespace.   # 네임스페이스의 이름 정의

 

 

ㅁ kubectl을 사용해 쿠버네티스 API 서버에 파일 게시

 

$ kubectl create -f custom-namespace.yaml

 

ㅁ kubectl create namespace로 네임스페이스 생성

 

$ kubectl create namespace custom-namespace

namespace "custom-namespace" created

 

[다른 네임스페이스의 객체 관리]

 

생성한 네임스페이스에 리소스를 만들려면 namespace:custom-namespace 항목을 메타 데이터 섹션에 추가하거나 kubectl create 명령을 사용해 리소스를 만들 때 네임스페이스를 지정해야 함.

 

$ kubectl create -f kubia-manual.yaml -n custom-namespace

pod "kubia-manual" created

 

다른 네임스페이스의 객체를 나열, 설명, 수정, 삭제할 때 kubectl에 --namespace(or -n) 플래그를 전달해야 함.

 

[네임스페이스가 제공하는 격리]

 

- 네임스페이스를 사용하면 객체를 별개의 그룹으로 격리할 수 있지만 지정된 네임스페이스에 속한 객체만 조작할 수 있으므로 실행 중인 객체를 격리하지 않음.

- 즉, 서로 다른 사용자가 서로 다른 네임스페이스에 포드를 배치하면 포드는 서로 격리되어 통신할 수 없지만 다른 솔루션이 네임스페이스와의 격리를 제공하지 않으면 서로 통신하게 할 수도 있다.

- 예를 들어 네임스페이스 foo의 포드가 네임스페이스 bar의 포드 IP 주소를 알고 있으면 HTTP 요청과 같은 트래픽을 다른 포드로 보내는 것을 막을 방법은 없다.