功能作用

用来对集群资源进行隔离划分,默认只隔离资源,不隔离网络,不同命名空间的资源对象网络互通,通过命名空间可以创建多个虚拟的集群,提供了一种不同用户间分隔集群资源的方法。
命名空间为资源名称提供了一个作用域。除了隔离资源,命名空间还可用于仅允许某些用户访问某些特定资源,甚至限 制单个用户可用的计算资源数量。相同命名空间内的资源名保证唯一即可,因此不同的命名空间下可以使用相同的资源名。

节点资源是全局独立不被约束在命名空间下的

应用场景

假设有两个命名空间dev和prod,则dev环境只能引用dev相关组件的配置,而prod环境只能引用prod相关组件的配置。
image.png

默认空间

Kubernetes默认自带了如下命名空间

  1. [root@cka-master yaml]# kubectl get ns
  2. NAME STATUS AGE
  3. default Active 12h
  4. kube-node-lease Active 12h
  5. kube-public Active 12h
  6. kube-system Active 12h
  7. [root@cka-master yaml]#

default是默认命名空间,这个命名空间不能被删除,删除会失败 kube-node-lease是Kubernetes集群节点租约状态,v1.13加入 kube-public由系统自动创建并且对所有用户可读性,做为集群公用资源的保留命名空间 kube-system由Kubernetes系统对象组成的命名空间

查看当前命名空间的所有资源

  1. [root@cka-master yaml]# kubectl get all -n default
  2. NAME READY STATUS RESTARTS AGE
  3. pod/myapp 1/1 Running 0 6h51m
  4. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  5. service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 12h
  6. [root@cka-master yaml]#

切换默认

查看当前配置

  1. [root@cka-master yaml]# kubectl config view
  2. apiVersion: v1
  3. clusters:
  4. - cluster:
  5. certificate-authority-data: DATA+OMITTED
  6. server: https://192.168.184.128:6443
  7. name: kubernetes
  8. contexts:
  9. - context:
  10. cluster: kubernetes
  11. user: kubernetes-admin
  12. name: kubernetes-admin@kubernetes
  13. current-context: kubernetes-admin@kubernetes
  14. kind: Config
  15. preferences: {}
  16. users:
  17. - name: kubernetes-admin
  18. user:
  19. client-certificate-data: REDACTED
  20. client-key-data: REDACTED

查看当前上下文

  1. [root@cka-master yaml]# kubectl config current-context
  2. kubernetes-admin@kubernetes
  3. [root@cka-master yaml]#

创建测试命名空间ns1

  1. [root@cka-master yaml]# kubectl create ns ns1
  2. namespace/ns1 created

切换默认命名空间为ns1

  1. [root@cka-master yaml]# kubectl config set-context $(kubectl config current-context) --namespace=ns1
  2. Context "kubernetes-admin@kubernetes" modified.
  3. [root@cka-master yaml]#

查看相关配置

  1. [root@cka-master yaml]# kubectl config view
  2. apiVersion: v1
  3. clusters:
  4. - cluster:
  5. certificate-authority-data: DATA+OMITTED
  6. server: https://192.168.184.128:6443
  7. name: kubernetes
  8. contexts:
  9. - context:
  10. cluster: kubernetes
  11. namespace: ns1
  12. user: kubernetes-admin
  13. name: kubernetes-admin@kubernetes
  14. current-context: kubernetes-admin@kubernetes
  15. kind: Config
  16. preferences: {}
  17. users:
  18. - name: kubernetes-admin
  19. user:
  20. client-certificate-data: REDACTED
  21. client-key-data: REDACTED
  22. [root@cka-master yaml]#

经过和原始配置对比,可以看到多了一行contexts.context.namespace

上下文包含三要素:集群[cluster] 用户[user] 命名空间[namespace]

资源对象

不是所有的对象都在命名空间中,例如 nodes、persistentVolumes 就没有命名空间,所有用户都是可见的。
指定参数-namespaced=true

  1. [root@cka-master yaml]# kubectl api-resources --namespaced=true
  2. NAME SHORTNAMES APIVERSION NAMESPACED KIND
  3. bindings v1 true Binding
  4. configmaps cm v1 true ConfigMap
  5. endpoints ep v1 true Endpoints
  6. events ev v1 true Event
  7. limitranges limits v1 true LimitRange
  8. persistentvolumeclaims pvc v1 true PersistentVolumeClaim
  9. pods po v1 true Pod
  10. podtemplates v1 true PodTemplate
  11. replicationcontrollers rc v1 true ReplicationController
  12. resourcequotas quota v1 true ResourceQuota
  13. secrets v1 true Secret
  14. serviceaccounts sa v1 true ServiceAccount
  15. services svc v1 true Service
  16. controllerrevisions apps/v1 true ControllerRevision
  17. daemonsets ds apps/v1 true DaemonSet
  18. deployments deploy apps/v1 true Deployment
  19. replicasets rs apps/v1 true ReplicaSet
  20. statefulsets sts apps/v1 true StatefulSet
  21. localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview
  22. horizontalpodautoscalers hpa autoscaling/v1 true HorizontalPodAutoscaler
  23. cronjobs cj batch/v1 true CronJob
  24. jobs batch/v1 true Job
  25. leases coordination.k8s.io/v1 true Lease
  26. networkpolicies crd.projectcalico.org/v1 true NetworkPolicy
  27. networksets crd.projectcalico.org/v1 true NetworkSet
  28. endpointslices discovery.k8s.io/v1 true EndpointSlice
  29. events ev events.k8s.io/v1 true Event
  30. ingresses ing networking.k8s.io/v1 true Ingress
  31. networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy
  32. poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget
  33. rolebindings rbac.authorization.k8s.io/v1 true RoleBinding
  34. roles rbac.authorization.k8s.io/v1 true Role
  35. csistoragecapacities storage.k8s.io/v1beta1 true CSIStorageCapacity

指定参数-namespaced=false

  1. [root@cka-master yaml]# kubectl api-resources --namespaced=false
  2. NAME SHORTNAMES APIVERSION NAMESPACED KIND
  3. componentstatuses cs v1 false ComponentStatus
  4. namespaces ns v1 false Namespace
  5. nodes no v1 false Node
  6. persistentvolumes pv v1 false PersistentVolume
  7. mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration
  8. validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration
  9. customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition
  10. apiservices apiregistration.k8s.io/v1 false APIService
  11. tokenreviews authentication.k8s.io/v1 false TokenReview
  12. selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview
  13. selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview
  14. subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview
  15. certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest
  16. bgpconfigurations crd.projectcalico.org/v1 false BGPConfiguration
  17. bgppeers crd.projectcalico.org/v1 false BGPPeer
  18. blockaffinities crd.projectcalico.org/v1 false BlockAffinity
  19. caliconodestatuses crd.projectcalico.org/v1 false CalicoNodeStatus
  20. clusterinformations crd.projectcalico.org/v1 false ClusterInformation
  21. felixconfigurations crd.projectcalico.org/v1 false FelixConfiguration
  22. globalnetworkpolicies crd.projectcalico.org/v1 false GlobalNetworkPolicy
  23. globalnetworksets crd.projectcalico.org/v1 false GlobalNetworkSet
  24. hostendpoints crd.projectcalico.org/v1 false HostEndpoint
  25. ipamblocks crd.projectcalico.org/v1 false IPAMBlock
  26. ipamconfigs crd.projectcalico.org/v1 false IPAMConfig
  27. ipamhandles crd.projectcalico.org/v1 false IPAMHandle
  28. ippools crd.projectcalico.org/v1 false IPPool
  29. ipreservations crd.projectcalico.org/v1 false IPReservation
  30. kubecontrollersconfigurations crd.projectcalico.org/v1 false KubeControllersConfiguration
  31. flowschemas flowcontrol.apiserver.k8s.io/v1beta1 false FlowSchema
  32. prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta1 false PriorityLevelConfiguration
  33. ingressclasses networking.k8s.io/v1 false IngressClass
  34. runtimeclasses node.k8s.io/v1 false RuntimeClass
  35. podsecuritypolicies psp policy/v1beta1 false PodSecurityPolicy
  36. clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding
  37. clusterroles rbac.authorization.k8s.io/v1 false ClusterRole
  38. priorityclasses pc scheduling.k8s.io/v1 false PriorityClass
  39. csidrivers storage.k8s.io/v1 false CSIDriver
  40. csinodes storage.k8s.io/v1 false CSINode
  41. storageclasses sc storage.k8s.io/v1 false StorageClass
  42. volumeattachments storage.k8s.io/v1 false VolumeAttachment
  43. [root@cka-master yaml]#