К сожалению, встроенные в Kubernetes NetworkPolicies не имеют функции запрета, поэтому это будет очень болезненно, если вы укажете все порты, которые вы хотите разрешить, кроме порта 53
. В настоящее время существует запрос открытой функции , чтобы разрешить диапазоны портов в сетевых политиках K8s, что позволит значительно упростить его.
С учетом сказанного, есть и другие альтернативы. Если вы используете оверлей, например Calico , у вас есть доступ к более богатому NetworkPolicy
с действиями. Например:
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: deny-dns
namespace: mynamespace
spec:
selector: app == 'hello'
types:
- Ingress
- Egress
egress:
- action: Deny
metadata:
annotations:
from: helloworld
to: dns
protocol: TCP
source:
selector: app == 'hello'
destination:
ports:
- 53
- action: Deny
metadata:
annotations:
from: helloworld
to: dns
protocol: UDP
source:
selector: app == 'hello'
destination:
ports:
- 53
ingress:
- action: Allow
Вы также можете найти некоторые другие обходные пути, такие как применение политики входящего трафика к вашим модулям coredns, которые разрешают определенные модули / пространства имен.