Работа с трафиком east-west и north-south
Stateful Firewall
В вычислительной технике Stateful Firewall — это межсетевой экран, который отслеживает отдельные сеансы сетевых соединений, проходящих через него. Проверка пакетов с отслеживанием состояния, также называемая динамической фильтрацией пакетов, это функция безопасности, часто используемая в некоммерческих и корпоративных сетях.
В Платформу Боцман встроен сетевой плагин Cilium, который является stateful firewall, работая на основе eBPF. Это дает возможность настраивать east-west и north-south трафик с контролем состяния на основе сетевых политик Cilium, при этом политики могут поддерживать уровни L3,L4 и L7 и работать с HTTP(S), DNS, gRPC.
Пример политики L3-L4:
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: database-policy
namespace: default
spec:
endpointSelector:
matchLabels:
tier: database
ingress:
- fromEndpoints:
- matchLabels:
tier: backend
toPorts:
- ports:
- port: "7379"
- fromCIDRSet:
- cidr: 102.213.50.174/32
toPorts:
- ports:
- port: "443"
egress:
- toFQDNs:
- matchPattern: "*.google.com"
toPorts:
- ports:
- port: "443"
- ports:
- port: "80"
Данная политика разрешает входящий трафик от подов backend до подов database по порту 7379 внутри кластера (east-west траффик), а так же из внешней подсети 102.213.50.174/32 на порт 443 (north-south трафик). Также данная политика разрешает исходящий трафик на DNS-паттерн "*.google.com".
Пример политики L7:
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "secure-grpc-access"
spec:
endpointSelector:
matchLabels:
app: backend-service
ingress:
- fromEndpoints:
- matchLabels:
app: frontend-client
toPorts:
- ports:
- port: "50051"
protocol: TCP
rules:
grpc:
- service: "backend"
method: "GetStatus"
Настройки Nginx Ingress для фильтрации north-south траффика:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: restricted-ingress
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: "102.213.50.174/32"
spec:
rules:
...
ingress позволяет определить диапазон разрешенных сетей.
Активация принудительного использования mTLS:
Внимание!
Необходимо установленное приложение Istio
helm install istio-base istio/base -n istio-system --set defaultRevision=default --create-namespace
helm install istiod istio/istiod -n istio-system --wait
После этого можно создать политику, явно указывающую на взаимодействие через mTLS:
В случае применения такой политики любое взаимодествие без использования mTLS будет заблокировано.