【Kubernetes从入门到精通】第11篇:Namespace——给你的K8s集群划地盘
上一篇【第10篇】Label和Selector——K8s的“贴标签“艺术下一篇【第12篇】Annotation——K8s的便利贴文化摘要前几篇文章咱们一直在default这个Namespace里折腾你可能都没注意到它的存在——因为K8s悄悄帮你把它填上了。Namespace这东西说白了就是K8s里的文件夹——把一个物理集群切分成多个逻辑区域每个区域里可以有同名的Pod、Service、ConfigMap互不影响。张三在他那Namepace里建了个nginx李四也可以在自己Namepace里建个nginx完全不冲突。但Namespace有个大坑——它只做逻辑隔离不是真正的安全边界。很多新手把Namespace当防火墙用结果发现A团队还是能访问B团队的Pod。本文从Namespace的本质讲起覆盖四个初始Namespace的来龙去脉、多团队共享集群的规划策略、跨Namespace通信的实际操作以及ResourceQuota怎么做真正的资源限制。一、Namespace是个什么东西——“文件夹还是防火墙”先给Namespace下个定义**Namespace是K8s里的一种逻辑分组机制把集群里的资源划分到不同的命名空间里。**同一Namespace内的资源名必须唯一不同Namespace的资源可以重名。【Namespace 文件夹】 集群根目录: / ├── default/ ← K8s 预置你的默认活动空间 │ ├── Pod: nginx │ ├── Pod: redis │ └── Service: nginx-svc ├── kube-system/ ← K8s 自己住的地方别乱动 │ ├── Pod: coredns-xxx │ ├── Pod: etcd-minikube │ └── Pod: kube-apiserver-minikube ├── kube-public/ ← 公共信息所有用户都能读 ├── kube-node-lease/ ← 节点心跳信息 ├── team-frontend/ ← 你的前端团队 │ ├── Pod: nginx ← 可以重名 │ └── Pod: vue-app └── team-backend/ ← 你的后端团队 ├── Pod: nginx ← 跟上面的 nginx 不冲突 └── Pod: go-service要点Namespace是逻辑隔离不是物理隔离。同一个集群里不同Namespace的Pod默认是可以通过IP互相访问的网络是通的。如果你想要真正的隔离——不让A团队访问B团队的Pod——得靠NetworkPolicy来做网络层面的控制。【Namespace提供的隔离 vs 没有提供的隔离】 ✅ Namespace 提供的 ❌ Namespace 不提供的 ┌─────────────────────────┐ ┌─────────────────────────┐ │ • 资源名称隔离 │ │ • 网络隔离 │ │ • 基于RBAC的访问控制 │ │ (Pod之间默认可以互通) │ │ • ResourceQuota 资源限制 │ │ • 物理节点隔离 │ │ • 独立的作用域 │ │ (不同NS的Pod可以在同一 │ │ (kubectl get pods 只 │ │ 台Node上) │ │ 看当前空间) │ │ • 真正的安全边界 │ └─────────────────────────┘ │ (不是多租户安全方案) │ └─────────────────────────┘二、四个初始Namespace——K8s自带的地盘一个新集群创建后你会看到四个自带的Namespace# 查看所有Namespacekubectl get namespaces# NAME STATUS AGE# default Active 7d# kube-system Active 7d# kube-public Active 7d# kube-node-lease Active 7d# 或用缩写kubectl get ns2.1 default——“新手的舒适区”这是你如果不指定Namespace时K8s默认使用的命名空间。你之前建的nginx Pod如果没有加-n参数全都落在了这里。要点我强烈建议你别在default里跑生产服务。default就像Windows桌面上那个新建文件夹——一开始觉得方便等东西多了就是灾难。生产环境建议创建专门的Namespacedefault只放测试和临时东西。2.2 kube-system——“K8s的心脏地带”这是K8s自己组件住的地方——API Server的Pod、etcd的Pod、CoreDNS、kube-proxy全在这。你从kubectl get pods -n kube-system里看到的那些Pod基本都在这儿。# 看看K8s自己的内脏kubectl get pods-nkube-system# NAME READY STATUS RESTARTS AGE# coredns-5dd5756b68-nk7zt 1/1 Running 0 7d# etcd-minikube 1/1 Running 0 7d# kube-apiserver-minikube 1/1 Running 0 7d# kube-controller-manager-minikube 1/1 Running 0 7d# kube-proxy-xyz123 1/1 Running 0 7d# kube-scheduler-minikube 1/1 Running 0 7d# storage-provisioner 1/1 Running 0 7d要点kube-system里的东西千万别乱删它是K8s的内脏器官——你不小心删了个CoreDNS Pod虽然Deployment会重建或者更糟——删了整个Namespace那就准备重装集群吧。我自己作死干过一次教训深刻。2.3 kube-public——“公告栏”这个Namespace里的资源对**所有用户包括未认证用户**都是可读的。通常用来放集群级别的公共信息比如cluster-infoConfigMap。kubectl get cm-nkube-public# NAME DATA AGE# cluster-info 1 7d# 这个ConfigMap里的内容对所有用户可见kubectl get cm cluster-info-nkube-public-oyaml2.4 kube-node-lease——“心跳档案室”K8s 1.14后引入的新Namespace用来存每个Node的Lease对象心跳信号。以前Node心跳是kubelet定期更新Node对象的一个字段效率不高现在改成每个Node一个Lease对象高频更新不影响Node对象的整体状态。Namespace用途可以动吗default默认命名空间不指定-n时的落点可以但不建议放生产服务kube-systemK8s系统组件别碰kube-public公共可读信息可以读一般不动kube-node-leaseNode心跳Lease对象别碰三、Namespace的日常操作——增删改查# 创建Namespacekubectl create namespace team-frontend kubectl create ns team-backend# ns 是 namespace 的缩写# 也可以用YAML创建推荐版本可控# namespace-team-frontend.yamlapiVersion:v1kind:Namespacemetadata:name:team-frontendlabels:team:frontendenvironment:productionkubectl apply-fnamespace-team-frontend.yaml# 查看所有Namespacekubectl get namespaces --show-labels# 切换当前上下文到指定Namespace省去每次敲 -nkubectl config set-context--current--namespaceteam-frontend# 查看当前所在的Namespacekubectl config view--minify|grepnamespace# 在指定Namespace里操作kubectl get pods-nteam-backend kubectl describe pod nginx-nteam-frontend kubectl logs deploy/nginx-nteam-frontend# 在所有Namespace里查找kubectl get pods-A# -A 等于 --all-namespaceskubectl get pods --all-namespaces-lappnginx# 删除Namespace会删除其中的所有资源kubectl delete namespace team-frontend# ⚠️ 上述命令会删除 team-frontend 里的所有 Pod/Service/...# 不可逆操作三思而后行要点删除Namespace是K8s里最危险的命令之一——Namespace一删里面所有的Pod、Service、ConfigMap、Secret、PVC……全部灰飞烟灭。执行前请再三确认kubectl get all -n target-ns看一眼里面到底有什么。四、多团队共享集群——Namespace规划实战假设你有个K8s集群要给三个团队用前端、后端、数据分析。怎么设计Namespace结构4.1 按团队划分最常见【按团队划Namespace】 集群 ├── team-frontend/ ← 前端团队的地盘 │ ├── Pod: vue-app │ ├── Pod: nginx │ └── Service: frontend-svc ├── team-backend/ ← 后端团队的地盘 │ ├── Pod: api-server │ ├── Pod: user-service │ └── Service: backend-svc └── team-data/ ← 数据团队的地盘 ├── Pod: spark-worker ├── Pod: flink-job └── Service:>4.2 按环境划分【按环境划Namespace】 集群 ├── dev/ ← 开发环境 ├── staging/ ← 预发布环境 └── prod/ ← 生产环境4.3 混合划分推荐【推荐团队×环境的混合划分】 集群 ├── frontend-dev/ ├── frontend-staging/ ├── frontend-prod/ ├── backend-dev/ ├── backend-staging/ ├── backend-prod/ ├──>五、ResourceQuota——给Namespace戴上紧箍咒Namespace只管名字隔离不管资源限制——后面这个任务由ResourceQuota出场。没有ResourceQuota某个团队可能一个Namespace就吃光了整个集群的资源。# 给 team-frontend 设置资源配额apiVersion:v1kind:ResourceQuotametadata:name:team-frontend-quotanamespace:team-frontendspec:hard:# 计算资源限制requests.cpu:10# 所有Pod的CPU requests总和 ≤ 10核requests.memory:20Gi# 所有Pod的内存requests总和 ≤ 20GiBlimits.cpu:20# 所有Pod的CPU limits总和 ≤ 20核limits.memory:40Gi# 所有Pod的内存limits总和 ≤ 40GiB# 对象数量限制pods:50# 最多50个Podservices:10# 最多10个Serviceconfigmaps:20# 最多20个ConfigMapsecrets:30# 最多30个Secretpersistentvolumeclaims:5# 最多5个PVC# 存储限制requests.storage:100Gi# 所有PVC请求总存储 ≤ 100GiB# 查看ResourceQuotakubectl describe resourcequota-nteam-frontend# 查看当前使用情况kubectl get resourcequota-nteam-frontend# NAME AGE REQUEST LIMIT# team-frontend-quota 1d requests.cpu: 8/10 limits.cpu: 15/20# requests.memory: 15Gi/20Gi limits.memory: 30Gi/40Gi限制类型说明典型值requests.cpuCPU请求总量上限10-100核requests.memory内存请求总量上限20-200GiBlimits.cpuCPU限制总量上限20-200核limits.memory内存限制总量上限40-400GiBpodsPod总数上限50-500servicesService总数上限10-100configmapsConfigMap总数上限20-200secretsSecret总数上限30-300要点ResourceQuota要配合每个Pod的resources.requests使用。如果Pod没有声明requestsResourceQuota就会拒绝创建它。这也是逼着你养成设置资源requests的好习惯。六、跨Namespace通信——“隔壁老王怎么找你”不同Namespace的Pod默认是可以互通的网络上没墙但Service的DNS域名是带Namespace的。K8s内部的DNS格式【K8s DNS 解析规则】 service-name.namespace.svc.cluster-domain 完整FQDN nginx-service.team-backend.svc.cluster.local 同Namespace 直接写 nginx-service 就行 跨Namespace 得写全nginx-service.team-backend 跨Namespace简写nginx-service.team-backend.svc cluster-domain 通常是 cluster.local安装时配置的# 在 team-frontend 空间的 Pod 里访问 team-backend 空间的 Service# 方法1完整FQDNcurlhttp://api-service.team-backend.svc.cluster.local:8080# 方法2DNS简写推荐curlhttp://api-service.team-backend.svc:8080# 方法3用环境变量注入不推荐太局限# K8s会给每个Pod注入同Namespace的Service环境变量# 但跨Namespace的Service不会注入【跨Namespace通信示意图】 Namespace: team-frontend Namespace: team-backend ┌────────────────────────┐ ┌────────────────────────┐ │ │ │ │ │ Pod: vue-app │ │ Service: api-service │ │ │ │ ClusterIP: 10.96.2.5 │ │ 需要访问后端API │ │ │ │ │ │ │ │ ┌─────┴─────┐ │ │ │ curl │ │ ▼ ▼ │ │ │ api-service. │ │ Pod:api-1 Pod:api-2 │ │ │ team-backend │ │ 10.244.2.3 10.244.3.7│ │ │ .svc:8080 │ │ │ │ ▼ │ │ │ │ ┌─────────────────┐ │ └────────────────────────┘ │ │ DNS: CoreDNS │ │ │ │ 解析出10.96.2.5 │ │ │ └────────┬────────┘ │ │ │ │ │ ▼ │ │ 请求发往 10.96.2.5:8080│ ──── kube-proxy 转发 ────► 10.244.2.3:8080 │ │ └────────────────────────┘要点如果你不想让A Namespace的Pod能访问B Namespace的Service得配NetworkPolicy——这才是真正的网络隔离。Namespace自身不挡流量别把它当防火墙用。本篇小结Namespace看着简单但用好了是利器用错了是坑逻辑隔离不是安全隔离——Namespace就像文件夹不同文件夹里的文件可以同名但文件夹本身不防删除和访问四个初始Namespacedefault你的大本营但别放生产、kube-system系统内脏别乱动、kube-public公告栏、kube-node-lease节点心跳档案规划的三种方式按团队、按环境、团队×环境混合——推荐第三种命名规范用team-environmentResourceQuota做真正的资源限制——配额要配合Pod的resources字段才有意义跨Namespace通信DNS用service.namespace.svc要网络隔离用NetworkPolicy下一篇咱们聊Annotation——如果说Label是分类标签Annotation就是便利贴专放那些不适合用来过滤和选择的元数据。上一篇【第10篇】Label和Selector——K8s的“贴标签“艺术下一篇【第12篇】Annotation——K8s的便利贴文化

相关新闻

软件开发生命周期(SDLC)全流程实战指南:从需求到运维

软件开发生命周期(SDLC)全流程实战指南:从需求到运维

1. 从“写代码”到“造产品”:为什么你需要理解SDLC? 刚入行那会儿,我觉得软件开发就是“写代码”。给我一个需求,我吭哧吭哧写出来,能跑通,任务就完成了。直到我第一次负责一个从零到一的小项目&#xff0…

2026/8/3 13:50:38 阅读更多 →
UE5行为树实战:从核心原理到AI怪物完整实现

UE5行为树实战:从核心原理到AI怪物完整实现

1. 项目概述:从蓝图到逻辑,理解行为树的核心价值 在Unreal Engine 5(UE5)里做游戏,尤其是涉及到AI角色时,你迟早会碰到一个绕不开的坎:如何让这些虚拟角色“聪明”起来?是让它们傻站…

2026/8/3 13:49:37 阅读更多 →
5分钟搞定Mac Boot Camp驱动安装:Brigadier自动化工具终极指南

5分钟搞定Mac Boot Camp驱动安装:Brigadier自动化工具终极指南

5分钟搞定Mac Boot Camp驱动安装:Brigadier自动化工具终极指南 【免费下载链接】brigadier Fetch and install Boot Camp ESDs with ease. 项目地址: https://gitcode.com/gh_mirrors/bri/brigadier 还在为Mac安装Windows系统后找不到合适驱动而烦恼吗&#…

2026/8/3 13:49:37 阅读更多 →

最新新闻

如何用VoiceFixer在5分钟内修复任何音频问题:完整免费指南

如何用VoiceFixer在5分钟内修复任何音频问题:完整免费指南

如何用VoiceFixer在5分钟内修复任何音频问题:完整免费指南 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 语音修复不再是专业音频工程师的专利!无论你是播客创作者、内容制作…

2026/8/3 14:14:56 阅读更多 →
GPU服务器远程桌面配置与优化实战指南

GPU服务器远程桌面配置与优化实战指南

1. GPU服务器远程桌面开启的核心价值 在深度学习、三维渲染和科学计算领域,GPU服务器已成为不可或缺的生产力工具。但不同于普通办公电脑,这些专业设备往往部署在机房或云端,如何高效地远程操作成为实际工作中的刚需。通过Windows远程桌面协议…

2026/8/3 14:14:56 阅读更多 →
Fastjson AutoType安全机制深度解析:从设计原理到漏洞防御实战

Fastjson AutoType安全机制深度解析:从设计原理到漏洞防御实战

1. 项目概述:为什么我们要“初探”Fastjson的AutoType? 如果你是一名Java后端开发者,或者你的项目里曾经处理过JSON数据,那么“Fastjson”这个名字你一定不陌生。作为阿里巴巴开源的一款高性能JSON处理器,它以其极致的…

2026/8/3 14:14:56 阅读更多 →
怎样轻松实现卡车模拟自动驾驶:3个智能辅助秘诀

怎样轻松实现卡车模拟自动驾驶:3个智能辅助秘诀

怎样轻松实现卡车模拟自动驾驶:3个智能辅助秘诀 【免费下载链接】ETS2LA Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/ETS2LA 你是否曾经梦想过在长途运输中解放双手,一边欣赏欧洲大陆的壮丽风景…

2026/8/3 14:14:56 阅读更多 →
3分钟快速部署:B站抽奖自动化终极解决方案

3分钟快速部署:B站抽奖自动化终极解决方案

3分钟快速部署:B站抽奖自动化终极解决方案 【免费下载链接】LotteryAutoScript Bili动态抽奖助手 项目地址: https://gitcode.com/gh_mirrors/lo/LotteryAutoScript LotteryAutoScript(B站动态抽奖助手)是一款基于Node.js开发的智能自…

2026/8/3 14:14:56 阅读更多 →
Steam游戏自动破解神器:5分钟实现免Steam客户端启动的完整指南

Steam游戏自动破解神器:5分钟实现免Steam客户端启动的完整指南

Steam游戏自动破解神器:5分钟实现免Steam客户端启动的完整指南 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack Steam游戏自动破解工具SteamAutoCrack是一款专业的开源解决方…

2026/8/3 14:13:56 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 4:36:35 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →