pipeline-frameworks-k8s-05.存储网络与权限入门

k8s-01 图 5 已提到 kube-proxy 与卷挂载在总览中的位置。本篇把 存储ServiceRBAC 三个「一碰到环境就千差万别」的主题,收敛成可迁移的模型:先理解对象与数据流,再查自己集群的 StorageClass、Ingress Controller、云厂商集成文档。

本系列与编号约定

  • 步骤 1~5kube-proxy 在概述中的角色见 k8s-01 图 5 与组件表。
  • 上一篇:k8s-04

系列导航

篇目 链接
上一篇 pipeline-frameworks-k8s-04.工作负载与资源调度
概述 pipeline-frameworks-k8s-01.框架概述
相关 Argo Workflows 入门

1. 存储:Volume、PVC、PV 与 StorageClass

Pod 内声明的是 Volume(以及容器里的 volumeMount):挂到哪个路径、用哪种卷类型。需要持久化且跨 Pod 复用时,通常不直接写死云盘 ID,而是使用 PersistentVolumeClaim(PVC)——用户声明「我要多少容量、什么访问模式、哪类存储类」,由集群中的 PV动态供给器 满足。

图 1 PVC 绑定 PV;Pod 通过卷引用 PVC

图 1 Pod 挂载 volume 时引用 PVC;PVC 与 PV 绑定;StorageClass + provisioner 可动态创建 PV

对象 谁创建 一句话
PVC 用户/流水线 「我要持久卷」的声明
PV 管理员或 动态供给 真实存储的一端(与后端实现绑定)
StorageClass 集群管理员 定义动态供给时用哪个 provisioner、参数模板

访问模式(如 ReadWriteOnce / ReadWriteMany)能否实现,取决于底层存储,不是 K8s 单独保证。生信场景常见「大目录、多 Pod 只读共享」——需要 RWX 能力时,必须选支持共享的文件系统类存储(如 NFS、部分云文件存储),块存储往往只支持 RWO

PVC Pending(未绑定)会导致 Pod 长期 Pending,见 k8s-04 图 3


2. Service:稳定访问与 kube-proxy

Pod IP 会因重启而变化。Service 提供一组 稳定的虚拟 IP(ClusterIP)或 DNS 名,通过 label selector 关联到后端 Pod;Endpoints(或 EndpointSlice)对象维护当前 Pod IP 与端口列表。各节点上的 kube-proxy 把到 Service IP 的流量转发到实际 Pod(实现机制常见 iptablesIPVS)。

图 2 Service 与后端 Pod(示意)

图 2 Service 通过 selector 关联 Endpoints;kube-proxy 在节点上实现转发;NodePort/LoadBalancer 扩展访问范围

类型 直觉
ClusterIP 仅集群内访问(默认)
NodePort 在每个节点开放静态端口,可经节点 IP 访问
LoadBalancer 常由云厂商接入外部负载均衡(需环境支持)

Ingress 则在七层(HTTP)主机名、路径把流量路由到不同 Service,通常需要集群内安装 Ingress Controller(如 nginx、traefik 等)。具体注解、TLS、证书与各厂商实现强相关,本文只保留「Ingress 资源 + Controller 才生效」这一占位。


3. RBAC:谁能对 API 做什么

Kubernetes 用 RBAC(Role-Based Access Control)控制「哪个身份可以对哪些资源执行哪些动词」。

  • Subject:用户、组,或 ServiceAccount(给 Pod 用的集群内身份)。
  • Role / ClusterRole:允许 getlistcreate 等对 podsjobs 等资源的操作。
  • RoleBinding / ClusterRoleBinding:把 Subject 绑到 Role 上;命名空间内常用 Role + RoleBinding,全集群用 ClusterRole + ClusterRoleBinding。

图 3 RBAC 绑定关系(示意)

图 3 User 或 ServiceAccount 经 RoleBinding 绑定到 Role;ClusterRole/ClusterRoleBinding 用于集群级或跨命名空间

流水线控制器(含 Argo)常在 ServiceAccount 下创建 Pod;若该 SA 没有创建 Job/Pod 的权限,你会在 WorkflowPod 事件里看到 403 Forbidden。排障方向:检查 Workflow 使用的 serviceAccountName、对应 RoleBindingRole


4. 阅读策略:先模型,后环境

存储类名、Ingress 注解、IAM 与 IRSA 等强依赖厂商与集群版本。建议:

  1. 用本文三张图建立 PVC → PV / 动态供给Service → Endpoints → kube-proxySubject → Binding → Role固定心智
  2. 在目标集群执行 kubectl get storageclasskubectl get ingressclass(或文档中的等价命令)了解可用能力
  3. 再打开具体 YAML 样例与官方「安装 Ingress Controller / CSI 驱动」章节。

5. 小结

  • 持久化:Pod 引用 PVC;PVC 绑定 PV 或由 StorageClass 动态创建 PV;访问模式受后端存储约束。
  • 集群内访问Service 提供稳定入口;kube-proxy 在节点侧实现转发;Ingress 需 Controller 才能工作。
  • 权限RBACServiceAccount(或用户)与 Role 绑定;Argo/流水线问题常涉及 SA 权限不足。
  • 系列收束k8s-01~05 从概述、集群来源、kubectl、工作负载与资源,到存储/网络/RBAC,可与 概述篇 图 5 对照,形成一条完整入门路径;进阶请结合云文档与 Argo 深入。
-------------本文结束感谢您的阅读-------------