為 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 使用者名稱不區分大小寫。此外,對於 DOMAINUSER 還有一些限制

  • runAsUserName 欄位不能為空,也不能包含控制字元 (ASCII 值:0x00-0x1F0x7F)
  • DOMAIN 必須是 NetBios 名稱或 DNS 名稱,每個名稱都有其自己的限制
    • NetBios 名稱:最多 15 個字元,不能以 . (點) 開頭,並且不能包含以下字元:\ / : * ? " < > |
    • DNS 名稱:最多 255 個字元,僅包含字母數字字元、點和破折號,並且不能以 . (點) 或 - (破折號) 開頭或結尾。
  • USER 最多只能有 20 個字元,不可包含點或空格,且不可包含以下字元:" / \ [ ] : ; | = , + * ? < > @

runAsUserName 欄位的可接受值範例:ContainerAdministratorContainerUserNT AUTHORITY\NETWORK SERVICENT AUTHORITY\LOCAL SERVICE

如需更多關於這些限制的資訊,請查看這裡這裡

下一步

最後修改時間為 2023 年 8 月 24 日下午 6:38 PST (太平洋標準時間):Use code_sample shortcode instead of code shortcode (e8b136c3b3)