kubernetes networkpolicy仅允许外部流量进入internet

cig3rfwq  于 2023-03-01  发布在  Kubernetes
关注(0)|答案(4)|浏览(141)

我试图在我的kubernetes集群中实现网络策略,以隔离命名空间中的Pod,但仍然允许它们访问互联网,因为我使用Azure MFA进行身份验证。
这就是我尝试过的,但似乎不能让它工作。入口正如预期的那样工作,但这些策略阻止了所有出口。

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的?

wnavrhmk

wnavrhmk1#

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

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

这将阻止除Internet出站外的所有流量。在allow-internet-only策略中,所有专用IP * 都有一个例外,这将阻止Pod到Pod的通信。*
如果您需要DNS查找,您还必须允许从kube-system到核心DNS的出口,因为default-deny-all策略将阻止DNS查询。

qgelzfjb

qgelzfjb2#

Kubernetes将允许所有流量,除非存在网络策略。如果设置了网络策略,它将只允许网络策略设置的流量,并拒绝其他所有流量。
默认情况下,pod是非隔离的;它们接受来自任何源的业务。
Pod通过具有选择它们的NetworkPolicy而被隔离。一旦命名空间中存在选择特定Pod的任何NetworkPolicy,该Pod将拒绝任何NetworkPolicy不允许的任何连接。(命名空间中未被任何NetworkPolicy选择的其他Pod将继续接受所有流量。)
https://kubernetes.io/docs/concepts/services-networking/network-policies/#isolated-and-non-isolated-pods
因此,您还需要指定出口规则,以便它按照您希望的方式工作:)

q43xntqr

q43xntqr3#

类似于@user100..应该做的事情,但你也需要允许DNS查找的顶部,如下图所示。

egress:

  # Allow communication to Kubernetes DNS service
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: kube-system
    - podSelector:
        matchLabels:
          k8s-app: kube-dns
    ports:
    - protocol: UDP
      port: 53

  # Allow internet access
  - to:
    - ipBlock: 
        cidr: 0.0.0.0/0

        # Exclude traffic to Kubernetes service IPs and pods
        except:
          - 10.0.0.0/8
          - 172.16.0.0/12
          - 192.168.0.0/16
xtupzzrd

xtupzzrd4#

你能这样试试吗?

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,它应该被同一网络策略的缺少入口规则阻止。

相关问题