为 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
字段在 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
。