Я установил Calico на EKS с здесь .
У меня есть два пространства имен, foo и bar, оба помечены меткой 'target' и содержат по одному модулю приложения в каждом.
Когда я импортирую следующую входную политику только в пространство имен foo, она работает точно так же, как и ожидалось; другие тестовые модули не могут подключиться к foo-app, но bar-app может.
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: foo
namespace: foo
spec:
podSelector:
matchLabels:
app: foo-app
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
purpose: bar
- from:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
Однако, когда я импортирую политику, содержащую как входные, так и выходные правила, он полностью отключает сетевую связь с модулем. Я больше не могу даже пропинговать IP-адрес модуля foo-app из bar-app.
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: foo
namespace: foo
spec:
podSelector:
matchLabels:
app: foo-app
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
purpose: bar
- from:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
egress:
- to:
- namespaceSelector:
matchLabels:
purpose: bar
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
После удаления и систематического повторного добавления частей политики это определенно добавление записи namespaceSelector
в выход, который его нарушает.
Других сетевых политик в кластере нет.
Если нет прямой причины того, почему это происходит; кроме обхода правил netfilter на рабочих узлах: есть ли эффективный способ отладки этого?