【K8s】资源配额与访问控制

目录

1.解释ResourceQuota的作用。

[2. 解释Service Account的用途。](#2. 解释Service Account的用途。)

[3. 详细解释Role和ClusterRole。](#3. 详细解释Role和ClusterRole。)

[4. 什么是K8s的NetworkPolicy?](#4. 什么是K8s的NetworkPolicy?)

[5. 详细描述在K8s中如何控制跨Namespace的Pod访问?](#5. 详细描述在K8s中如何控制跨Namespace的Pod访问?)


1.解释ResourceQuota的作用。

ResourceQuota(资源配额) 是K8s中用于限制命名空间资源使用总量的机制,它的作用是防止某个命名空间消耗过多集群资源,影响其他命名空间的正常运行。

资源配额的核心作用有以下三个:

(1)限制计算资源总量:可以限制一个命名空间内所有Pod的CPU和内存请求和限制的总和。

(2)限制对象数量:可以限制命名空间内可创建的特定Kubernetes对象数量,例如Pod、Service、Deployment、PVC等。

(3)保障公平分配:在多租户集群中,为每个命名空间设置配额,确保资源公平分配,避免"吵闹的邻居"问题。

2. 解释Service Account的用途。

Service Account(服务账户) 是K8s中用于为Pod中运行的程序提供身份标识的机制,它允许Pod通过API Server与K8s控制平面进行安全通信。

它的核心用途有以下四个:

(1)身份认证:Pod中的容器可以使用Service Account的凭证(通常以Secret形式挂载)向API Server证明自己的身份。

(2)权限授权:通过将Service Account绑定到Role或ClusterRole,可以授予Pod特定的操作权限(例如读取Pod列表、创建Deployment等)。

(3)自动挂载:每个Pod创建时,Kubernetes会自动将默认的Service Account(或在Pod中指定的Service Account)的认证信息挂载到/var/run/secrets/kubernetes.io/serviceaccount目录。

(4)区分用户类型:User Account 对应真实的人(管理员、开发者),用于kubectl访问;Service Account对应运行在Pod中的程序,用于程序间通信或调用API Server。

3. 详细解释Role和ClusterRole。

Role(角色) 和 ClusterRole(集群角色) 都是 K8s RBAC(基于角色的访问控制) 系统中用来定义权限集合的资源对象。它们本身不指定"谁"拥有这些权限,只定义"可以对哪些资源执行哪些操作"(例如:可以读取 Pod、可以创建 Deployment)。

两者的根本区别在于 生效范围

Role 是命名空间级别的:它定义的权限只适用于 某一个具体的命名空间。你无法使用 Role 来授予访问集群级别资源(如 Node、PersistentVolume)的权限,也无法跨命名空间生效。

ClusterRole 是集群级别的:它定义的权限 在整个集群范围内生效。它可以用来授予访问集群级别资源的权限,也可以用来授予访问所有命名空间中某种资源的权限(例如:查看所有命名空间中的 Pod)。

设计这两种角色是为了满足 K8s 的多租户隔离和最小权限原则。Role 和 ClusterRole 只是静态的"规则清单",要让权限真正生效,必须将它们与具体的主体(可以是 User、Group 或 ServiceAccount)进行绑定:

RoleBinding :在某个命名空间内,将 Role 或 ClusterRole 的权限授予给某个主体。绑定后,该主体就在 这个命名空间内 拥有了角色定义的权限。

ClusterRoleBinding :在集群范围内,将 ClusterRole 的权限授予给某个主体。绑定后,该主体就 在整个集群中所有命名空间(以及集群级别资源)拥有权限。

4. 什么是K8s的NetworkPolicy?

NetworkPolicy(网络策略) 是Kubernetes中用于定义Pod之间或Pod与外部之间网络流量规则的API资源,它实现了网络层的访问控制,类似于防火墙规则,实行的是"白名单制"。

它的核心功能有:

(1)隔离Pod网络:默认情况下,Kubernetes集群中所有Pod之间可以互相通信("全连通")。NetworkPolicy可以限制哪些Pod可以访问特定Pod,哪些外部IP可以访问。

(2)控制出入流量:入站流量(Ingress)限制哪些来源可以访问当前Pod;​​​​​出站流量(Egress)限制当前Pod可以访问哪些目标。

(3)标签选择器:通过Pod标签、命名空间标签、IP地址段等条件来定义允许或拒绝的流量。

工作原理 :NetworkPolicy需要网络插件(CNI)支持,例如Calico、Cilium、Weave Net等。不支持的CNI插件会直接忽略NetworkPolicy。

5. 详细描述在K8s中如何控制跨Namespace的Pod访问?

默认情况下,Pod之间没有任何访问限制,可以自由通信。一旦命名空间中存在选择某个Pod的NetworkPolicy,该Pod就进入隔离状态,只接受策略允许的连接。多个策略同时选中一个Pod时候不会冲突,而是将各自规则合并起来------所有入站规则取并集,所有出站规则也取并集(规则是可以叠加的)。特别要注意的是:两个Pod要想成功通信,必须同时满足两个方向的要求------源端Pod的出站规则要允许,目标端Pod的入站规则也要允许;任何一方的拒绝都会导致流量被阻断。

相关推荐
运维开发故事2 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生4 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
Suroy5 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭5 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩6 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
Java之美6 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵6 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1116 天前
LM Studio Docker 部署——本地大模型一键启动
docker