Kubernetes 內部安全配置

命名空間

此專案中提供的大多數組件都需要知道命名空間。對於 Kubernetes (1.3+),命名空間作為服務帳戶密碼的一部分提供給 Pod,並由客戶端自動偵測。對於較早的版本,需要將其指定為 Pod 的環境變數。一種快速的方法如下

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

服務帳戶

對於支援叢集內更細緻的角色基礎存取的 Kubernetes 發行版,您需要確保使用 spring-cloud-kubernetes 執行的 Pod 可以存取 Kubernetes API。對於您分配給部署或 Pod 的任何服務帳戶,您需要確保它們具有正確的角色。

根據需求,您需要在以下資源上擁有 getlistwatch 權限

表 1. Kubernetes 資源權限
相依性 資源

spring-cloud-starter-kubernetes-fabric8

pods, services, endpoints

spring-cloud-starter-kubernetes-fabric8-config

configmaps, secrets

spring-cloud-starter-kubernetes-client

pods, services, endpoints

spring-cloud-starter-kubernetes-client-config

configmaps, secrets

為了開發目的,您可以將 cluster-reader 權限新增至您的 default 服務帳戶。在生產系統上,您可能需要提供更精細的權限。

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