kubernetes雲原生紀元:徹底理解(k 8 s)Namespace


kubernetes雲原生紀元:徹底理解(k 8 s)Namespace


文書ディレクトリ

  • kubernetes雲原生紀元:徹底理解(k 8 s)Namespace
  • 作用
  • 独自のNamespace
  • を作成
  • Namespace
  • を使用
  • 隔離性
  • をテストする
  • デフォルト指定ネーミングスペースアクセス
  • さぎょう


    Namespace(ネームスペース)コア機能の分離
  • リソースオブジェクトの分離:Service Deploymet Pod
  • リソース割当の分離:CPU Memory(メモリ)
  • kubernetesクラスタは、デフォルトの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 }増加します.
    Web-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
    

    Web-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は相互にアクセスできます.
    Web-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パラメータで指定してもだめです.