Utilizar contentores do Windows HostProcess
Os contentores HostProcess/Privileged expandem o modelo de contentor do Windows para permitir uma maior variedade de cenários de gestão de clusters do Kubernetes. Os contentores HostProcess são executados diretamente no anfitrião e mantêm o comportamento e o acesso semelhantes aos de um processo normal. Os contentores HostProcess permitem que os utilizadores empacotem e distribuam operações e funcionalidades de gestão que requerem acesso de anfitrião, ao mesmo tempo que mantêm o controlo de versões e os métodos de implementação fornecidos pelos contentores.
Um DaemonSet com privilégios pode realizar alterações ou monitorizar um anfitrião Linux no Kubernetes, mas não nos anfitriões do Windows. Os contentores HostProcess são o equivalente do Windows à elevação de anfitriões.
Limitações
- Os contentores hostProcess requerem o Kubernetes 1.23 ou superior.
- Os contentores HostProcess requerem
containerd
um runtime de contentor 1.6 ou superior. - Os pods HostProcess só podem conter contentores HostProcess devido a uma limitação no sistema operativo Windows. Os contentores do Windows não privilegiados não podem partilhar uma vNIC com o espaço de nomes de IP do anfitrião.
- Os contentores HostProcess são executados como um processo no anfitrião. O único isolamento que esses contentores têm do anfitrião são as restrições de recursos impostas na conta de utilizador HostProcess.
- O isolamento do sistema de ficheiros e o isolamento do Hyper-V não são suportados para contentores HostProcess.
- As montagens de volumes são suportadas e são montadas sob o volume de contentor. Veja Montagens de Volumes.
- Por predefinição, está disponível um conjunto limitado de contas de utilizador anfitrião para contentores do Processo de Anfitrião. Veja Escolher uma Conta de Utilizador.
- Os limites de recursos, como o disco, a memória e a contagem de cpus, funcionam da mesma forma que os processos no anfitrião.
- As montagens de pipe nomeadas e os sockets de domínio Unix não são diretamente suportados, mas podem ser acedidos no caminho do anfitrião, por exemplo
\\.\pipe\*
.
Executar uma carga de trabalho HostProcess
Para utilizar as funcionalidades HostProcess com a sua implementação, defina hostProcess: true e hostNetwork: true:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Para executar uma carga de trabalho de exemplo que utiliza funcionalidades hostProcess num cluster do AKS existente 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
Utilize kubectl
para executar a carga de trabalho de exemplo:
kubectl apply -f hostprocess.yaml
Deverá ver o seguinte resultado:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
Verifique se a carga de trabalho utiliza as funcionalidades dos contentores HostProcess ao ver os registos do pod.
Utilize kubectl
para localizar o nome do pod no kube-system
espaço de nomes.
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
Utilize kubectl log
para ver os registos do pod e verificar se o pod tem direitos de administrador:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Passos seguintes
Para obter mais informações sobre os contentores HostProcess e a contribuição da Microsoft para o Kubernetes a montante, veja Alpha in v1.22: Windows HostProcess Containers (Alfa em v1.22: Windows HostProcess Containers).