為 Windows Pod 和容器配置 RunAsUserName
Kubernetes v1.18 [stable]
本頁面展示如何為將在 Windows 節點上執行的 Pod 和容器使用 runAsUserName
設定。 這大致相當於 Linux 特定的 runAsUser
設定,允許你以與預設不同的使用者名稱在容器中執行應用程式。
準備工作
你必須擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具必須配置為與你的叢集通訊。 叢集應具有 Windows 工作節點,以便排程執行 Windows 工作負載的 Pod 容器。
為 Pod 設定使用者名稱
要指定執行 Pod 容器程序的使用者名稱,請在 Pod 規範中包含 securityContext
欄位 (PodSecurityContext),並在其中包含包含 runAsUserName
欄位的 windowsOptions
(WindowsSecurityContextOptions) 欄位。
你為 Pod 指定的 Windows 安全上下文選項適用於 Pod 中的所有容器和 init 容器。
這是一個已設定 runAsUserName
欄位的 Windows Pod 的配置檔案
apiVersion: v1
kind: Pod
metadata:
name: run-as-username-pod-demo
spec:
securityContext:
windowsOptions:
runAsUserName: "ContainerUser"
containers:
- name: run-as-username-demo
image: mcr.microsoft.com/windows/servercore:ltsc2019
command: ["ping", "-t", "localhost"]
nodeSelector:
kubernetes.io/os: windows
建立 Pod
kubectl apply -f https://k8s.io/examples/windows/run-as-username-pod.yaml
驗證 Pod 的容器是否正在執行
kubectl get pod run-as-username-pod-demo
進入正在執行的容器的 shell
kubectl exec -it run-as-username-pod-demo -- powershell
檢查 shell 是否以正確的使用者名稱執行
echo $env:USERNAME
輸出應該是
ContainerUser
為容器設定使用者名稱
要指定執行容器程序的使用者名稱,請在容器清單中包含 securityContext
欄位 (SecurityContext),並在其中包含包含 runAsUserName
欄位的 windowsOptions
(WindowsSecurityContextOptions) 欄位。
你為容器指定的 Windows 安全上下文選項僅適用於該單個容器,並且它們會覆蓋 Pod 級別的設定。
這是一個包含一個容器的 Pod 的配置檔案,runAsUserName
欄位在 Pod 級別和容器級別都已設定
apiVersion: v1
kind: Pod
metadata:
name: run-as-username-container-demo
spec:
securityContext:
windowsOptions:
runAsUserName: "ContainerUser"
containers:
- name: run-as-username-demo
image: mcr.microsoft.com/windows/servercore:ltsc2019
command: ["ping", "-t", "localhost"]
securityContext:
windowsOptions:
runAsUserName: "ContainerAdministrator"
nodeSelector:
kubernetes.io/os: windows
建立 Pod
kubectl apply -f https://k8s.io/examples/windows/run-as-username-container.yaml
驗證 Pod 的容器是否正在執行
kubectl get pod run-as-username-container-demo
進入正在執行的容器的 shell
kubectl exec -it run-as-username-container-demo -- powershell
檢查 shell 是否以正確的使用者名稱執行(在容器級別設定的那個)
echo $env:USERNAME
輸出應該是
ContainerAdministrator
Windows 使用者名稱限制
為了使用此功能,runAsUserName
欄位中設定的值必須是有效的使用者名稱。它必須具有以下格式:DOMAIN\USER
,其中 DOMAIN\
是可選的。Windows 使用者名稱不區分大小寫。此外,對 DOMAIN
和 USER
還有一些限制
runAsUserName
欄位不能為空,並且不能包含控制字元(ASCII 值:0x00-0x1F
,0x7F
)DOMAIN
必須是 NetBios 名稱或 DNS 名稱,每個都有自己的限制- NetBios 名稱:最大 15 個字元,不能以
.
(點)開頭,並且不能包含以下字元:\ / : * ? " < > |
- DNS 名稱:最大 255 個字元,只包含字母數字字元、點和破折號,並且不能以
.
(點)或-
(破折號)開頭或結尾。
- NetBios 名稱:最大 15 個字元,不能以
USER
最多包含 20 個字元,不能**只**包含點或空格,並且不能包含以下字元:" / \ [ ] : ; | = , + * ? < > @
。
runAsUserName
欄位的可接受值示例:ContainerAdministrator
、ContainerUser
、NT AUTHORITY\NETWORK SERVICE
、NT AUTHORITY\LOCAL SERVICE
。