Kubernetes 网络策略拒绝所有策略不会阻止基本通信

Nim*_*iat 3 kubernetes google-kubernetes-engine kubernetes-networkpolicy

我正在运行 GKE 集群版本 1.17.13-gke.1400。

我在我的集​​群中应用了以下网络策略 -

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
Run Code Online (Sandbox Code Playgroud)

这应该阻止与默认命名空间上的 Pod 之间的所有通信。然而,事实并非如此。从这个测试中可以明显看出 -

$ kubectl run p1 -it  --image google/cloud-sdk
root@p1:/# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=114 time=1.14 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=114 time=1.21 ms
^C
root@p1:/# curl www.google.com 
<!doctype html><html itemscope=" ...
Run Code Online (Sandbox Code Playgroud)

文档看来,这个应用程序应该非常简单。任何帮助理解我做错了什么,或进一步故障排除的提示,将不胜感激。

谢谢,宁录,

And*_*gle 9

为了使网络策略生效,您的集群需要运行一个网络插件来强制执行它们。Project CalicoCilium是这样做的插件。这不是创建集群时的默认设置!

因此,首先,您应该检查您的集群是否按照Google Cloud 网络策略文档中的描述进行了相应设置。这以某种方式被抽象掉在--enable-network-policy标志后面。

如果启用,您应该会在kube-system命名空间中看到一些 calico pod 。

kubectl get pods --namespace=kube-system

如果有实施网络策略的插件,您需要确保在所需的命名空间中部署了网络策略 - 并检查您的测试使用kubectl run是否也在该命名空间中执行。您可能在 kube 上下文中配置了其他一些命名空间,并且没有使用您的命令命中默认命名空间。