为 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 中的所有容器和初始化容器。

以下是一个具有 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 的配置文件,其中 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)