0

这是示例 NetworkPolicy,它允许连接到具有标签的 pod,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
4

1 回答 1

1

不幸的是,Kubernetes 原生 NetworkPolicies 没有“拒绝”功能,因此如果您要列出除 port 之外的所有要允许的端口,这将非常痛苦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

您还可以找到一些其他解决方法,例如将入口策略应用于允许某些 pod/命名空间的 coredns pod。

于 2020-07-14T20:00:12.120 回答