Uso de contenedores HostProcess de Windows
Los contenedores HostProcess/con privilegios amplían el modelo de contenedor de Windows para habilitar una gama más amplia de escenarios de administración de clústeres de Kubernetes. Los contenedores HostProcess se ejecutan directamente en el host y mantienen un comportamiento y el acceso similares a los de un proceso normal. Los contenedores HostProcess permiten a los usuarios empaquetar y distribuir las operaciones y funcionalidades de administración que requieren acceso al host, al mismo tiempo que conservan los métodos de control de versiones e implementación proporcionados por los contenedores.
Un DaemonSet con privilegios puede realizar cambios o supervisar un host Linux en Kubernetes, pero no hosts Windows. Los contenedores HostProcess son el equivalente en Windows de la elevación de host.
Limitaciones
- Los contenedores HostProcess requieren Kubernetes 1.23, o cualquier versión superior.
- Los contenedores HostProcess requieren
containerd
1.6 o cualquier runtime de contenedor superior. - Los pods hostProcess solo pueden incluir contenedores hostProcess debido a una limitación en el sistema operativo Windows. Los contenedores Windows sin privilegios no pueden compartir una vNIC con el espacio de nombres IP del host.
- Los contenedores HostProcess se ejecutan como un proceso en el host. El único aislamiento del host que tienen esos contenedores son las restricciones de recursos impuestas en la cuenta de usuario de HostProcess.
- Ni el aislamiento del sistema de archivos ni el de Hyper-V no son compatibles con contenedores HostProcess.
- Se admiten montajes de volumen y se montan en el volumen del contenedor. Consulte Montajes de volumen.
- De forma predeterminada, hay disponible un conjunto limitado de cuentas de usuario de host para contenedores de proceso de host. Consulte Elección de una cuenta de usuario.
- Los límites de recursos, como el disco, la memoria y el número de CPU, funcionan de la misma manera que los procesos del host.
- Los montajes de canalizaciones con nombre y los sockets de dominio Unix no se admiten directamente, pero se puede acceder a ellos en su ruta de acceso de host, como, por ejemplo
\\.\pipe\*
.
Ejecución de una carga de trabajo de HostProcess
Para usar las características de HostProcess con la implementación, establezca hostProcess: true y hostNetwork: true:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Para ejecutar una carga de trabajo de ejemplo que usa las características de HostProcess en un clúster de AKS existente con nodos de Windows, cree hostprocess.yaml
con el siguiente contenido:
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 ejecutar la carga de trabajo de ejemplo:
kubectl apply -f hostprocess.yaml
Debería ver la siguiente salida:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
Compruebe que la carga de trabajo usa las características de los contenedores hostProcess mediante la visualización de los registros del pod.
Use kubectl
para buscar el nombre del pod en el espacio de nombres 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 ver los registros del pod y comprobar que el pod tiene derechos de administrador:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Pasos siguientes
Para más información sobre los contenedores HostProcess y la contribución de Microsoft a Kubernetes ascendente, consulte Alpha in v1.22: Windows HostProcess Containers.
Azure Kubernetes Service