You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:18:03