Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Configure RunAsUserName for Windows pods and containers
Configurando RunAsUserName Para Pods e Contêineres Windows
Kubernetes v1.18 [stable]
Esta página mostra como usar a configuração runAsUserName
para Pods
e contêineres que serão executados em nós Windows. Isso é aproximadamente
equivalente à configuração runAsUser
específica do Linux, permitindo a você
executar aplicativos em um contêiner com um nome de usuário diferente do padrão.
Antes de você começar
Você precisa ter um cluster Kubernetes, e a ferramenta de linha de comando Kubectl deve ser configurada para se comunicar com o seu cluster. Espera-se que o cluster tenha nós de carga de trabalho Windows, onde os Pods com contêineres executando as cargas de trabalho do Windows, serão agendados.
Defina o nome de usuário para um Pod
Para especificar o nome de usuário com o qual executar os processos de contêiner do Pod,
inclua o campo securityContext
(PodSecurityContext)
na especificação do Pod, e dentro dela, o campo WindowsOptions
(WindowsSecurityContextOptions)
contendo o campo runAsUserName
.
As opções de contexto de segurança do Windows que você especificar para um Pod, se aplicam a todos os contêineres do Pod, inclusive os de inicialização.
Veja abaixo um arquivo de configuração para um Pod do Windows que possui o campo
runAsUserName
definido:
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
Crie o Pod:
kubectl apply -f https://k8s.io/examples/windows/run-as-username-pod.yaml
Verifique se o contêiner do Pod está em execução:
kubectl get pod run-as-username-pod-demo
Abra um shell para o contêiner em execução:
kubectl exec -it run-as-username-pod-demo -- powershell
Verifique se o shell está executando com o nome de usuário correto:
echo $env:USERNAME
A saída deve ser:
ContainerUser
Defina o nome de usuário para o contêiner
Para especificar o nome de usuário com o qual executar os processos de um contêiner,
inclua o campo SecurityContext
(SecurityContext)
no manifesto do contêiner, e dentro dele, o campo WindowsOptions
(WindowsSecurityContextOptions)
contendo o campo runAsUserName
.
As opções de contexto de segurança do Windows que você especificar para um contêiner, se aplicam apenas a esse contêiner individual, e substituem as configurações feitas no nível do Pod.
Aqui está o arquivo de configuração para um pod que possui um contêiner,
e o campo runAsUserName
está definido no nível do Pod e no nível do contêiner:
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
Crie o Pod:
kubectl apply -f https://k8s.io/examples/windows/run-as-username-container.yaml
Verifique se o contêiner do Pod está em execução:
kubectl get pod run-as-username-container-demo
Abra um shell para o contêiner em execução:
kubectl exec -it run-as-username-container-demo -- powershell
Verifique se o shell está executando o usuário correto, (aquele definido no nível do contêiner):
echo $env:USERNAME
A saída deve ser:
ContainerAdministrator
Limitações de nomes de usuários no Windows
Para usar esse recurso, o valor definido no campo runAsUserName
deve ser um nome
de usuário válido. Deve ter o seguinte formato: DOMAIN\USER
, onde DOMAIN\
é opcional. Os nomes de usuário do Windows não diferenciam letras maiúsculas
e minúsculas. Além disso, existem algumas restrições em relação ao DOMAIN
e USER
:
- O campo
runAsUserName
: não pode estar vazio, e não pode conter caracteres de controle (Valores ASCII :0x00-0x1F
,0x7F
) - O nome de
DOMAIN
NetBios, ou um nome de DNS, cada um com suas próprias restrições:- Nomes NetBios: máximo de 15 caracteres, não podem iniciar com
.
(ponto), e não podem conter os seguintes caracteres:\ / : * ? " < > |
- Nomes DNS: máximo de 255 caracteres, contendo apenas caracteres alfanuméricos,
pontos, e traços, e não podem iniciar ou terminar com um
.
(ponto) ou-
(traço).
- Nomes NetBios: máximo de 15 caracteres, não podem iniciar com
- O
USER
: deve ter no máximo 20 caracteres, não pode conter somente pontos ou espaços, e não pode conter os seguintes caracteres:" / \ [ ] : ; | = , + * ? < > @
.
Exemplos de valores aceitáveis para o campo runAsUserName
: ContainerAdministrator
,
ContainerUser
, NT AUTHORITY\NETWORK SERVICE
, NT AUTHORITY\LOCAL SERVICE
.
Para mais informações sobre estas limitações, verifique aqui e aqui.