如何检查网络策略是否已应用到Pod?

问题描述 投票:0回答:4

我试图限制我的 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,很奇怪,有没有办法调试而不是随机改变东西?

kubernetes google-kubernetes-engine kubernetes-networkpolicy gke-networking
4个回答
20
投票

GKE 使用 calico 来实施网络策略。在应用网络策略之前,您需要为主节点和节点启用网络网络策略。您可以通过在 kube-system 命名空间中查找 calico pod 来验证 calico 是否启用。

kubectl get pods --namespace=kube-system

为了验证网络策略,您可以看到以下命令。

kubectl get networkpolicy
kubectl describe networkpolicy <networkpolicy-name>

10
投票

运行时,您可以检查用于 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

2
投票

使用 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)。 ...

0
投票

如何通过测试来检查策略是否确实应用到 Pod 上。有一些事情可能会出错,即网络策略是命名空间的并且实际上是在标签上的,而且它们需要通过安装正确的插件来设置。另一方面,标签是 pod 属性(在观察到的情况下),因此,人们经常忘记检查标签,瞧,pod 不受限制。 如何检查策略是否适用是通过测试,在附加到可能或可能不访问该特定 Pod 的 Pod 时使用 CURL 进行尝试。 以下也可能有帮助,但是我还没有机会测试它

https://orca.tufin.io/netpol/

© www.soinside.com 2019 - 2024. All rights reserved.