NetworkPolicy: разрешить все порты, кроме указанного c одного - PullRequest
1 голос
/ 14 июля 2020

Вот пример NetworkPolicy, который позволяет подключаться к модулям с меткой hello и разрешает подключение к портам на 53 TCP и UDP и блокирует все порты.

Как я могу сделать это, чтобы разрешить все порты и блок 53 TCP и UDP (исходящий).

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: foo-allow-to-hello
spec:
  policyTypes:
  - Egress
  podSelector:
    matchLabels:
      app: foo
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: hello
  - ports:
    - port: 53
      protocol: TCP
    - port: 53
      protocol: UDP

1 Ответ

1 голос
/ 14 июля 2020

К сожалению, встроенные в 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, которые разрешают определенные модули / пространства имен.

...