如何在Azure AKS节点运行PowerShell脚本部署安全工具
实现方案汇总
以下方案均适配Azure AKS Windows节点的执行环境,可根据你的部署周期、使用场景选择:
方案1:自定义DaemonSet + 节点选择器(推荐长期稳定部署)
厂商未提供DaemonSet可自行编写,是K8s原生最适合常驻工具部署的方案:
- 先给需要部署安全工具的Windows节点打自定义标签,用于后续筛选:
kubectl label nodes <目标Windows节点名称> security-tool-deploy=true - 编写自定义DaemonSet配置,通过
nodeSelector仅匹配你打了标签的节点,挂载主机磁盘后执行PowerShell脚本即可,参考配置如下:apiVersion: apps/v1 kind: DaemonSet metadata: name: security-tool-deploy namespace: kube-system spec: selector: matchLabels: app: security-tool-deploy template: metadata: labels: app: security-tool-deploy spec: nodeSelector: kubernetes.io/os: windows security-tool-deploy: "true" # 仅匹配目标节点 containers: - name: deployer image: mcr.microsoft.com/windows/servercore:ltsc2022 # 和节点OS版本匹配即可 securityContext: privileged: true # 开放主机操作权限 command: ["powershell.exe", "-Command", " # 部署去重逻辑,避免重复执行 if (Test-Path C:\host\security-tool-deployed.lock) { exit 0 } # 拉取并执行你的PowerShell脚本 Invoke-WebRequest -Uri '<脚本存储可访问地址>' -OutFile C:\deploy.ps1 C:\deploy.ps1 # 写入部署标记 New-Item -Path C:\host\security-tool-deployed.lock -ItemType File "] volumeMounts: - name: host-c mountPath: C:\host # 挂载节点C盘到容器内 volumes: - name: host-c hostPath: path: C:\ type: Directory
方案2:一次性Job批量执行(适合临时部署场景)
如果不需要常驻守护进程,仅需单次执行脚本完成部署,可通过kubectl debug直接在目标节点启动临时容器执行:
- 先筛选所有目标Windows节点存入变量:
$targetNodes = kubectl get nodes -l kubernetes.io/os=windows,security-tool-deploy=true -o jsonpath='{.items[*].metadata.name}' - 循环执行部署脚本:
foreach ($node in $targetNodes.Split(" ")) { kubectl debug node/$node -it --image=mcr.microsoft.com/windows/servercore:ltsc2022 -- powershell -ExecutionPolicy Bypass -Command " Invoke-WebRequest -Uri '<脚本存储可访问地址>' -OutFile C:\deploy.ps1 C:\deploy.ps1 " }
方案3:Azure VM扩展直接执行(适用于无需K8s API介入的场景)
直接通过Azure管理接口操作AKS Windows节点池对应的虚拟机规模集,执行自定义脚本:
- 获取目标Windows节点池对应的VMSS资源ID:
az aks show -g <AKS资源组名> -n <AKS集群名> --query "agentPoolProfiles[?name=='<Windows节点池名称>'].vmssResourceId" -o tsv - 给VMSS添加自定义脚本扩展执行部署:
az vmss extension set --vmss-id <上一步获取的VMSS ID> --name CustomScriptExtension --publisher Microsoft.Compute --settings '{"fileUris": ["<脚本存储可访问地址>"], "commandToExecute": "powershell.exe -ExecutionPolicy Unrestricted -File deploy-tool.ps1"}'
注意事项
- 所用Windows容器镜像版本需要和AKS节点的OS版本匹配,避免容器启动失败
- PowerShell执行时建议添加
-ExecutionPolicy Bypass参数,避免系统默认策略拦截脚本执行 - 若安全工具需要常驻运行,部署完成后可将工具注册为Windows服务,避免进程意外退出
- 部署完成后可给节点打
security-tool-deployed=success标签,方便后续批量排查状态
内容的提问来源于stack exchange,提问作者DelMab
相关产品推荐
相关产品推荐

