【问题标题】:kubernetes networkpolicy allow external traffic to internet onlykubernetes networkpolicy 只允许外部流量到互联网
【发布时间】:2019-09-04 13:53:33
【问题描述】:

我正在尝试在我的 kubernetes 集群中实施网络策略以将我的 pod 隔离在命名空间中,但由于我使用 Azure MFA 进行身份验证,因此仍然允许它们访问 Internet。

这是我尝试过的,但似乎无法正常工作。入口按预期工作,但这些策略会阻止所有出口。


apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress 
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: grafana-policy
  namespace: default
spec:
  podSelector:
    matchLabels: 
      app: grafana
  ingress:
  - from:
    - podSelector:
       matchLabels: 
        app: nginx-ingress

谁能告诉我我是如何进行上述配置的,这样我也将允许互联网流量但阻止到其他 POD 的流量?

【问题讨论】:

    标签: kubernetes azure-aks


    【解决方案1】:

    尝试在命名空间上添加默认拒绝所有网络策略:

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: default-deny-all
    spec:
      podSelector: {}
      policyTypes:
        - Ingress
        - Egress
    

    然后在之后添加允许 Internet 策略:

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: allow-internet-only
    spec:
      podSelector: {}
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: 0.0.0.0/0
            except:
            - 10.0.0.0/8
            - 192.168.0.0/16
            - 172.16.0.0/20
    

    这将阻止除互联网出站以外的所有流量。 在allow-internet-only 策略中,所有私有 IP 都有一个例外这将阻止 pod 到 pod 通信。

    如果您需要 DNS 查找,您还必须允许从 kube-system 到核心 DNS 的出口,因为 default-deny-all 策略将阻止 DNS 查询。

    【讨论】:

    【解决方案2】:

    你可以这样试试吗?

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: default-deny-all
    spec:
      podSelector: {}
      policyTypes:
      - Ingress,Egress
      egress:
      - to:
        - ipBlock:
            cidr: 0.0.0.0/0
    

    它应该允许出口到所有目的地。但是如果目的地是一个 pod,它应该被同一个 NetworkPolicy 缺少的入口规则阻止。

    【讨论】:

    • 我已经尝试过这样的事情,无论如何我刚刚添加了您的 NetworkPolicy,并且我的 pod 能够与 Azure 通信,但仍然允许 pod 到 pod 的流量。我正在通过将控制台带到 pod 并对同一命名空间中的另一个 pod 进行 curl 进行测试。
    【解决方案3】:

    Kubernetes 将允许所有流量,除非有网络策略。 如果设置了网络策略,它将只允许网络策略设置的流量并拒绝其他所有流量。

    默认情况下,Pod 是非隔离的;他们接受来自任何来源的流量。

    Pod 通过选择它们的 NetworkPolicy 被隔离。一旦命名空间中有任何 NetworkPolicy 选择特定 pod,该 pod 将拒绝任何 NetworkPolicy 不允许的任何连接。 (命名空间中未被任何 NetworkPolicy 选择的其他 pod 将继续接受所有流量。)

    https://kubernetes.io/docs/concepts/services-networking/network-policies/#isolated-and-non-isolated-pods

    因此,您还需要指定 Egress 规则以使其按您希望的方式工作:)

    【讨论】:

      猜你喜欢
      • 2022-06-28
      • 2020-09-26
      • 2020-04-17
      • 1970-01-01
      • 2021-01-17
      • 2021-08-04
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多