Tanzu Kubernetes 版本 v1.25 及更新版本啟用了網繭安全性許可 (PSA) 控制器。藉由 PSA,可使用命名空間標籤強制執行網繭安全性標準。
PSA 已在 TKR 1.25 及更新版本中啟用
網繭安全性許可控制器是一個 Kubernetes 控制器,用於將網繭安全性標準套用至 TKG 叢集上執行的網繭。依預設,Tanzu Kubernetes 版本 v1.25 及更新版本啟用了網繭安全性許可 (PSA) 控制器。PSA 控制器取代了已棄用並移除的網繭安全性原則 (PSP) 控制器。另請參閱為 TKR 1.24 及更早版本設定 PSP。
Tanzu Kubernetes 版本 v1.25 是一個過渡版本,將 PSA 設定為發出警告。從 Tanzu Kubernetes 版本 v1.26 開始,將強制執行 PSA。您應該計劃將網繭工作負載從 PSP 移轉到 PSA,以便升級 TKG 叢集。請參閱從網繭安全性原則移轉到內建網繭安全性許可控制器以取得指引。
設定叢集範圍 PSA
從 vSphere 8 Update 3 開始,可以使用隨 v1beta1 API 一起提供的 podSecurityStandard
ClusterClass 變數來設定叢集範圍 PSA。請參閱叢集 v1beta1 API。
PSA 模式
enforce
、
audit
和
warn
。下表列出並說明每種 PSA 模式。
模式 | 說明 |
---|---|
enforce |
安全性違規將導致網繭遭到拒絕。 |
audit |
安全性違規將觸發向稽核記錄中記錄的事件新增稽核註解,但允許強制執行安全性。 |
warn |
安全性違規將觸發面向使用者的警告,但允許強制執行安全性。 |
PSA 標準
層級 | 說明 |
---|---|
privileged |
無限制控制,提供盡可能最廣泛的權限層級。此安全性標準允許已知的權限提升。 |
baseline |
限制性最低的控制,可阻止已知的權限提升。此安全性標準允許預設 (最低限度指定) 網繭組態。 |
restricted |
嚴格限制的控制,遵循目前的網繭強化最佳做法。 |
PSA 命名空間標籤
PSA 控制器在 Kubernetes 命名空間層級強制執行網繭安全性。。您可以使用命名空間標籤定義所需的 PSA 模式和層級,用於指定命名空間中的網繭。
Kubernetes 提供了一組標籤,可用於定義要用於命名空間的標準。您套用的標籤會定義在偵測到 PSA 違規時 Kubernetes 控制平面採取的動作。對於指定的 Kubernetes 命名空間,您可以設定任何或所有模式,或為不同的模式設定不同的層級。
# MODE must be one of `enforce`, `audit`, or `warn`. # LEVEL must be one of `privileged`, `baseline`, or `restricted`. pod-security.kubernetes.io/<MODE>=<LEVEL>
還可以套用每個模式的版本標籤,用於將安全性標準固定到 Kubernetes 版本。如需詳細資訊,請參閱使用命名空間標籤強制執行網繭安全性標準。
TKG 叢集的預設 PSA
依預設,對於非系統命名空間,使用 Tanzu Kubernetes 版本 v1.25 佈建的 TKG 叢集會將 PSA 模式 warn
和 audit
設定為 restricted
。這是一個非強制設定:如果網繭違反安全性,PSA 控制器將產生警告和稽核通知,但不會拒絕該網繭。
enforce
設定為
restricted
。如果網繭違反安全性,則會遭到拒絕。您必須在命名空間上設定 PSA,才能以較低的限制性控制執行網繭。
TKr 版本 | 預設 PSA |
---|---|
TKr v1.25 | 模式:警告 | 層級:受限制 模式:稽核 | 層級:受限制 模式:強制執行 | 層級:未設定 |
TKr v1.26 及更新版本 | 模式:強制執行 | 層級:受限制 |
使用命名空間標籤設定 PSA
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/audit=privileged kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/warn=privileged
restricted
降級到
baseline
。
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=baseline
baseline
標準:
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=baseline
restricted
降級到
privileged
。
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=privileged
privileged
標準:
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=privileged
對於 Tanzu Kubernetes 版本 v1.26 及更新版本,請使用以下範例命令對所有非系統命名空間放寬 PSA。
kubectl label --overwrite ns --all pod-security.kubernetes.io/enforce=privileged
kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=restricted
為個別網繭設定安全性內容
{"opType":"CREATE_POD","succeeded":false,"err":"creating pod example-pod: pods \"example-pod\" is forbidden: violates PodSecurity \"restricted:latest\": allowPrivilegeEscalation != false (container \"example-container\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"example-container\" must set securityContext.capabilities.drop=[\"ALL\"]), runAsNonRoot != true (pod or container \"example-container\" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container \"example-container\" must set securityContext.seccompProfile.type to \"RuntimeDefault\" or \"Localhost\")","events":[]}
apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - image: gcr.io/google_containers/busybox:1.24 name: example-container command: ["/bin/sh", "-c", "echo 'hello' > /mnt/volume1/index.html && chmod o+rX /mnt /mnt/volume1/index.html && while true ; do sleep 2 ; done"] securityContext: allowPrivilegeEscalation: false runAsNonRoot: true seccompProfile: type: "RuntimeDefault" capabilities: drop: [all] volumeMounts: - name: example-volume-mount mountPath: /mnt/volume1 restartPolicy: Never volumes: - name: example-volume persistentVolumeClaim: claimName: example-pvc