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

vxqlmq5t  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(4)|浏览(154)

我试图限制到我的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集群
我注意到,我没有检查'使用networkpolicy'在谷歌云设置和我检查后,我的vpn刚刚停止工作,但我不知道如何检查它,或者为什么vpn只是允许我连接和阻止所有网络请求,很奇怪,有没有一种方法来调试是不是随机改变的东西?

toiithl6

toiithl61#

GKE使用calico来实现网络策略。在应用网络策略之前,需要为master和nodes启用网络网络策略。您可以通过在kube-system namespace中查找calico pod来验证是否启用了calico。

kubectl get pods --namespace=kube-system

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

kubectl get networkpolicy
kubectl describe networkpolicy <networkpolicy-name>

anhgbhbe

anhgbhbe2#

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

nnvyjq4y

nnvyjq4y3#

使用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/

  • egress([]NetworkPolicyEgressRule).如果此字段为空,则此NetworkPolicy限制所有传出流量(并且仅用于确保其选择的Pod在默认情况下是隔离的).
t5fffqht

t5fffqht4#

如何检查策略是否确实应用于pod是通过测试。有几件事可能出错,即网络策略是命名空间和真正的标签,加上他们需要通过安装适当的插件设置。另一方面,标签是pod属性(在观察到的情况下),因此,人们往往会忘记检查标签,瞧,豆荚不受限制。如何检查是否适用的政策是通过测试,当连接到可能会或可能不会访问特定pod的pod时,尝试使用CURL。以下内容可能会有所帮助,但我还没有机会测试它
https://orca.tufin.io/netpol/

相关问题