跳到主要内容
版本:5.0.1

Kubernetes 内部安全配置

DeepSeek V3 中英对照 Security Configurations Inside Kubernetes

命名空间​

本项目提供的大多数组件都需要了解命名空间信息。对于 Kubernetes(1.3+ 版本),命名空间会作为服务账户密钥的一部分提供给 Pod,客户端会自动检测到该信息。对于早期版本,则需要将命名空间指定为 Pod 的环境变量。一种快速实现方式如下:

env:
- name: "KUBERNETES_NAMESPACE"
valueFrom:
fieldRef:
fieldPath: "metadata.namespace"

服务账户​

对于支持集群内更细粒度基于角色访问控制的 Kubernetes 发行版,您需要确保运行 spring-cloud-kubernetes 的 Pod 能够访问 Kubernetes API。对于您分配给部署或 Pod 的任何服务账户,需要确保它们拥有正确的角色。

根据需求,您需要对以下资源拥有 get、list 和 watch 权限:

表 1. Kubernetes 资源权限

依赖项资源
spring-cloud-starter-kubernetes-fabric8pods, services, endpoints
spring-cloud-starter-kubernetes-fabric8-configconfigmaps, secrets
spring-cloud-starter-kubernetes-clientpods, services, endpoints
spring-cloud-starter-kubernetes-client-configconfigmaps, secrets

出于开发目的,您可以为 default 服务账户添加 cluster-reader 权限。在生产系统中,您可能需要提供更细粒度的权限。

以下 Role 和 RoleBinding 是为 default 账户配置命名空间权限的示例:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: YOUR-NAME-SPACE
name: namespace-reader
rules:
- apiGroups: [""]
resources: ["configmaps", "pods", "services", "endpoints", "secrets"]
verbs: ["get", "list", "watch"]

---

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-reader-binding
namespace: YOUR-NAME-SPACE
subjects:
- kind: ServiceAccount
name: default
apiGroup: ""
roleRef:
kind: Role
name: namespace-reader
apiGroup: ""