Použití kontejnerů Windows HostProcess
Kontejnery HostProcess / Privilegované kontejnery rozšiřují model kontejnerů Windows tak, aby umožňovaly širší škálu scénářů správy clusterů Kubernetes. Kontejnery HostProcess běží přímo na hostiteli a udržují chování a přístup podobné normálnímu procesu. Kontejnery HostProcess umožňují uživatelům zabalit a distribuovat operace správy a funkce, které vyžadují přístup k hostiteli, a přitom zachovat metody správy verzí a nasazení poskytované kontejnery.
Privilegovaný daemonSet může provádět změny nebo monitorovat hostitele s Linuxem v Kubernetes, ale ne na hostitelích s Windows. Kontejnery HostProcess jsou ekvivalentem windows ke zvýšení oprávnění hostitele.
Omezení
- Kontejnery HostProcess vyžadují Kubernetes verze 1.23 nebo vyšší.
- Kontejnery HostProcess vyžadují
containerd
modul runtime kontejneru 1.6 nebo vyšší. - Pody HostProcess můžou kvůli omezení operačního systému Windows obsahovat pouze kontejnery HostProcess. Neprivilegované kontejnery Windows nemůžou sdílet virtuální síťovou kartu s oborem názvů IP adresy hostitele.
- Kontejnery HostProcess se na hostiteli spouští jako proces. Jedinou izolací, kterou mají tyto kontejnery od hostitele, jsou omezení prostředků vynucená uživatelským účtem HostProcess.
- Izolace systému souborů a izolace Hyper-V se pro kontejnery HostProcess nepodporují.
- Připojení svazků jsou podporovaná a připojují se pod svazek kontejneru. Viz Připojení svazků.
- Ve výchozím nastavení je pro kontejnery hostitelských procesů k dispozici omezená sada uživatelských účtů hostitele. Viz Volba uživatelského účtu.
- Omezení prostředků, jako jsou disky, paměť a počet procesorů, fungují stejně jako procesy na hostiteli.
- Připojení pojmenovaných kanálů a sokety domény Unix nejsou přímo podporované, ale jsou přístupné z cesty hostitele, například
\\.\pipe\*
.
Spuštění úlohy HostProcess
Pokud chcete ve svém nasazení používat funkce HostProcess, nastavte hostProcess: true a hostNetwork: true:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Pokud chcete spustit ukázkovou úlohu, která používá funkce HostProcess v existujícím clusteru AKS s uzly Windows, vytvořte hostprocess.yaml
s následujícím obsahem:
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
Použijte kubectl
ke spuštění ukázkové úlohy:
kubectl apply -f hostprocess.yaml
Měl by se zobrazit následující výstup:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
Zobrazením protokolů podu ověřte, že vaše úloha používá funkce kontejnerů HostProcess.
Slouží kubectl
k vyhledání názvu podu v kube-system
oboru názvů.
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
Pomocí příkazu zobrazte kubectl log
protokoly podu a ověřte, že má pod práva správce:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Další kroky
Další informace o kontejnerech HostProcess a příspěvku Microsoftu k upstreamu Kubernetes najdete v tématu Alfa ve verzi 1.22: Kontejnery Windows HostProcess.