Black lives matter.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
Kubernetes v1.17 [beta]
本页展示如何为运行在 Windows 节点上的 pod 和容器启用并使用 RunAsUserName
功能。此功能旨在成为 Windows 版的 runAsUser
(Linux),允许用户使用与默认用户名不同的用户名运行容器 entrypoint。
注意: 该功能目前处于 beta 状态。 `RunAsUserName` 的整体功能不会出现变更,但是关于用户名验证的部分可能会有所更改。
你必须有一个 Kubernetes 集群,并且 kubectl 必须能和集群通信。集群应该要有 Windows 工作节点,将在其中调度运行 Windows 工作负载的 pod 和容器。
要指定运行 Pod 容器时所使用的用户名,请在 Pod 声明中包含 securityContext
(PodSecurityContext)字段,并在其内部包含 windowsOptions
(WindowsSecurityContextOptions)字段的 runAsUserName
字段。
您为 Pod 指定的 Windows SecurityContext 选项适用于该 Pod 中(包括 init 容器)的所有容器。
这儿有一个已经设置了 runAsUserName
字段的 Windows Pod 的配置文件:
windows/run-as-username-pod.yaml
|
---|
|
创建 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 SecurityContext 选项仅适用于该容器,并且它会覆盖 Pod 级别设置。
这儿有一个 Pod 的配置文件,其只有一个容器,并且在 Pod 级别和容器级别都设置了 runAsUserName
:
windows/run-as-username-container.yaml
|
---|
|
创建 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
想要使用此功能,在 runAsUserName
字段中设置的值必须是有效的用户名。它必须是 DOMAIN\USER
这种格式,其中 DOMAIN\
是可选的。Windows 用户名不区分大小写。此外,关于 DOMAIN
和 USER
还有一些限制:
runAsUserName
字段不能为空,并且不能包含控制字符(ASCII 值:0x00-0x1F
、0x7F
)DOMAIN
必须是 NetBios 名称或 DNS 名称,每种名称都有各自的局限性:
.
(点)开头,并且不能包含以下字符:\ / : * ? " < > |
.
(点)或 -
(中划线)开头和结尾。USER
最多不超过 20 个字符,不能 只 包含点或空格,并且不能包含以下字符:" / \ [ ] : ; | = , + * ? < > @
runAsUserName
字段接受的值的一些示例:ContainerAdministrator
、ContainerUser
、NT AUTHORITY\NETWORK SERVICE
、NT AUTHORITY\LOCAL SERVICE
。