配置管理
✨ 特性:
- 统一配置中心: ConfigMap、Secret、Service、Ingress 等资源集中管理
- 可视化编辑: 告别命令行,表单化创建和编辑 Kubernetes 资源
- 引用追踪: 一键查看资源被哪些工作负载引用
- YAML 导出: 支持下载资源的完整 YAML 配置
- RBAC 管理: ServiceAccount、Role、RoleBinding 权限配置
概述
配置管理是 Kube Nova 中用于管理 Kubernetes 配置类资源的统一入口。在 Kubernetes 中,应用的运行不仅依赖工作负载本身,还需要各种配置资源的支撑,包括配置数据、密钥凭证、网络服务、存储卷、访问权限等。
传统方式下,运维人员需要使用 kubectl 命令或编写 YAML 文件来管理这些资源,不仅操作繁琐,而且容易出错。配置管理模块将这些资源进行可视化封装,通过直观的表单界面完成资源的创建、编辑、查看和删除操作,大幅降低了 Kubernetes 的使用门槛。
操作路径:业务中心 → 配置管理
页面布局
配置管理页面顶部提供筛选条件,用于定位目标资源:
集群选择 选择要管理的目标集群,不同集群的资源相互独立。
工作空间选择 选择工作空间(对应 Kubernetes Namespace),配置资源都是命名空间级别的资源。
页面主体区域通过标签页切换不同的资源类型:ConfigMap、Secret、Service、Ingress、PVC、ServiceAccount、Role、RoleBinding。每个标签页都提供独立的资源列表和管理功能。
ConfigMap 管理
ConfigMap 是 Kubernetes 中用于存储非敏感配置数据的资源对象。它可以存储配置文件、环境变量、命令行参数等配置信息,并以键值对的形式供 Pod 使用。
使用场景
ConfigMap 适用于存储应用程序的配置信息,例如数据库连接字符串(非密码部分)、应用配置文件、特性开关、日志级别设置等。通过将配置与容器镜像分离,可以实现配置的动态更新,而无需重新构建镜像。
资源列表
ConfigMap 列表展示以下信息:
名称 显示 ConfigMap 的名称,如 coredns、kube-proxy 等。
命名空间 显示 ConfigMap 所属的命名空间。
数据项 显示 ConfigMap 中包含的键值对数量,点击可查看具体内容。
运行时长 显示 ConfigMap 从创建到现在的时长。
创建时间 显示 ConfigMap 的创建时间戳。
操作功能
点击每行右侧的操作菜单,可执行以下操作:
查看详情 查看 ConfigMap 的完整信息,包括元数据、标签、注解和所有数据项内容。
编辑 修改 ConfigMap 的数据项,支持添加、修改、删除键值对。编辑后引用该 ConfigMap 的 Pod 会自动感知变化(需要应用支持配置热加载)。
查看引用 查看哪些工作负载(Deployment、StatefulSet 等)引用了该 ConfigMap。这是一个非常实用的功能,在删除或修改 ConfigMap 前,可以先确认影响范围。
下载 YAML 将 ConfigMap 导出为 YAML 文件,便于备份、迁移或版本管理。
删除 删除 ConfigMap。删除前请确认没有工作负载正在引用,否则可能导致 Pod 启动失败。
创建 ConfigMap
点击「新增」按钮创建新的 ConfigMap:
名称 输入 ConfigMap 的名称,需符合 Kubernetes 命名规范。
数据项 添加一个或多个键值对。键是数据项的名称,值可以是简单字符串或完整的配置文件内容。
配置文件存储技巧
如果需要存储完整的配置文件(如 nginx.conf),可以将文件名作为键,文件内容作为值。例如:键为 nginx.conf,值为完整的 Nginx 配置内容。
Secret 管理
Secret 是 Kubernetes 中用于存储敏感信息的资源对象。与 ConfigMap 不同,Secret 的数据会进行 Base64 编码存储,并且在 etcd 中可以配置加密存储,提供更高的安全性。
Secret 类型
Kubernetes 支持多种类型的 Secret,平台会通过标签标识不同类型:
Opaque 通用类型,用于存储任意的用户自定义数据,是最常用的类型。
SA Token(kubernetes.io/service-account-token) ServiceAccount 的访问令牌,由 Kubernetes 自动创建和管理。
Docker Config(kubernetes.io/dockerconfigjson) Docker 镜像仓库的认证信息,用于拉取私有镜像。
TLS(kubernetes.io/tls) TLS 证书和私钥,用于 Ingress 的 HTTPS 配置。
Basic Auth(kubernetes.io/basic-auth) 基本认证信息,包含用户名和密码。
资源列表
Secret 列表展示以下信息:
名称 显示 Secret 的名称。
命名空间 显示 Secret 所属的命名空间。
类型 显示 Secret 的类型标签,便于快速识别用途。
数据项数量 显示 Secret 中包含的数据项数量。
创建时间 显示 Secret 的创建时间。
操作功能
查看详情 查看 Secret 的完整信息。出于安全考虑,敏感数据默认以掩码形式显示,可选择显示明文。
编辑 修改 Secret 的数据项。编辑时可以直接输入明文,系统会自动进行 Base64 编码。
查看引用 查看哪些工作负载引用了该 Secret。
下载 YAML 导出 Secret 的 YAML 配置。注意:导出的 YAML 中数据是 Base64 编码的。
删除 删除 Secret。
创建 Secret
点击「新增」按钮创建新的 Secret:
名称 输入 Secret 的名称。
类型 选择 Secret 的类型。不同类型会有不同的数据项模板。
数据项 根据所选类型填写数据项。输入明文即可,系统会自动编码。
安全提示
虽然 Secret 提供了基本的安全保护,但 Base64 编码并非加密。对于高度敏感的数据,建议结合外部密钥管理系统(如 HashiCorp Vault)使用,或启用 etcd 加密。
Service 管理
Service 是 Kubernetes 中用于定义 Pod 访问策略的抽象层。由于 Pod 的 IP 地址是动态分配的,Service 提供了稳定的访问入口,通过标签选择器将流量路由到后端 Pod。
Service 类型
ClusterIP 默认类型,仅在集群内部可访问。分配一个集群内部 IP 地址,其他 Pod 可以通过该 IP 或服务名访问。
NodePort 在 ClusterIP 的基础上,在每个节点上开放一个静态端口(范围 30000-32767)。可以通过 <节点IP>:<NodePort> 从集群外部访问。
LoadBalancer 在 NodePort 的基础上,由云厂商提供外部负载均衡器。适用于云环境,会分配一个外部可访问的 IP 地址。
ExternalName 将服务映射到外部 DNS 名称,不创建代理,用于访问集群外部服务。
资源列表
Service 列表展示以下信息:
名称 显示 Service 的名称,如 kube-dns、metrics-server 等。
命名空间 显示 Service 所属的命名空间。
类型 显示 Service 的类型(ClusterIP、NodePort、LoadBalancer)。
集群 IP 显示分配的集群内部 IP 地址。
外部 IP 对于 LoadBalancer 类型,显示外部负载均衡器的 IP 地址。
端口 显示 Service 暴露的端口列表,格式为 端口/协议,如 53/UDP,53/TCP,9153/TCP。
创建时间 显示 Service 的创建时间。
操作功能
查看详情 查看 Service 的完整配置,包括选择器、端口映射、会话亲和性等。
编辑 修改 Service 的配置,如端口映射、服务类型等。
查看 Endpoints 查看 Service 后端关联的 Pod 端点列表,包括每个端点的 IP 和端口。这对于排查服务连接问题非常有用。
下载 YAML 导出 Service 的 YAML 配置。
删除 删除 Service。
创建 Service
点击「新增」按钮创建新的 Service:
名称 输入 Service 的名称。
类型 选择 Service 类型。
选择器 配置标签选择器,定义哪些 Pod 属于该 Service 的后端。
端口配置 配置端口映射,包括服务端口、目标端口、协议等。
Ingress 管理
Ingress 是 Kubernetes 中用于管理外部 HTTP/HTTPS 流量访问的资源。它提供了基于域名和路径的路由规则,可以将外部请求路由到不同的 Service。
核心概念
Ingress Controller Ingress 资源本身只是一组路由规则的定义,需要 Ingress Controller(如 Nginx Ingress、Traefik)来实际处理流量。
Host 定义域名规则,支持精确匹配和通配符匹配。
Path 定义 URL 路径规则,支持前缀匹配和精确匹配。
TLS 配置 HTTPS 证书,实现加密传输。
资源列表
Ingress 列表展示以下信息:
名称 显示 Ingress 的名称。
状态 显示 Ingress 的健康状态(正常/异常)。
命名空间 显示 Ingress 所属的命名空间。
Ingress Class 显示使用的 Ingress Controller 类型,如 nginx。
主机/规则 显示配置的域名和路由规则数量。点击域名可直接访问。
LoadBalancer 地址 显示 Ingress Controller 的外部访问地址。
端口/TLS 显示监听的端口(80/443)以及是否配置了 TLS。
创建时间 显示 Ingress 的创建时间。
操作功能
查看详情 查看 Ingress 的完整配置,包括所有路由规则、TLS 配置、注解等。
编辑 修改 Ingress 的路由规则和配置。
下载 YAML 导出 Ingress 的 YAML 配置。
删除 删除 Ingress。
创建 Ingress
点击「新增 Ingress」按钮创建新的 Ingress:
名称 输入 Ingress 的名称。
Ingress Class 选择要使用的 Ingress Controller。
路由规则 配置域名和路径规则:
- Host:输入域名,如
app.example.com - Path:输入路径,如
/api - Path Type:选择匹配类型(Prefix/Exact/ImplementationSpecific)
- Backend Service:选择后端 Service 和端口
TLS 配置 配置 HTTPS 证书:
- Hosts:选择需要启用 TLS 的域名
- Secret:选择包含证书的 Secret
PVC 管理
PVC(PersistentVolumeClaim)是 Kubernetes 中用于申请持久化存储的资源。通过 PVC,Pod 可以使用持久化存储卷来保存数据,即使 Pod 被删除重建,数据也不会丢失。
核心概念
StorageClass 存储类定义了存储的类型和配置参数,如 nfs-default、csi-disk 等。不同的存储类提供不同的存储能力。
Access Modes 访问模式定义了存储卷的访问方式:
- ReadWriteOnce (RWO):单节点读写
- ReadOnlyMany (ROX):多节点只读
- ReadWriteMany (RWX):多节点读写
Volume Mode 卷模式定义了存储的使用方式:
- Filesystem:作为文件系统挂载
- Block:作为原始块设备挂载
资源列表
PVC 列表展示以下信息:
名称 显示 PVC 的名称,如 mysql-pvc、redis-pvc 等。
命名空间 显示 PVC 所属的命名空间。
状态 显示 PVC 的绑定状态:
Bound(绿色):已成功绑定到 PVPending(黄色):等待绑定Lost(红色):绑定的 PV 已丢失
绑定的 PV 显示 PVC 绑定的 PersistentVolume 名称,点击可查看 PV 详情。
容量 显示申请的存储容量,如 10Gi、5Gi。
访问模式 显示存储卷的访问模式。
存储类 显示使用的存储类名称。
创建时间 显示 PVC 的创建时间。
操作功能
查看详情 查看 PVC 的完整配置和状态信息。
关联信息 查看哪些 Pod 正在使用该 PVC,以及绑定的 PV 详情。
编辑 修改 PVC 的配置。注意:某些字段(如容量、访问模式)在创建后可能无法修改。
下载 YAML 导出 PVC 的 YAML 配置。
删除 删除 PVC。如果 PVC 正在被 Pod 使用,删除操作会被阻塞,直到 Pod 释放该 PVC。
创建 PVC
点击「新增 PVC」按钮创建新的 PVC:
名称 输入 PVC 的名称。
存储类 选择存储类。如果集群配置了默认存储类,可以留空使用默认值。
访问模式 选择访问模式,需要存储类支持所选模式。
容量 输入申请的存储容量。
PVC 扩容
部分存储类支持在线扩容。如果需要增加 PVC 容量,可以编辑 PVC 修改容量值(只能增加,不能减少)。扩容是否支持以及是否需要重启 Pod,取决于存储类的配置。
ServiceAccount 管理
ServiceAccount 是 Kubernetes 中用于 Pod 身份认证的资源。每个 Pod 都会关联一个 ServiceAccount,用于访问 Kubernetes API 和其他需要认证的服务。
使用场景
ServiceAccount 主要用于以下场景:为应用提供访问 Kubernetes API 的凭证,配合 RBAC 实现细粒度的权限控制,以及为 Pod 提供拉取私有镜像的凭证(通过 imagePullSecrets)。
资源列表
ServiceAccount 列表展示以下信息:
名称 显示 ServiceAccount 的名称。每个命名空间都有一个名为 default 的默认 ServiceAccount。
命名空间 显示 ServiceAccount 所属的命名空间。
Secrets 数量 显示关联的 Secret 数量,包括 API 访问令牌等。
创建时间 显示 ServiceAccount 的创建时间。
操作功能
查看详情 查看 ServiceAccount 的完整信息,包括关联的 Secret 和 ImagePullSecret。
编辑 修改 ServiceAccount 的配置,如添加 ImagePullSecret。
下载 YAML 导出 ServiceAccount 的 YAML 配置。
删除 删除 ServiceAccount。注意:删除后使用该 ServiceAccount 的 Pod 将无法正常访问 API。
创建 ServiceAccount
点击「新增 ServiceAccount」按钮创建新的 ServiceAccount:
名称 输入 ServiceAccount 的名称。
ImagePullSecrets 可选,配置用于拉取私有镜像的 Secret。
Role 管理
Role 是 Kubernetes RBAC(基于角色的访问控制)中定义权限的资源。Role 定义了一组权限规则,指定了可以对哪些资源执行哪些操作。
核心概念
Role vs ClusterRole Role 是命名空间级别的资源,只能授权访问同一命名空间内的资源。ClusterRole 是集群级别的资源,可以授权访问集群范围的资源或跨命名空间的资源。
权限规则 每条规则包含三个要素:
- apiGroups:API 组,如
""表示核心 API,apps表示应用 API - resources:资源类型,如
pods、deployments、services - verbs:操作动词,如
get、list、create、update、delete
资源列表
Role 列表展示以下信息:
名称 显示 Role 的名称。
命名空间 显示 Role 所属的命名空间。
创建时间 显示 Role 的创建时间。
操作功能
查看详情 查看 Role 的完整权限规则列表。
关联信息 查看哪些 RoleBinding 引用了该 Role,以及绑定的主体(用户、组、ServiceAccount)。
编辑 修改 Role 的权限规则。
下载 YAML 导出 Role 的 YAML 配置。
删除 删除 Role。删除前请确认没有 RoleBinding 正在引用。
创建 Role
点击「新增 Role」按钮创建新的 Role:
名称 输入 Role 的名称。
权限规则 添加一条或多条权限规则,定义可访问的资源和操作。
RoleBinding 管理
RoleBinding 用于将 Role 中定义的权限授予给用户、组或 ServiceAccount。它建立了「谁」(Subject)可以「做什么」(Role)的关联关系。
核心概念
Subject 权限的授予对象,可以是:
- User:用户,通常对应证书中的 CN 字段
- Group:用户组,通常对应证书中的 O 字段
- ServiceAccount:服务账户
RoleRef 引用的 Role 或 ClusterRole。RoleBinding 可以引用同一命名空间的 Role,也可以引用集群级别的 ClusterRole(权限范围仍限于当前命名空间)。
资源列表
RoleBinding 列表展示以下信息:
名称 显示 RoleBinding 的名称。
命名空间 显示 RoleBinding 所属的命名空间。
绑定的角色 显示引用的 Role 或 ClusterRole 名称。
创建时间 显示 RoleBinding 的创建时间。
操作功能
查看详情 查看 RoleBinding 的完整配置,包括引用的角色和所有主体。
编辑 修改 RoleBinding 的主体列表。注意:roleRef 字段在创建后不可修改。
下载 YAML 导出 RoleBinding 的 YAML 配置。
删除 删除 RoleBinding。删除后相关主体将失去该角色的权限。
创建 RoleBinding
点击「新增 RoleBinding」按钮创建新的 RoleBinding:
名称 输入 RoleBinding 的名称。
角色引用 选择要绑定的 Role 或 ClusterRole。
主体 添加一个或多个主体,指定权限的授予对象。
最佳实践
ConfigMap 和 Secret 使用建议
分离配置和代码 将应用配置外置到 ConfigMap,实现配置与镜像的解耦。这样可以在不重新构建镜像的情况下更新配置。
敏感信息使用 Secret 密码、API 密钥、证书等敏感信息务必使用 Secret 存储,不要放在 ConfigMap 或镜像中。
合理拆分配置 将相关的配置项组织到同一个 ConfigMap 中,但避免单个 ConfigMap 过大。建议按功能模块或更新频率拆分。
配置热加载 如果应用支持配置热加载,可以利用 ConfigMap 挂载为文件的方式,实现配置的动态更新。
Service 配置建议
选择合适的类型 内部服务使用 ClusterIP,需要外部访问优先使用 Ingress + ClusterIP 的组合,谨慎使用 NodePort 和 LoadBalancer。
合理配置端口 使用有意义的端口命名(如 http、grpc),便于 Istio 等服务网格识别协议类型。
健康检查端点 为 Service 后端的 Pod 配置健康检查,确保流量只路由到健康的实例。
存储管理建议
选择合适的存储类 根据应用的 I/O 特性选择存储类型。数据库等高 I/O 应用使用 SSD 存储,日志等低频访问数据可使用 HDD 存储。
合理规划容量 根据数据增长预期合理申请容量,既要避免浪费,也要为增长留有余量。
定期备份 持久化存储虽然数据不会丢失,但仍需要定期备份以防止误删除或数据损坏。
RBAC 配置建议
最小权限原则 只授予必要的最小权限,避免使用过于宽泛的权限(如 *)。
使用 ServiceAccount 为每个应用创建独立的 ServiceAccount,并配置专属的权限,避免使用 default ServiceAccount。
定期审计 定期审查 Role 和 RoleBinding 配置,清理不再需要的权限授权。
常见问题
ConfigMap 更新后 Pod 为什么没有感知到?
ConfigMap 更新后,Pod 感知变化的方式取决于挂载方式。如果通过环境变量引用,Pod 不会自动感知变化,需要重启 Pod。如果通过 Volume 挂载为文件,Kubernetes 会在几分钟内自动更新文件内容,但应用是否能感知取决于应用本身的实现。
PVC 一直处于 Pending 状态怎么办?
PVC Pending 通常有以下原因:存储类不存在或配置错误,存储后端容量不足,访问模式不被存储类支持,或者没有可用的 PV 满足 PVC 的要求。可以通过 kubectl describe pvc 查看详细的事件信息来定位问题。
如何查看 ServiceAccount 的 Token?
在 Kubernetes 1.24 之后,ServiceAccount 不再自动创建 Token Secret。如需获取 Token,可以创建一个类型为 kubernetes.io/service-account-token 的 Secret 并关联到 ServiceAccount,或者使用 kubectl create token 命令生成临时 Token。
Ingress 配置后无法访问怎么排查?
排查步骤包括:确认 Ingress Controller 是否正常运行,检查 Ingress 规则是否正确配置,确认后端 Service 和 Pod 是否正常,检查域名解析是否正确指向 Ingress Controller 的地址,以及查看 Ingress Controller 的日志定位具体错误。