12

我试图限制我的 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 只允许我连接并阻止所有网络请求,很奇怪,有没有办法调试而不是随机改变东西?

4

3 回答 3

15

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

kubectl get pods --namespace=kube-system

要验证网络策略,您可以查看以下命令。

kubectl get networkpolicy
kubectl describe networkpolicy <networkpolicy-name>
于 2019-07-27T04:17:30.990 回答
8

运行时,您可以检查用于 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
于 2020-06-09T14:28:00.437 回答
0

使用 netcat( nc ) 进行调试:

$ kubectl exec <openvpnpod> -- nc -zv -w 5 <domain> <port>

PS:要拒绝所有出口流量,不需要将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 默认情况下是隔离的)。...
于 2022-03-02T15:02:01.100 回答