為 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 使用者名稱不區分大小寫。此外,對 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:使用 code_sample 簡碼代替 code 簡碼 (e8b136c3b3)