implementing-network-policies-for-kubernetes

通过配置 Kubernetes NetworkPolicy 资源实施 Pod 级别的网络分段,强制执行最小权限通信并限制集群内的横向移动(Lateral Movement)。

9 stars

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

$curl -o ~/.claude/skills/implementing-network-policies-for-kubernetes/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/implementing-network-policies-for-kubernetes/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/implementing-network-policies-for-kubernetes/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How implementing-network-policies-for-kubernetes Compares

Feature / Agentimplementing-network-policies-for-kubernetesStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/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

9
from killvxk/cybersecurity-skills-zh

本技能涵盖通过实施 Pod 安全标准(Pod Security Standards)、网络策略、工作负载身份、RBAC 权限控制、镜像准入控制和运行时安全监控,对 EKS、AKS 和 GKE 上的托管 Kubernetes 集群进行加固。涉及云平台特定安全功能,包括 EKS 的 IRSA、GKE 的工作负载身份(Workload Identity)以及 AKS 的托管身份(Managed Identity)。

scanning-network-with-nmap-advanced

9
from killvxk/cybersecurity-skills-zh

使用 Nmap 的脚本引擎、时序控制、规避技术和输出解析,对授权目标网络执行高级网络侦察, 发现主机、枚举服务、检测漏洞并识别操作系统。

scanning-kubernetes-manifests-with-kubesec

9
from killvxk/cybersecurity-skills-zh

使用 Kubesec 对 Kubernetes 资源清单执行安全风险分析,识别错误配置、权限提升风险以及与安全最佳实践的偏差。

performing-wireless-network-penetration-test

9
from killvxk/cybersecurity-skills-zh

执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。

performing-ot-network-security-assessment

9
from killvxk/cybersecurity-skills-zh

本技能涵盖对运营技术(OT)网络(包括SCADA系统、DCS架构和工业控制系统通信路径)进行全面安全评估。内容涉及Purdue参考模型各层、识别IT/OT融合风险、评估区域间防火墙规则,以及映射工业协议流量(Modbus、DNP3、OPC UA、EtherNet/IP),以检测关键基础设施中的错误配置、未授权连接和攻击面。

performing-network-traffic-analysis-with-zeek

9
from killvxk/cybersecurity-skills-zh

部署 Zeek 网络安全监控器,捕获、解析和分析网络流量元数据,用于威胁检测、异常识别和取证调查。

performing-network-traffic-analysis-with-tshark

9
from killvxk/cybersecurity-skills-zh

使用 tshark 和 pyshark 自动化网络流量分析,进行协议统计、可疑流量检测、DNS 异常识别以及从 PCAP 文件中提取威胁指标(IOC)

performing-network-packet-capture-analysis

9
from killvxk/cybersecurity-skills-zh

使用 Wireshark、tshark 和 tcpdump 对网络数据包捕获(PCAP/PCAPNG)进行取证分析,重建网络通信、提取传输文件、识别恶意流量,并建立数据渗出或命令与控制活动的证据。

performing-network-forensics-with-wireshark

9
from killvxk/cybersecurity-skills-zh

使用 Wireshark 和 tshark 捕获并分析网络流量,重建网络事件、提取制品并识别恶意通信。

performing-kubernetes-penetration-testing

9
from killvxk/cybersecurity-skills-zh

Kubernetes 渗透测试(Penetration Testing)通过对 API server、kubelet、etcd、Pod、RBAC、网络策略和密钥模拟攻击者技术,系统性评估集群安全性。使用 kube-hunter、Kubescape、peirates 等工具识别可能导致集群被攻陷的错误配置。

performing-kubernetes-etcd-security-assessment

9
from killvxk/cybersecurity-skills-zh

通过评估静态加密、TLS 配置、访问控制、备份加密和网络隔离,评估 Kubernetes etcd 集群的安全态势。

performing-kubernetes-cis-benchmark-with-kube-bench

9
from killvxk/cybersecurity-skills-zh

使用 kube-bench 对照 CIS Benchmark 审计 Kubernetes 集群安全态势,对控制平面、工作节点和 RBAC 执行自动化检查。