Usar contêineres do Windows HostProcess
Os contêineres do HostProcess/Privileged estendem o modelo de contêiner do Windows para permitir uma maior variedade de cenários de gerenciamento de cluster do Kubernetes. Os contêineres HostProcess são executados diretamente no host e mantêm o comportamento e o acesso semelhantes aos de um processo regular. Com eles, os usuários podem empacotar e distribuir operações de gerenciamento e funcionalidades que exigem acesso ao host e manter os métodos de controle de versão e de implantação fornecidos pelos contêineres.
Um DaemonSet privilegiado pode realizar alterações ou monitorar um host Linux no Kubernetes, mas não hosts Windows. Os contêineres HostProcess são o equivalente do Windows à elevação de host.
Limitações
- Os contêineres HostProcess exigem o Kubernetes 1.23 ou superior.
- Eles também exigem um runtime de contêiner
containerd
1.6 ou superior. - Os pods de HostProcess só podem conter contêineres HostProcess devido a uma limitação no sistema operacional Windows. Contêineres Windows não privilegiados não podem compartilhar uma vNIC com o namespace de IP do host.
- Os contêineres HostProcess são executados como um processo no host. O único isolamento que esses contêineres têm do host são as restrições de recurso impostas à conta de usuário do HostProcess.
- O isolamento do sistema de arquivos e do Hyper-V não têm suporte para os contêineres do HostProcess.
- As montagens de volume têm suporte e são feitas sob o volume do contêiner. Veja Montagens de volume.
- Um conjunto limitado de contas de usuário de host está disponível para contêineres HostProcess por padrão. Veja Como escolher uma conta de usuário.
- Os limites de recursos, como disco, memória e contagem de CPU, funcionam como os processos no host.
- Não há suporte direto para montagens de pipe nomeado e soquetes de domínio Unix, mas podem ser acessados em seu respectivo caminho do host, por exemplo
\\.\pipe\*
.
Executar uma carga de trabalho do HostProcess
Para usar os recursos HostProcess com sua implantação, defina hostProcess: verdadeiro e hostNetwork: verdadeiro:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Para executar uma carga de trabalho de exemplo que usa recursos HostProcess em um cluster existente do AKS com nós do Windows, crie hostprocess.yaml
com os seguintes conteúdos:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: privileged-daemonset
namespace: kube-system
labels:
app: privileged-daemonset
spec:
selector:
matchLabels:
app: privileged-daemonset
template:
metadata:
labels:
app: privileged-daemonset
spec:
nodeSelector:
kubernetes.io/os: windows
securityContext:
windowsOptions:
hostProcess: true
runAsUserName: "NT AUTHORITY\\SYSTEM"
hostNetwork: true
containers:
- name: powershell
image: mcr.microsoft.com/powershell:lts-nanoserver-1809 # or lts-nanoserver-ltsc2022
command:
- powershell.exe
- -Command
- Start-Sleep -Seconds 2147483
terminationGracePeriodSeconds: 0
Use kubectl
para executar a carga de trabalho de exemplo:
kubectl apply -f hostprocess.yaml
A seguinte saída deve ser exibida:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
Verifique se sua carga de trabalho usa os recursos dos contêineres HostProcess, exibindo os logs do pod.
Use kubectl
para localizar o nome do pod no namespace kube-system
.
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
Use kubectl log
para exibir os logs do pod e verificar se ele tem direitos de administrador:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Próximas etapas
Para mais informações sobre os contêineres HostProcess e a contribuição da Microsoft para o upstream do Kubernetes, consulte Alpha v1.22: contêineres HostProcess do Windows.
Azure Kubernetes Service