【问题标题】:NetworkPolicy: Allow all ports except specific oneNetworkPolicy:允许除特定端口之外的所有端口
【发布时间】:2020-11-04 01:23:00
【问题描述】:

这里是示例 NetworkPolicy,它允许连接到标签为 hello 的 pod,并允许在 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

【问题讨论】:

    标签: kubernetes project-calico kubernetes-networkpolicy


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-03-18
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 2017-02-10
      • 2023-03-09
      • 2015-12-06
      相关资源
      最近更新 更多