4

我试图在我的 kubernetes 集群中实施网络策略以将我的 pod 隔离在一个命名空间中,但仍然允许它们访问 Internet,因为我使用 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 的流量?

4

3 回答 3

5

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

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 的通信。

kube-system如果您需要 DNS 查找,您还必须允许 Egress to Core DNS from ,因为该default-deny-all策略将阻止 DNS 查询。

于 2019-09-08T20:51:19.813 回答
0

你可以这样试试吗?

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 缺少的入口规则阻止。

于 2019-09-04T14:51:39.363 回答
0

除非有网络策略,否则 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 规则,以便它以您想要的方式工作:)

于 2019-09-04T14:55:51.090 回答