Сама политика выглядит так:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: shuffle
namespace: shuffle
spec:
podSelector: {} # apply to all Pod's
policyTypes:
- Ingress
- Egress
ingress:
# Allow ingress traffic in namespace
- from:
- podSelector: {}
# Allow incoming ingress-nginx namespace traffic
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: ingress-nginx
ports:
- protocol: TCP
port: 80
- protocol: TCP
port: 443
egress:
# Allow egress traffic in namespace
- to:
- podSelector: {}
# Allow DNS traffic to kube-system ns
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
# Allow nodelocaldns traffic
- to:
- ipBlock:
cidr: 169.254.25.10/32
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
# Allow traffic to port
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 9200
- protocol: TCP
port: 80
- protocol: TCP
port: 443
- protocol: TCP
port: 8200
- to:
- ipBlock:
cidr: 10.233.0.1/32
ports:
- protocol: TCP
port: 443
Она применяется ко всем подам в namespace shuffle. Правилами входящего трафика разрешаем общение между подами в рамках ns:
- from:
- podSelector: {}
А также входящий трафик от подов в ns ingress-nginx.
Исходящий трафик (egress) - также все поды в рамках ns, доступ до kube-system. Там у нас расположены поды
coreDNS и nodelocaldns. Но до nodelocaldns доступа все равно не будет, поды будут к нему ходить через IP (в моем случае 169.254.25.10), поэтому ниже указываем и его:- to:
- ipBlock:
cidr: 169.254.25.10/32
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
Разрешаем ходить в "мир" по портам 9200 (elastic), 80, 443, 8200. Последний это волт. Первые для интернета, который данному приложению нужен. Также shuffle нужен доступ к
kubernetes service, для этого секция:- to:
- ipBlock:
cidr: 10.233.0.1/32
ports:
- protocol: TCP
port: 443
#kubernetes