implementing-network-policies-for-kubernetes
通过配置 Kubernetes NetworkPolicy 资源实施 Pod 级别的网络分段,强制执行最小权限通信并限制集群内的横向移动(Lateral Movement)。
Best use case
implementing-network-policies-for-kubernetes is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
通过配置 Kubernetes NetworkPolicy 资源实施 Pod 级别的网络分段,强制执行最小权限通信并限制集群内的横向移动(Lateral Movement)。
Teams using implementing-network-policies-for-kubernetes should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/implementing-network-policies-for-kubernetes/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How implementing-network-policies-for-kubernetes Compares
| Feature / Agent | implementing-network-policies-for-kubernetes | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
通过配置 Kubernetes NetworkPolicy 资源实施 Pod 级别的网络分段,强制执行最小权限通信并限制集群内的横向移动(Lateral Movement)。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 为 Kubernetes 实施网络策略
## 概述
Kubernetes NetworkPolicy(网络策略)是实现集群内 Pod 间通信安全的原生机制。通过定义精细的入站(Ingress)和出站(Egress)规则,可以强制执行最小权限原则并防止横向移动(Lateral Movement)。本技能涵盖默认拒绝(Default Deny)模式的实施、应用特定策略配置、跨命名空间隔离以及出站限制,使用 Calico、Cilium 或 Antrea 等 CNI 插件。
## 前置条件
- 已运行的 Kubernetes 集群(1.20+)
- 支持 NetworkPolicy 的 CNI 插件(Calico、Cilium、Antrea 或 Weave)
- kubectl CLI 工具,具有集群管理权限
- 了解 Kubernetes Pod、Namespace、Label 和 Selector 的基本概念
- 集群中已部署应用(用于测试策略)
## 核心概念
### 策略类型
| 类型 | 说明 | 用途 |
|------|------|------|
| Ingress(入站) | 控制到 Pod 的入站流量 | 限制哪些来源可以访问 Pod |
| Egress(出站) | 控制从 Pod 发出的流量 | 限制 Pod 可以访问哪些目标 |
| 默认拒绝 | 隐式拒绝所有未匹配流量 | 零信任(Zero Trust)基础 |
### 选择器类型
- **podSelector** - 根据 Label 匹配同一命名空间中的 Pod
- **namespaceSelector** - 匹配整个命名空间中的 Pod
- **ipBlock** - 基于 CIDR 范围匹配外部 IP
### CNI 插件支持
| 插件 | NetworkPolicy | 扩展策略 | eBPF |
|------|--------------|---------|------|
| Calico | 是 | GlobalNetworkPolicy | 否 |
| Cilium | 是 | CiliumNetworkPolicy | 是 |
| Antrea | 是 | ClusterNetworkPolicy | 否 |
| Weave | 是 | 否 | 否 |
## 实施步骤
### 步骤 1:验证 CNI 插件支持
```bash
# 检查已安装的 CNI 插件
kubectl get pods -n kube-system | grep -E "calico|cilium|antrea|weave"
# 验证 NetworkPolicy 支持(测试策略)
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-policy
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
EOF
kubectl delete networkpolicy test-policy
```
### 步骤 2:为每个命名空间实施默认拒绝策略
```yaml
# default-deny-all.yaml - 拒绝所有入站和出站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: production
spec:
podSelector: {} # 匹配命名空间中的所有 Pod
policyTypes:
- Ingress
- Egress
```
```bash
# 为关键命名空间应用默认拒绝策略
for ns in production staging default; do
kubectl apply -f default-deny-all.yaml -n $ns
done
# 验证策略已应用
kubectl get networkpolicies --all-namespaces
```
### 步骤 3:允许必要的 DNS 出站流量
```yaml
# allow-dns-egress.yaml - 允许 Pod 进行 DNS 解析
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns-egress
namespace: production
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
```
### 步骤 4:配置应用特定策略
三层应用(前端 → 后端 → 数据库)示例:
```yaml
# frontend-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: frontend-policy
namespace: production
spec:
podSelector:
matchLabels:
app: frontend
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 0.0.0.0/0 # 允许外部流量访问前端
ports:
- protocol: TCP
port: 443
- protocol: TCP
port: 80
egress:
- to:
- podSelector:
matchLabels:
app: backend
ports:
- protocol: TCP
port: 8080
- ports: # DNS
- protocol: UDP
port: 53
---
# backend-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: backend-policy
namespace: production
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
egress:
- to:
- podSelector:
matchLabels:
app: database
ports:
- protocol: TCP
port: 5432
- ports: # DNS
- protocol: UDP
port: 53
---
# database-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: database-policy
namespace: production
spec:
podSelector:
matchLabels:
app: database
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: backend
ports:
- protocol: TCP
port: 5432
egress:
- ports: # 仅 DNS
- protocol: UDP
port: 53
```
### 步骤 5:配置跨命名空间策略
```yaml
# allow-monitoring.yaml - 允许监控命名空间抓取指标
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-monitoring-scrape
namespace: production
spec:
podSelector: {} # 应用到所有 Pod
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: monitoring
podSelector:
matchLabels:
app: prometheus
ports:
- protocol: TCP
port: 9090
- protocol: TCP
port: 8080
```
```bash
# 为监控命名空间添加 Label
kubectl label namespace monitoring kubernetes.io/metadata.name=monitoring
```
### 步骤 6:实施出站限制
```yaml
# restrict-egress.yaml - 限制后端服务的出站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: backend-egress-restrict
namespace: production
spec:
podSelector:
matchLabels:
app: backend-service
policyTypes:
- Egress
egress:
# 允许访问同命名空间内的数据库
- to:
- podSelector:
matchLabels:
tier: database
ports:
- protocol: TCP
port: 5432
# 允许访问外部 API(特定 CIDR)
- to:
- ipBlock:
cidr: 10.0.0.0/8
except:
- 10.0.10.0/24 # 排除敏感子网
ports:
- protocol: TCP
port: 443
# 允许 DNS
- ports:
- protocol: UDP
port: 53
```
### 步骤 7:阻断云元数据端点访问
```yaml
# block-metadata.yaml - 阻断 AWS/GCP 实例元数据服务
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: block-cloud-metadata
namespace: production
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 169.254.169.254/32 # AWS/GCP 元数据
- 100.100.100.200/32 # Alibaba Cloud 元数据
```
## 监控与验证
### 测试策略
```bash
# 测试 Pod 间连通性
kubectl exec -it frontend-pod -n production -- curl http://backend-service:8080
# 验证被阻断的连接
kubectl exec -it frontend-pod -n production -- curl http://database-service:5432
# 应该超时或被拒绝
# 使用 netcat 测试端口连通性
kubectl exec -it test-pod -- nc -zv backend-service 8080
```
### 查看策略
```bash
# 列出所有命名空间的策略
kubectl get networkpolicies --all-namespaces
# 查看特定策略详情
kubectl describe networkpolicy backend-policy -n production
# 以 YAML 格式导出策略
kubectl get networkpolicy -n production -o yaml
```
## 最佳实践
- **先默认拒绝** - 从拒绝所有流量开始,然后根据需要开放
- **按命名空间隔离** - 为每个环境(生产、暂存)使用独立命名空间
- **精确使用 Label** - 为策略选择器设计一致的 Label 命名规范
- **始终允许 DNS** - 不要忘记在出站策略中开放 UDP 53 端口
- **测试再部署** - 在非生产环境中验证策略
- **版本控制策略** - 将所有 NetworkPolicy YAML 存入 Git 仓库
- **监控流量** - 使用 CNI 插件的可观测性功能检测策略违规
## 参考资料
- [Kubernetes NetworkPolicy 文档](https://kubernetes.io/docs/concepts/services-networking/network-policies/)
- [Calico 网络策略](https://docs.tigera.io/calico/latest/network-policy/)
- [Cilium 网络策略](https://docs.cilium.io/en/stable/security/policy/)
- [网络策略编辑器](https://editor.networkpolicy.io/)Related Skills
securing-kubernetes-on-cloud
本技能涵盖通过实施 Pod 安全标准(Pod Security Standards)、网络策略、工作负载身份、RBAC 权限控制、镜像准入控制和运行时安全监控,对 EKS、AKS 和 GKE 上的托管 Kubernetes 集群进行加固。涉及云平台特定安全功能,包括 EKS 的 IRSA、GKE 的工作负载身份(Workload Identity)以及 AKS 的托管身份(Managed Identity)。
scanning-network-with-nmap-advanced
使用 Nmap 的脚本引擎、时序控制、规避技术和输出解析,对授权目标网络执行高级网络侦察, 发现主机、枚举服务、检测漏洞并识别操作系统。
scanning-kubernetes-manifests-with-kubesec
使用 Kubesec 对 Kubernetes 资源清单执行安全风险分析,识别错误配置、权限提升风险以及与安全最佳实践的偏差。
performing-wireless-network-penetration-test
执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。
performing-ot-network-security-assessment
本技能涵盖对运营技术(OT)网络(包括SCADA系统、DCS架构和工业控制系统通信路径)进行全面安全评估。内容涉及Purdue参考模型各层、识别IT/OT融合风险、评估区域间防火墙规则,以及映射工业协议流量(Modbus、DNP3、OPC UA、EtherNet/IP),以检测关键基础设施中的错误配置、未授权连接和攻击面。
performing-network-traffic-analysis-with-zeek
部署 Zeek 网络安全监控器,捕获、解析和分析网络流量元数据,用于威胁检测、异常识别和取证调查。
performing-network-traffic-analysis-with-tshark
使用 tshark 和 pyshark 自动化网络流量分析,进行协议统计、可疑流量检测、DNS 异常识别以及从 PCAP 文件中提取威胁指标(IOC)
performing-network-packet-capture-analysis
使用 Wireshark、tshark 和 tcpdump 对网络数据包捕获(PCAP/PCAPNG)进行取证分析,重建网络通信、提取传输文件、识别恶意流量,并建立数据渗出或命令与控制活动的证据。
performing-network-forensics-with-wireshark
使用 Wireshark 和 tshark 捕获并分析网络流量,重建网络事件、提取制品并识别恶意通信。
performing-kubernetes-penetration-testing
Kubernetes 渗透测试(Penetration Testing)通过对 API server、kubelet、etcd、Pod、RBAC、网络策略和密钥模拟攻击者技术,系统性评估集群安全性。使用 kube-hunter、Kubescape、peirates 等工具识别可能导致集群被攻陷的错误配置。
performing-kubernetes-etcd-security-assessment
通过评估静态加密、TLS 配置、访问控制、备份加密和网络隔离,评估 Kubernetes etcd 集群的安全态势。
performing-kubernetes-cis-benchmark-with-kube-bench
使用 kube-bench 对照 CIS Benchmark 审计 Kubernetes 集群安全态势,对控制平面、工作节点和 RBAC 执行自动化检查。