我试图限制我的 openvpn 以允许访问内部基础设施,并仅通过“开发”命名空间来限制它,因此我从拒绝所有出口流量的简单策略开始,并且看不到任何效果或来自应用它的集群的任何反馈,我已阅读所有官方文档和非官方文档,但没有找到解决方案,这是我的政策:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: policy-openvpn
namespace: default
spec:
podSelector:
matchLabels:
app: openvpn
policyTypes:
- Egress
egress: []
我已经使用
kubectl apply -f policy.yaml
命令应用了上面的网络策略,但我没有看到此策略的任何效果,我仍然能够从我的 openvpn pod 连接到任何内容,如何调试它并查看我的有什么问题政策?
对我来说这似乎是一个黑匣子,只能做尝试错误方法,这似乎不是它应该如何工作。
如何验证它是否找到 Pod 并将策略应用于它们?
我正在使用 GKE 提供的最新 kubernetes 集群
我注意到我没有在谷歌云设置中检查“使用网络策略”,并且在检查我的VPN后停止工作,但我不知道如何检查它,或者为什么VPN只允许我连接并阻止所有网络requests,很奇怪,有没有办法调试而不是随机改变东西?
GKE 使用 calico 来实施网络策略。在应用网络策略之前,您需要为主节点和节点启用网络网络策略。您可以通过在 kube-system 命名空间中查找 calico pod 来验证 calico 是否启用。
kubectl get pods --namespace=kube-system
为了验证网络策略,您可以看到以下命令。
kubectl get networkpolicy
kubectl describe networkpolicy <networkpolicy-name>
运行时,您可以检查用于 POD 选择器的标签:
k describe netpol <networkpolicy-name>
Name: <networkpolicy-name>
Namespace: default
Created on: 2020-06-08 15:19:12 -0500 CDT
Labels: <none>
Annotations: Spec:
PodSelector: app=nginx
Pod 选择器将向您显示该 netpol 也应用了哪些标签。 然后您可以通过以下方式呈现带有此标签的所有 pod:
k get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-deployment-f7b9c7bb-5lt8j 1/1 Running 0 19h
nginx-deployment-f7b9c7bb-cf69l 1/1 Running 0 19h
nginx-deployment-f7b9c7bb-cxghn 1/1 Running 0 19h
nginx-deployment-f7b9c7bb-ppw4t 1/1 Running 0 19h
nginx-deployment-f7b9c7bb-v76vr 1/1 Running 0 19h
使用 netcat 进行调试(nc):
$ kubectl exec <openvpnpod> -- nc -zv -w 5 <domain> <port>
P.S:要拒绝所有出口流量,不需要将
spec.egress
键声明为空数组,但它的影响相同:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: policy-openvpn
namespace: default
spec:
podSelector:
matchLabels:
app: openvpn
policyTypes:
- Egress
参考:https://kubernetes.io/docs/reference/kubernetes-api/policy-resources/network-policy-v1/
- 出口([]NetworkPolicyEgressRule) ...如果此字段为空,则此 NetworkPolicy 会限制所有传出流量(并且仅用于确保默认情况下隔离它选择的 Pod)。 ...
如何通过测试来检查策略是否确实应用到 Pod 上。有一些事情可能会出错,即网络策略是命名空间的并且实际上是在标签上的,而且它们需要通过安装正确的插件来设置。另一方面,标签是 pod 属性(在观察到的情况下),因此,人们经常忘记检查标签,瞧,pod 不受限制。 如何检查策略是否适用是通过测试,在附加到可能或可能不访问该特定 Pod 的 Pod 时使用 CURL 进行尝试。 以下也可能有帮助,但是我还没有机会测试它