如何检查网络策略是否已应用于 pod?
How to check if network policy have been applied to pod?
我试图限制我的 openvpn 以允许访问内部基础设施并仅通过 'develop' 命名空间来限制它,所以我从拒绝所有出口流量的简单策略开始,看不到任何效果或来自它被应用的集群,我已经阅读了所有官方文档和非官方文档,但没有找到解决方案,这是我的政策:
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 连接到任何东西,如何调试它看看我的保单有什么问题?
对我来说这似乎是一个黑盒子,只能做尝试错误的方法,这似乎不是它应该如何工作的。
我如何验证它找到 pods 并将策略应用于它们?
我正在使用 GKE 提供的最新 kubernetes 集群
我注意到我没有在 google 云设置中检查 'use networkpolicy',检查后我的 vpn 就停止工作了,但我不知道如何检查,也不知道为什么 vpn只允许我连接并阻止所有网络请求,很奇怪,有没有办法调试而不是随机更改东西?
GKE 使用 calico 来实施网络策略。在应用网络策略之前,您需要为主节点和节点启用网络网络策略。您可以通过在 kube-system 命名空间中查找 calico pods 来验证是否启用了 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 也应用了哪些标签。
然后你可以通过以下方式显示所有带有此标签的 pods:
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/
- egress ([]NetworkPolicyEgressRule)
... If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). ...
我试图限制我的 openvpn 以允许访问内部基础设施并仅通过 'develop' 命名空间来限制它,所以我从拒绝所有出口流量的简单策略开始,看不到任何效果或来自它被应用的集群,我已经阅读了所有官方文档和非官方文档,但没有找到解决方案,这是我的政策:
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 连接到任何东西,如何调试它看看我的保单有什么问题?
对我来说这似乎是一个黑盒子,只能做尝试错误的方法,这似乎不是它应该如何工作的。
我如何验证它找到 pods 并将策略应用于它们?
我正在使用 GKE 提供的最新 kubernetes 集群
我注意到我没有在 google 云设置中检查 'use networkpolicy',检查后我的 vpn 就停止工作了,但我不知道如何检查,也不知道为什么 vpn只允许我连接并阻止所有网络请求,很奇怪,有没有办法调试而不是随机更改东西?
GKE 使用 calico 来实施网络策略。在应用网络策略之前,您需要为主节点和节点启用网络网络策略。您可以通过在 kube-system 命名空间中查找 calico pods 来验证是否启用了 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 也应用了哪些标签。 然后你可以通过以下方式显示所有带有此标签的 pods:
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/
- egress ([]NetworkPolicyEgressRule) ... If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). ...