پالیسیهای شبکه Kubernetes: میکرو-تقسیمبندی در سطح Pod
بهطور پیشفرض، تمام Podها میتوانند به Podهای دیگر در Kubernetes دسترسی داشته باشند. منابع NetworkPolicy این را به اجازه صریح تغییر میدهد.
رد پیشفرض همه
YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
- Egressاجازه Frontend به Backend
YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
namespace: production
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080اجازه DNS (حیاتی!)
YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns
namespace: production
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCPآزمایش Network Policyها
BASH
kubectl run test --image=busybox -it --rm -- /bin/sh
# داخل pod آزمایشی
wget -qO- http://backend:8080/health # باید کار کند
wget -qO- http://database:5432 # باید شکست بخوردهمیشه از یک پلاگین CNI که NetworkPolicy را اجرا میکند استفاده کنید: Calico، Cilium یا Antrea.
