#nginx #kubernetes #calico
#nginx #kubernetes #calico
Вопрос:
Я озадачен таким поведением глобальных сетевых политик. Возьмите следующее.
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: allow-dns-for-all-policy
spec:
namespaceSelector: has(projectcalico.org/name) amp;amp; projectcalico.org/name not in {"kube-system", "calico-system"}
order: 0
egress:
# allow all namespaces to communicate to DNS pods
- action: Allow
protocol: UDP
destination:
ports:
- 53
ingress:
- action: Allow
Когда я выполняю wget из одного модуля в другой в «тестовом» пространстве имен, он, по-видимому, может разрешить dns, но не возвращает пакет:
Resolving nginx-test (nginx-test)... 10.233.8.253
Connecting to nginx-test (nginx-test)|10.233.8.253|:80... failed: Connection timed out.
В кластере нет другой политики, особенно политики запрета по умолчанию. Я также тестировал без namespaceSelector. Только когда я добавляю второе Allow
правило, соответствующее *, или когда я удаляю всю политику, я получаю успешный возврат.
Почему это так? Я бы ожидал, что эта политика не влияет на связь, поскольку нет правила запрета.
Ответ №1:
Хорошо получается, если есть хотя бы одно правило входа / выхода, совпадающее с ресурсом, calico автоматически добавляет правило запрета по умолчанию для входа / выхода.
Если к модулю не применяются сетевые политики, то весь трафик в / из этого модуля разрешен. Если одна или несколько сетевых политик применяются к pod, содержащему правила входа, то разрешается только входной трафик, специально разрешенный этими политиками. Если одна или несколько сетевых политик применяются к pod, содержащему правила выхода, то разрешается только выходной трафик, специально разрешенный этими политиками.
https://docs.projectcalico.org/security/calico-network-policy