增强公网Azure Kubernetes Service(AKS)默认NSG安全规则及集群防护咨询
AKS集群网络安全增强指南
一、AKS默认NSG需添加的核心安全规则
AKS默认生成的NSG无严格限制规则,需补充以下规则实现最小权限访问,满足合规要求:
入站规则(严格管控外部访问)
- 拒绝所有未明确允许的入站流量:设置优先级最低(如65000)的拒绝规则,确保所有未被前置规则放行的流量被阻断
- 仅开放必要的管理端口:
- 允许指定管理IP段(如你的办公公网IP/32)访问节点的22端口(SSH),仅限运维场景使用
- 允许指定管理IP段访问Kubernetes API服务器的443端口,供本地
kubectl操作集群使用
- 限制集群内部通信:允许AKS节点池内网IP段之间的全端口通信,保障Pod、节点间的正常协作
- 阻断高风险入站端口:直接禁止公网访问常见高危端口(如3389、8080),除非业务明确需要且有额外防护
出站规则(按需放行,缩小暴露面)
- 允许HTTPS访问镜像仓库:必须放行443端口的出站流量,用于拉取Docker Hub、ACR等仓库的镜像;建议限定目标为镜像仓库的官方IP段(而非所有公网),进一步降低风险
- 允许DNS解析:放行53端口的UDP/TCP流量,保障节点和Pod能解析服务、仓库地址
- 允许AKS依赖服务的流量:根据业务使用的Azure服务(如Azure Monitor、Key Vault),放行对应端口的出站流量
- 拒绝所有未明确允许的出站流量:设置低优先级的拒绝规则,确保只有前置规则放行的流量能流出集群
二、AKS集群防护最佳实践
- 使用Azure CNI网络插件:相比kubenet,Azure CNI支持更精细的网络隔离,可配合NetworkPolicy管控Pod间通信
- 启用Pod级网络策略:通过NetworkPolicy定义Pod间的访问规则,比如仅允许前端Pod访问后端Pod,拒绝无关Pod的通信
- 使用私有节点池:节点仅分配内网IP,通过Azure Bastion或专用跳转机进行运维访问,避免节点直接暴露公网
- 定期更新集群和节点:及时升级Kubernetes版本、应用节点OS补丁,修复已知安全漏洞
- 启用Pod安全标准:通过Azure Policy或Kubernetes原生配置,强制禁止特权容器、root用户运行等高危行为
- 部署Azure Defender for Kubernetes:实时监控集群威胁,比如异常访问、恶意镜像、权限越权等
- 使用专用服务账户:为每个应用创建独立服务账户,分配最小权限的RBAC角色,避免使用默认
default账户 - 加密数据传输与存储:启用Azure磁盘加密、Kubernetes Secrets加密,Ingress强制配置HTTPS,保障数据安全
三、规则实施示例(Azure CLI)
1. 添加允许管理IP访问节点SSH的入站规则
az network nsg rule create \ --name Allow_SSH_From_Mgmt \ --nsg-name <你的AKS节点池NSG名称> \ --resource-group <AKS节点池所在资源组> \ --priority 100 \ --source-address-prefixes 192.168.1.10/32 \ # 替换为你的管理IP --destination-port-ranges 22 \ --protocol Tcp \ --access Allow
2. 添加允许访问Docker Hub的出站规则
az network nsg rule create \ --name Allow_DockerHub_HTTPS \ --nsg-name <你的AKS节点池NSG名称> \ --resource-group <AKS节点池所在资源组> \ --priority 100 \ --destination-address-prefixes 104.18.0.0/16,104.16.0.0/12 \ # Docker Hub官方IP段 --destination-port-ranges 443 \ --protocol Tcp \ --access Allow \ --direction Outbound
3. 添加拒绝所有未允许入站流量的规则
az network nsg rule create \ --name Deny_All_Inbound \ --nsg-name <你的AKS节点池NSG名称> \ --resource-group <AKS节点池所在资源组> \ --priority 65000 \ --source-address-prefixes '*' \ --destination-port-ranges '*' \ --protocol '*' \ --access Deny \ --direction Inbound
四、镜像仓库访问的疑问解答
是的,必须允许443端口的出站流量才能正常拉取镜像——无论是Docker Hub还是私有镜像仓库,镜像拉取均通过HTTPS协议(443端口)完成。为提升安全性,不建议放行所有公网443流量,最好限定目标为镜像仓库的官方IP段或Azure服务标签(如ACR可使用AzureContainerRegistry作为目标地址前缀)。
内容的提问来源于stack exchange,提问作者cloudspawn
相关产品推荐
相关产品推荐

