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
許可權
依賴 | 資源 |
---|---|
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: ""