为 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 用户名不区分大小写。 此外,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
。