使用 Windows HostProcess 容器
HostProcess /特殊權限容器會擴充 Windows 容器模型,以實現更廣泛的 Kubernetes 叢集管理情節。 HostProcess 容器會直接在主機上執行,並維持與一般程序類似的行為和存取權。 HostProcess 容器可讓使用者封裝及散發需要主機存取的管理作業和功能,同時保留容器所提供的版本設定和部署方法。
特殊權限的 DaemonSet 可以在 Kubernetes 上 (但無法在 Windows 主機) 執行變更或監視 Linux 主機。 HostProcess 容器相當於主機提高權限的 Windows。
限制
- HostProcess 容器需要 Kubernetes 1.23 或更新版本。
- HostProcess 容器需要
containerd
1.6 或更高版本的容器執行階段。 - 由於 Windows 作業系統的限制,HostProcess Pod 只能包含 HostProcess 容器。 非特殊權限的 Windows 容器無法與主機 IP 命名空間共用 vNIC。
- HostProcess 容器會在主機上以程序的形式執行。 這些容器與主機唯一的隔離是對 HostProcess 使用者帳戶所施加的資源限制。
- HostProcess 容器不支援檔案系統隔離和 Hyper-V 隔離。
- 支援磁碟區掛接,且其掛接在容器磁碟區下。 請參閱磁碟區掛階。
- 根據預設,主機程序容器可以使用一組有限的主機使用者帳戶。 請參閱選擇使用者帳戶。
- 磁碟、記憶體和 CPU 計數等資源限制的運作方式與主機上的程序相同。
- 不直接支援具名管道掛接和 Unix 網域通訊端,但您可以在其主機路徑上存取這些項目,例如
\\.\pipe\*
。
執行 HostProcess 工作負載
若要搭配部署使用 HostProcess 功能,請設定 hostProcess: true 和 hostNetwork: true:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
若要在具有 Windows 節點的現有 AKS 叢集上執行使用 HostProcess 功能的範例工作負載,請使用下列內容建立 hostprocess.yaml
:
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
使用 kubectl
來執行範例工作負載:
kubectl apply -f hostprocess.yaml
您應該會看見下列輸出:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
檢視 Pod 的記錄,確認您的工作負載使用 HostProcess 容器的功能。
使用 kubectl
來尋找 kube-system
命名空間中的 Pod 名稱。
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
使用 kubectl log
來檢視 Pod 的記錄,並確認 Pod 具有系統管理員權限:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
下一步
如需 HostProcess 容器和 Microsoft 對 Kubernetes 上游貢獻的詳細資訊,請參閱第 1.22 版中的 Alpha:Windows HostProcess 容器。