安全配置在 Kubernetes 内部

命名空间

本项目提供的大多数组件都需要知道命名空间。对于 Kubernetes(1.3+),命名空间作为服务账户密钥的一部分提供给 Pod,并由客户端自动检测。对于早期版本,需要将命名空间作为环境变量指定给 Pod。一种快速实现方式如下:spring-doc.cadn.net.cn

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

服务账号

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

根据需求,您需要在以下资源上拥有 getlistwatch 权限:spring-doc.cadn.net.cn

表 1. Kubernetes 资源权限
依赖 资源

spring-cloud-starter-kubernetes-fabric8spring-doc.cadn.net.cn

Pods、服务、端点spring-doc.cadn.net.cn

spring-cloud-starter-kubernetes-fabric8-configspring-doc.cadn.net.cn

配置映射,密钥spring-doc.cadn.net.cn

spring-cloud-starter-kubernetes-clientspring-doc.cadn.net.cn

Pods、服务、端点spring-doc.cadn.net.cn

spring-cloud-starter-kubernetes-client-configspring-doc.cadn.net.cn

配置映射,密钥spring-doc.cadn.net.cn

为了开发目的,您可以向您的 default 服务账号添加 cluster-reader 权限。在生产环境中,您可能需要提供更细粒度的权限。spring-doc.cadn.net.cn

以下 Role 和 RoleBinding 是针对 default 账户的命名空间权限示例:spring-doc.cadn.net.cn

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: ""