Windows HostProcess-containers gebruiken
HostProcess/Privileged-containers breiden het Windows-containermodel uit om een breder scala aan Kubernetes-clusterbeheerscenario's mogelijk te maken. HostProcess-containers worden rechtstreeks op de host uitgevoerd en behouden gedrag en toegang die vergelijkbaar zijn met dat van een normaal proces. Met HostProcess-containers kunnen gebruikers beheerbewerkingen en -functies verpakken en distribueren waarvoor hosttoegang is vereist, terwijl versiebeheer en implementatiemethoden van containers behouden blijven.
Een bevoegde DaemonSet kan wijzigingen uitvoeren of een Linux-host bewaken op Kubernetes, maar niet op Windows-hosts. HostProcess-containers zijn het Windows-equivalent van hostverhoging.
Beperkingen
- Voor HostProcess-containers is Kubernetes 1.23 of hoger vereist.
- HostProcess-containers vereisen
containerd
containerruntime 1.6 of hoger. - HostProcess-pods kunnen alleen HostProcess-containers bevatten. Dit is een huidige beperking van het Windows-besturingssysteem. Niet-bevoegde Windows-containers kunnen geen vNIC delen met de IP-naamruimte van de host.
- HostProcess-containers worden uitgevoerd als een proces op de host. De enige isolatie die deze containers van de host hebben, zijn de resourcebeperkingen die zijn opgelegd aan het HostProcess-gebruikersaccount.
- Bestandssysteemisolatie en Hyper-V-isolatie worden niet ondersteund voor HostProcess-containers.
- Volumekoppelingen worden ondersteund en worden onder het containervolume gekoppeld. Zie Volumekoppelingen.
- Er is standaard een beperkte set hostgebruikersaccounts beschikbaar voor hostprocescontainers. Zie Een gebruikersaccount kiezen.
- Resourcelimieten zoals schijf, geheugen en CPU-aantal werken op dezelfde manier als processen op de host.
- Benoemde pipe-koppelingen en Unix-domeinsockets worden niet rechtstreeks ondersteund, maar kunnen worden geopend op hun hostpad, bijvoorbeeld
\\.\pipe\*
.
Een HostProcess-workload uitvoeren
Als u HostProcess-functies wilt gebruiken met uw implementatie, stelt u privilaged in: true, hostProcess: true en hostNetwork: true:
spec:
...
containers:
...
securityContext:
privileged: true
windowsOptions:
hostProcess: true
...
hostNetwork: true
...
Als u een voorbeeldworkload wilt uitvoeren die gebruikmaakt van HostProcess-functies op een bestaand AKS-cluster met Windows-knooppunten, maakt hostprocess.yaml
u met het volgende:
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
containers:
- name: powershell
image: mcr.microsoft.com/powershell:lts-nanoserver-1809
securityContext:
privileged: true
windowsOptions:
hostProcess: true
runAsUserName: "NT AUTHORITY\\SYSTEM"
command:
- powershell.exe
- -command
- |
$AdminRights = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator")
Write-Host "Process has admin rights: $AdminRights"
while ($true) { Start-Sleep -Seconds 2147483 }
hostNetwork: true
terminationGracePeriodSeconds: 0
Gebruik kubectl
om de voorbeeldworkload uit te voeren:
kubectl apply -f hostprocess.yaml
U moet de volgende uitvoer zien:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
U kunt controleren of uw workload gebruikmaakt van de functies van HostProcess door de logboeken van de pod weer te geven.
Gebruik kubectl
om de naam van de pod in de kube-system
naamruimte te zoeken.
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
Gebruik kubectl log
om de logboeken van de pod weer te geven en te controleren of de pod beheerdersrechten heeft:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Volgende stappen
Zie Alpha in v1.22: Windows HostProcess Containers voor meer informatie over HostProcess-containers en de bijdrage van Microsoft aan Kubernetes upstream.