네임스페이스는 쿠버네티스 클러스터 내부 객체 관리, 논리적인 분리 단위를 뜻함
Pod, Service 등은 네임스페이스별로 생성이나 관리될 수 있고,
사용자별 권한 역시 네임스페이스별로 나눠서 관리 될수 있다.
네임스페이스는 객체 집합을 담고 있는 집합체로서 기본적으로 kubectl 명령에 의하여 기본 네임스페이스와 상호 작용.
하나의 클러스터 내 개발/운영 환경이 다를때, 클러스터를 네임스페이스로 나누어 운영이 가능하다.
- 사용자별 네임스페이스별 접근권한을 다르게운영.
- 네임스페이스별로 리소스 할당량 지정.(개발계는 CPU100, 운영계는 CPU400등)
- 네임스페이스별로 리소스 나눠서 관리가능 (Pod, Service등)
네임스페이스는 논리적인 분리단위이며, 물리적인 장치를 통해서 환경을 분리한것이 아님.
다른 네임스페이스간 Pod이라도 접근하여 통신이 가능함.
네트워크정책에 따라 네임스페이스간 통신을 막을수 있지만, 이럴경우 높은 수준의 분리정책을 가져가는것 보다
쿠버네티스 클러스터 자체를 분리하여 운영되는것을 권장 한다.
컨텍스트
네임스페이스를 영구적으로 변경하게 위해서는 컨텍스트(context)를 사용.
컨텍스트는 /.kube/config에 있는 kubuctl 설정 파일에 기록됨.
이 파일은 클러스터를 탐색하고 인증하는 방법도 포함하고 있다.
네임스페이스 목록
# kubectl get namespaces NAME STATUS AGE default Active 17d kube-public Active 17d kube-system Active 17d
default : 다른 네임스페이스가 없는 객체의 기본 네임스페이스.
kube-public : 퍼블릭은 자동으로 만들어지며 모든 사용자 (인증되지 않은 사용자 포함)가 읽을 수 있음.
일부 리소스를 전체 클러스터에서 공개적으로 표시하고 읽을 수 있어야 할 경우를 대비하여 대부분 클러스터 사용을 위해 기본 설정 되어 있음.
kube-system : Kubernetes 시스템에 의해 생성 된 객체의 네임 스페이스
네임스페이스 Yaml 생성
# order-service-dev-namespaces.yaml apiVersion: v1 kind: Namespace metadata: name: order-service-develop
네임스페이스 Yaml 실행
# kubectl create -f http://180.70.98.42:8929/msa-ion/config-infra/raw/master/k8s-namespaces/order-service-dev-namespaces.yaml namespace/order-service-develop created
네임스페이스 영구 등록
kubectl 이 생성된 네임 스페이스에서 명령을 실행할 수있게하려면 kubectl 컨텍스트를 변경해야 한다.
다음 명령은 현재 클러스터 이름을 가져오고 여기에 명령을 실행하는 데 사용하는 컨텍스트를 업데이트한다.
# kubectl config set-context $(kubectl config current-context) --namespace=order-service-develop Context "kubelet" set.
네임스페이스 변경
컨텍스트는 각 다른 클러스터나 사용자를 클러스터에 인증할 때도 사용함.
이때는 set-context 로 --user , --cluster 플래그를 사용.
# kubectl config set-context myContext --namespace=order-service-develop # kubectl config use-context myContext
네임스페이스 삭제
# kubectl delete namespaces order-service-develop namespace "order-service-develop" deleted
네임스페이스 적용
1) yaml 파일에 적용할 네임스페이스 지정
apiVersion: v1 kind: Pod metadata: name: mypod namespace: test labels: name: mypod spec: containers: - name: mypod image: myImage
2) --namespace flag 사용
# kubectl apply -f pod.yaml --namespace=test
네임스페이스 접근
fully qualified domain name (FQDN) 사용 <Service Aame>.<Namespace Name>.svc.cluster.local ex) "test"네임 스페이스의 "database"서비스에 연결 database.test.svc.cluster.local
Active 네임스페이스 관리
1) Utility 활용 : https://github.com/ahmetb/kubectx
2) context 에 추가 후, current-context 변경 (위 내용 참고)