kubernetes 운원생기원: 철저한 이해(k8s) Namespace
15186 단어 kubernetes 구름 원생 기원
문서 목록
Namespace(네임스페이스) 코어 역할 격리
default
를 기본 네임스페이스로 다시 시작합니다. 서비스, Deploymet,Pod에서 네임스페이스를 지정하지 않으면 이 기본 default
네임스페이스에 놓입니다.다음을 살펴보겠습니다.
[root@master-001 ~]# kubectl get namespaces
NAME STATUS AGE
default Active 13d
ingress-nginx Active 13d
kube-node-lease Active 13d
kube-public Active 13d
kube-system Active 13d
기본 네임스페이스에서pod를 보려면 다음과 같이 하십시오.
[root@master-001 ~]# kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
rntibp-deployment-84d77f8f78-f99pp 0/1 CrashLoopBackOff 22 12d
tomcat-demo-5f4b587679-7mpz9 1/1 Running 3 12d
자체 Namespace 만들기
namespace도yml 파일을 통해 만들 수 있습니다
먼저 namespace-dev.yaml 파일을 작성합니다.
apiVersion: v1
kind: Namespace
metadata:
name: dev
마스터 노드에서 생성:
[root@master-001 ~]# kubectl apply -f kubenetes-dev.yaml
namespace/dev created
[root@master-001 ~]# kubectl get namespaces
NAME STATUS AGE
default Active 13d
dev Active 13s
ingress-nginx Active 13d
kube-node-lease Active 13d
kube-public Active 13d
kube-system Active 13d
Namespace 사용
생성된namepase를 사용하면yaml의
metadata:
에서 증가namespace: {namepsce }
만 하면 됩니다.웹-demo로 다음 설정 정보는 서비스, Deploymet, Ingress 각각namespace 설정이 추가되었습니다.
Web.demo.yaml:
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo
namespace: dev
spec:
selector:
matchLabels:
app: web-demo
replicas: 1
template:
metadata:
labels:
app: web-demo
spec:
containers:
- name: web-demo
image: hub.zhang.com/kubernetes/demo:2020011512381579063123
ports:
- containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
name: web-demo
namespace: dev
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: web-demo
type: ClusterIP
---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-demo
namespace: dev
spec:
rules:
- host: web.demo.com
http:
paths:
- path: /
backend:
serviceName: web-demo
servicePort: 80
웹-demo 애플리케이션을 만들려면 다음과 같이 하십시오.
[root@master-001 ~]# kubectl apply -f web-demo.yaml
deployment.apps/web-demo created
service/web-demo created
ingress.extensions/web-demo created
보기:
[root@master-001 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
rntibp-deployment-84d77f8f78-f99pp 0/1 CrashLoopBackOff 35 12d
tomcat-demo-5f4b587679-7mpz9 1/1 Running 4 12d
명명 공간을 지정하여 보기
-n {namespace }
를 추가하고 dev의 모든 정보를 보기[root@master-001 ~]# kubectl get all -n dev
NAME READY STATUS RESTARTS AGE
pod/web-demo-58cd855cb7-gj5m4 1/1 Running 0 17m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/web-demo ClusterIP 10.105.152.212 <none> 80/TCP 17m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/web-demo 1/1 1 1 17m
NAME DESIRED CURRENT READY AGE
replicaset.apps/web-demo-58cd855cb7 1 1 1 17m
기본적으로default 이름 공간에서만 볼 수 있습니다.
-n
지정한 이름 공간에서만 볼 수 있습니다.테스트 격리성
같은 명명 공간에서pod가 서로 방문하면 서로 통할 수 있다
tomcat-demo defult, web-demo dev
그러나 명명 공간을 뛰어넘는 것은 바람직하지 않다
``DNS
다 안 돼.[root@master-001 ~]# kubectl exec -it web-demo-58cd855cb7-gj5m4 -n dev bash
bash-4.4# ping tomcat-demo-5f4b587679-7mpz9
^C##
bash-4.4# cat /etc/resolv.conf
nameserver 10.96.0.10
search dev.svc.cluster.local svc.cluster.local cluster.local localdomain
options ndots:5
그러나 서로 다른 명칭 공간 아래의 서비스 IP는 서로 접근할 수 있다
웹-demo의pod ping tomcat-demo를 사용하는 서비스 IP는 연결되며 서비스 IP는 명칭 공간과 무관합니다.
[root@master-001 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d
rntibp-service ClusterIP 10.109.60.4 <none> 9902/TCP 12d
tomcat-demo ClusterIP 10.111.185.214 <none> 80/TCP 12d
[root@master-001 ~]# kubectl exec -it web-demo-58cd855cb7-gj5m4 -n dev bash
bash-4.4# ping 10.111.185.214
PING 10.111.185.214 (10.111.185.214): 56 data bytes #
64 bytes from 10.111.185.214: seq=0 ttl=64 time=0.073 ms
64 bytes from 10.111.185.214: seq=1 ttl=64 time=0.203 ms
네임스페이스 간 Pod IP 액세스도 가능합니다.
[root@master-001 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-demo-5f4b587679-7mpz9 1/1 Running 4 12d 192.168.93.101 node-001 <none> <none>
[root@master-001 ~]# kubectl exec -it web-demo-58cd855cb7-gj5m4 -n dev bash
bash-4.4# wget 192.168.93.101:8080
Connecting to 192.168.93.101:8080 (192.168.93.101:8080)
index.html 100% |*****************************************************| 11230 0:00:00 ETA
요약:
namesapace는 이름에 대한 격리이지 물리적 격리가 아니다. 이렇게 설계하면 개발자에게 더 많은 공간을 줄 수 있다.
기본적으로 지정된 네임스페이스 액세스
기본적으로 네임스페이스에 액세스하려면 컨텍스트를 지정해야 합니다.
진정한 권한은 고정된namespace에 접근할 수 있도록 처음부터 사용자를 설정해야 한다
기본 보기default을 dev로 바꾸기
/root/.kube/config
상하문 이름 수정 set-context ctx-dev 지정 사용자 -user=kubernetes-admin 명칭 공간 이름 수정 ====-namespace=dev==[root@master-001 ~]# cp .kube/config .kube/config.backup #
[root@master-001 ~]# kubectl config set-context ctx-dev \
--cluster=kubernetes \
--user=kubernetes-admin \
--namespace=dev \
--kubeconfig=/root/.kube/config
[root@master-001 ~]# kubectl config use-context ctx-dev --kubeconfig=/root/.kube/config
[root@master-001 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-demo-58cd855cb7-gj5m4 1/1 Running 0 81m
[root@master-001 ~]# kubectl get pods -n defult
No resources found in defult namespace.
dev에서만 볼 수 있고
-n
인자로 지정해도 안 됩니다.