首页 > 解决方案 > Kubernetes NetworkPolicy 限制服务的出口流量

问题描述

是否可以只允许特定服务的出口流量?这是我天真的尝试这样做:

kind: NetworkPolicy
metadata:
  name: default-deny-all-egress
  namespace: default
spec:
  podSelector: {}
  egress:
  - ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53
    to:
      - podSelector:
          matchLabels:
            k8s-app: kube-dns
    
  policyTypes:
    - Egress

标签: kubernetesproject-calicokubernetes-networkpolicy

解决方案


不,据我所知,您只能使用podSelector. 但是,如果您可以访问集群,我认为您仍然可以为所需的 pod 手动添加额外的标签并使用podSelector

创建出口策略NetworkPolicy为您提供了良好的结构模板。以下策略允许 pod 出站流量到同一命名空间中与 pod 选择器匹配的其他 pod。

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-egress-same-namespace
  namespace: default
spec:
  podSelector:
    matchLabels:
      color: blue
  egress:
  - to:
    - podSelector:
        matchLabels:
          color: red
    ports:
    - port: 80

我知道您可以使用namespaceSelector进行入口,如下所示。不确定您是否可以将其与出口一起使用-尚未尝试过。但是要从其他命名空间访问 pod,您应该以某种方式将其指向配置中

  namespaceSelector:
    matchLabels:
      shape: square

推荐阅读