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、服務、端點

spring-cloud-starter-kubernetes-fabric8-config

ConfigMaps、Secrets

spring-cloud-starter-kubernetes-client

Pods、服務、端點

spring-cloud-starter-kubernetes-client-config

ConfigMaps、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: ""
© . This site is unofficial and not affiliated with VMware.