kubernetes 운원생기원: 철저한 이해(k8s) Namespace

kubernetes 운원생기원: 철저한 이해(k8s) Namespace
문서 목록
  • kubernetes 운원생기원: 철저한 이해(k8s)Namespace
  • 작용
  • 나만의 Namespace 만들기
  • Namespace
  • 사용
  • 테스트 격리성
  • 기본적으로 지정된 네임스페이스 액세스
  • 역할
    Namespace(네임스페이스) 코어 역할 격리
  • 리소스 객체의 격리: 서비스 Deploymet Pod
  • 리소스 할당량 분리: CPU 메모리
  • 기본 네임스페이스 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로 바꾸기
  • kubectl 기본 상하문 설정 파일 수정/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
    
  • dev 명칭 공간 아래의 것만 볼 수 있는지 테스트
  • [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 인자로 지정해도 안 됩니다.

    좋은 웹페이지 즐겨찾기