Skip to content

web-based tool designed to help Kubernetes administrators and developers visualize and analyze Network Policies within their clusters

License

Notifications You must be signed in to change notification settings

ddukbg/k8s-network-policy-visualizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

15 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Kubernetes Network Policy Visualizer ๐Ÿš€

License Python Flask Socket.IO

์‹ค์ œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ํ˜„๋Œ€์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ Pod, Deployment, NetworkPolicy๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ง‘ํ•˜์—ฌ ์ง๊ด€์ ์ธ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ๋„คํŠธ์›Œํฌ ์ •์ฑ…์˜ ์˜ํ–ฅ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐ŸŽฏ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • ์‹ค์‹œ๊ฐ„ ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๋™: kubectl์„ ํ†ตํ•œ ์‹ค์ œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
  • Pod & Deployment ์‹œ๊ฐํ™”: ๋‘ ๊ฐ€์ง€ ๋ฆฌ์†Œ์Šค ํƒ€์ž… ๊ฐ„ ์ „ํ™˜ ๊ฐ€๋Šฅ
  • ๋„คํŠธ์›Œํฌ ์ •์ฑ… ๋งคํ•‘: NetworkPolicy์™€ ๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ๊ด€๊ณ„ ์‹œ๊ฐํ™”
  • ํ†ต์‹  ์‹œ๋ฎฌ๋ ˆ์ด์…˜: ์‹ค์ œ ๋„คํŠธ์›Œํฌ ์ •์ฑ… ๊ธฐ๋ฐ˜ ํ†ต์‹  ๊ฐ€๋Šฅ์„ฑ ๊ฒ€์ฆ

๐ŸŽจ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜

  • ํ˜„๋Œ€์ ์ธ UI: Material Design ๊ธฐ๋ฐ˜์˜ ์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค
  • ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ: WebSocket์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์ƒํƒœ ๋ฐ˜์˜
  • ์ƒ์„ธ ์ •๋ณด ํŒจ๋„: ํด๋ฆญ์œผ๋กœ ๋ฆฌ์†Œ์Šค/์ •์ฑ… ์ƒ์„ธ ์ •๋ณด ํ™•์ธ
  • ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋ชจ๋“  ๋””๋ฐ”์ด์Šค์—์„œ ์™„๋ฒฝํ•œ ์‚ฌ์šฉ ๊ฒฝํ—˜

โšก ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ์Šค๋งˆํŠธ ์บ์‹ฑ: ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ์ดํ„ฐ ์บ์‹ฑ์œผ๋กœ ๋น ๋ฅธ ์‘๋‹ต (1-2์ดˆ)
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ: ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
  • ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง: Cytoscape.js ๊ธฐ๋ฐ˜ ๊ณ ์„ฑ๋Šฅ ๊ทธ๋ž˜ํ”„ ๋ Œ๋”๋ง

๐Ÿ–ผ๏ธ ์Šคํฌ๋ฆฐ์ƒท

Pod ๋ทฐ

  • ๐ŸŸข Pod ๋…ธ๋“œ (์›ํ˜•)
  • ๐Ÿ”ท NetworkPolicy ๋…ธ๋“œ (๋‹ค์ด์•„๋ชฌ๋“œ)
  • ์‹ค์‹œ๊ฐ„ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ์ดํ„ฐ (30+ Pod, 4๊ฐœ ์ •์ฑ…)

Deployment ๋ทฐ

  • ๐ŸŸฃ Deployment ๋…ธ๋“œ (์œก๊ฐํ˜•)
  • ๐Ÿ”ท NetworkPolicy ๋…ธ๋“œ (๋‹ค์ด์•„๋ชฌ๋“œ)
  • ๋…ผ๋ฆฌ์  ๊ทธ๋ฃนํ•‘์œผ๋กœ ๊ฐ„์†Œํ™”๋œ ๋ทฐ

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

์ „์ œ ์กฐ๊ฑด

  • Python 3.11+
  • kubectl ์„ค์น˜ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ •
  • ํ™œ์„ฑํ™”๋œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ (๋กœ์ปฌ ๋˜๋Š” ์›๊ฒฉ)

์„ค์น˜ ๋ฐ ์‹คํ–‰

1. ๋กœ์ปฌ ์„ค์น˜

# ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/your-username/k8s-network-policy-visualizer.git
cd k8s-network-policy-visualizer

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”
python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate  # Windows

# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

# kubectl ์—ฐ๊ฒฐ ํ™•์ธ
kubectl cluster-info

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
python app.py

2. Docker ์‹คํ–‰

# ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker build -t k8s-netpol-visualizer .

# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ (kubeconfig ๋งˆ์šดํŠธ ํ•„์š”)
docker run -d \
  --name netpol-visualizer \
  -p 5000:5000 \
  -v ~/.kube:/home/appuser/.kube:ro \
  k8s-netpol-visualizer

3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (์„ ํƒ์‚ฌํ•ญ)

# .env ํŒŒ์ผ ์ƒ์„ฑ
export SECRET_KEY="your-secret-key"
export FLASK_ENV="development"
export KUBECTL_TIMEOUT=30
export LOG_LEVEL="INFO"

๐ŸŽฏ ์‚ฌ์šฉ๋ฒ•

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

  1. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:5000 ์ ‘์†
  2. ๋ฆฌ์†Œ์Šค ํƒ€์ž… ์„ ํƒ (Pod โ†” Deployment ์ „ํ™˜)
  3. ๊ทธ๋ž˜ํ”„์—์„œ ๋…ธ๋“œ ํด๋ฆญํ•˜์—ฌ ์ƒ์„ธ ์ •๋ณด ํ™•์ธ
  4. ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ž๋™ ๋ฐ˜์˜

๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

  • ํ†ต์‹  ์‹œ๋ฎฌ๋ ˆ์ด์…˜: ์†Œ์Šค/๋Œ€์ƒ ์„ ํƒ ํ›„ ํ†ต์‹  ๊ฐ€๋Šฅ์„ฑ ๊ฒ€์ฆ
  • ์ •์ฑ… ๋ถ„์„: NetworkPolicy ํด๋ฆญ์œผ๋กœ ์ ์šฉ ๋ฒ”์œ„ ํ™•์ธ
  • ํ—ฌ์Šค ์ฒดํฌ: /api/health๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ

๐Ÿ› ๏ธ API ์—”๋“œํฌ์ธํŠธ

์—”๋“œํฌ์ธํŠธ ๋ฉ”์„œ๋“œ ์„ค๋ช… ์‘๋‹ต ์‹œ๊ฐ„
/ GET ๋ฉ”์ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค -
/api/health GET ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ ~100ms
/api/data?resource_type=pod GET Pod ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ ~1.5s
/api/data?resource_type=deployment GET Deployment ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ ~0.8s
/api/policy/<namespace>/<name> GET NetworkPolicy ์ƒ์„ธ ์ •๋ณด ~200ms
/api/resource/<type>/<namespace>/<name> GET ๋ฆฌ์†Œ์Šค ์ƒ์„ธ ์ •๋ณด ~200ms
/api/simulate POST ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ~300ms

์‹ค์ œ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ

  • ํด๋Ÿฌ์Šคํ„ฐ ๊ทœ๋ชจ: 57๊ฐœ Pod, 30๊ฐœ Deployment, 4๊ฐœ NetworkPolicy
  • ์‘๋‹ต ์‹œ๊ฐ„: Pod ๋ทฐ 1.79s, Deployment ๋ทฐ 0.76s
  • ๊ทธ๋ž˜ํ”„ ํฌ๊ธฐ: Pod ๋ทฐ 61 nodes/30 edges, Deployment ๋ทฐ 34 nodes/10 edges

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Frontend      โ”‚    โ”‚   Flask Backend  โ”‚    โ”‚   Kubernetes    โ”‚
โ”‚   (Cytoscape.js)โ”‚โ—„โ”€โ”€โ–บโ”‚   (Socket.IO)    โ”‚โ—„โ”€โ”€โ–บโ”‚   Cluster       โ”‚
โ”‚   + Material UI โ”‚    โ”‚   + ์‹ค์‹œ๊ฐ„ ์บ์‹ฑ   โ”‚    โ”‚   (kubectl)     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๊ธฐ์ˆ  ์Šคํƒ

Backend

  • Flask 3.0 + Socket.IO (์‹ค์‹œ๊ฐ„ ํ†ต์‹ )
  • Pydantic (๋ฐ์ดํ„ฐ ๊ฒ€์ฆ)
  • Structlog (๊ตฌ์กฐํ™”๋œ ๋กœ๊น…)
  • Subprocess + kubectl (ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๋™)

Frontend

  • Cytoscape.js (๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”)
  • Material Icons + Modern CSS
  • WebSocket (์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ)

Infrastructure

  • Docker ์ง€์›
  • Kubernetes ๋„ค์ดํ‹ฐ๋ธŒ

๐Ÿ”ง ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

k8s-network-policy-visualizer/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ models/           # Pydantic ๋ฐ์ดํ„ฐ ๋ชจ๋ธ
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ graph.py      # ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ
โ”‚   โ”‚   โ”œโ”€โ”€ kubernetes.py # K8s ๋ฆฌ์†Œ์Šค ๋ชจ๋ธ
โ”‚   โ”‚   โ””โ”€โ”€ network.py    # ๋„คํŠธ์›Œํฌ ์ •์ฑ… ๋ชจ๋ธ
โ”‚   โ””โ”€โ”€ services/         # ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚       โ”œโ”€โ”€ kubernetes_service.py  # ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๋™
โ”‚       โ””โ”€โ”€ graph_service.py       # ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
โ”œโ”€โ”€ templates/
โ”‚   โ””โ”€โ”€ index.html        # ๋ฉ”์ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค
โ”œโ”€โ”€ static/
โ”‚   โ”œโ”€โ”€ styles.css        # ์Šคํƒ€์ผ์‹œํŠธ
โ”‚   โ””โ”€โ”€ scripts.js        # ํ”„๋ก ํŠธ์—”๋“œ ๋กœ์ง
โ”œโ”€โ”€ tests/                # ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
โ”œโ”€โ”€ samples/              # ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ
โ”œโ”€โ”€ app.py                # ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
โ”œโ”€โ”€ config.py             # ์„ค์ • ๊ด€๋ฆฌ
โ”œโ”€โ”€ requirements.txt      # Python ์˜์กด์„ฑ
โ”œโ”€โ”€ Dockerfile           # Docker ์ด๋ฏธ์ง€
โ””โ”€โ”€ .gitignore           # Git ์ œ์™ธ ํŒŒ์ผ

๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

# ๊ฐœ๋ฐœ ๋ชจ๋“œ ์‹คํ–‰
export FLASK_ENV=development
python app.py

# ๋กœ๊ทธ ํ™•์ธ
tail -f server.log

# ํ…Œ์ŠคํŠธ ์‹คํ–‰ (๊ตฌํ˜„ ์˜ˆ์ •)
pytest tests/

๐Ÿ“Š ์„ฑ๋Šฅ ์ตœ์ ํ™”

๊ตฌํ˜„๋œ ์ตœ์ ํ™”

  • ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ: ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ์ดํ„ฐ ์บ์‹ฑ์œผ๋กœ ๋ฐ˜๋ณต ์š”์ฒญ ์ตœ์ ํ™”
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ: kubectl ๋ช…๋ น์–ด ๋น„๋™๊ธฐ ์‹คํ–‰
  • ๋ฐ์ดํ„ฐ ์••์ถ•: JSON ์‘๋‹ต ์ตœ์ ํ™”
  • ์Šค๋งˆํŠธ ๋ Œ๋”๋ง: ๋…ธ๋“œ ํƒ€์ž…๋ณ„ ์ฐจ๋ณ„ํ™”๋œ ๋ Œ๋”๋ง

์„ฑ๋Šฅ ์ง€ํ‘œ

  • ์ดˆ๊ธฐ ๋กœ๋”ฉ: 1-2์ดˆ (ํด๋Ÿฌ์Šคํ„ฐ ํฌ๊ธฐ์— ๋”ฐ๋ผ)
  • ๋ฆฌ์†Œ์Šค ํƒ€์ž… ์ „ํ™˜: 0.5-1์ดˆ
  • ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ: 200-300ms
  • ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ: WebSocket ๊ธฐ๋ฐ˜ ์ฆ‰์‹œ ๋ฐ˜์˜

๐Ÿ” ๋ฌธ์ œ ํ•ด๊ฒฐ

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ

1. kubectl ์—ฐ๊ฒฐ ์˜ค๋ฅ˜

# ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๊ฒฐ ํ™•์ธ
kubectl cluster-info
kubectl get nodes

# kubeconfig ๊ฒฝ๋กœ ํ™•์ธ
echo $KUBECONFIG

2. ํฌํŠธ ์ถฉ๋Œ (5000๋ฒˆ ํฌํŠธ)

# macOS AirPlay ์ˆ˜์‹ ๊ธฐ ๋น„ํ™œ์„ฑํ™”
# ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์„ค์ • > ์ผ๋ฐ˜ > AirDrop ๋ฐ Handoff

# ๋˜๋Š” ๋‹ค๋ฅธ ํฌํŠธ ์‚ฌ์šฉ
export PORT=8080
python app.py

3. ๊ถŒํ•œ ์˜ค๋ฅ˜

# ํด๋Ÿฌ์Šคํ„ฐ ๊ถŒํ•œ ํ™•์ธ
kubectl auth can-i get pods --all-namespaces
kubectl auth can-i get networkpolicies --all-namespaces

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. Fork ํ”„๋กœ์ ํŠธ
  2. Feature ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ: git checkout -b feature/AmazingFeature
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹: git commit -m 'Add some AmazingFeature'
  4. ๋ธŒ๋žœ์น˜์— Push: git push origin feature/AmazingFeature
  5. Pull Request ์ƒ์„ฑ

๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ๋ผ์ธ

  • ์ฝ”๋“œ ์Šคํƒ€์ผ: Black ํฌ๋งทํ„ฐ ์‚ฌ์šฉ
  • ํƒ€์ž… ํžŒํŠธ: ๋ชจ๋“  ํ•จ์ˆ˜์— ํƒ€์ž… ํžŒํŠธ ์ถ”๊ฐ€
  • ๋กœ๊น…: Structlog๋ฅผ ์‚ฌ์šฉํ•œ ๊ตฌ์กฐํ™”๋œ ๋กœ๊น…
  • ํ…Œ์ŠคํŠธ: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

๐Ÿ“ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ†˜ ์ง€์› ๋ฐ ๋ฌธ์˜

๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

  • Cytoscape.js - ๊ฐ•๋ ฅํ•œ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • Flask - ์œ ์—ฐํ•œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ
  • Kubernetes - ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ

โญ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๋ณ„ํ‘œ๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”!

About

web-based tool designed to help Kubernetes administrators and developers visualize and analyze Network Policies within their clusters

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published