為 Windows Pod 和容器配置 RunAsUserName
Kubernetes v1.18 [穩定]
本頁說明如何為將在 Windows 節點上執行的 Pod 和容器使用 runAsUserName
設定。這大致相當於 Linux 特有的 runAsUser
設定,可讓您以與預設不同的使用者名稱在容器中執行應用程式。
準備開始
您需要有一個 Kubernetes 叢集,並且必須配置 kubectl 命令列工具以與您的叢集通訊。叢集應具有 Windows 工作節點,其中將排程執行 Windows 工作負載的容器 Pod。
設定 Pod 的使用者名稱
若要指定執行 Pod 容器程序的使用者名稱,請在 Pod 規格中包含 securityContext
欄位 (PodSecurityContext),並在其內包含 windowsOptions
(WindowsSecurityContextOptions) 欄位,其中包含 runAsUserName
欄位。
您為 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),並在其內包含 windowsOptions
(WindowsSecurityContextOptions) 欄位,其中包含 runAsUserName
欄位。
您為容器指定的 Windows 安全環境選項僅適用於該個別容器,並且會覆寫在 Pod 層級所做的設定。
以下是具有一個容器的 Pod 的組態檔,並且在 Pod 層級和容器層級都設定了 runAsUserName
欄位
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
。