Kubernetes – 网络策略(Network Policy)

网络策略是关于pod之间,pod与其他网络端点之间相互通信的规范。

NetworkPolicy资源使用标签来选择pod,并定义pod之间的通信规则,这些规则规定了哪些流量是允许的。

网络策略是由网络插件实现的,所以必须使用支持NetworkPolicy的网络解决方案。

隔离的pod

默认情况下,pod不是隔离的; 它们接受任何来源的流量。

网络策略可以选择一组pod,形成隔离的pod组,该组pod将遵守网络策略中定义的规范,拒绝任何规范不允许的通信。

没有被网络策略选择的pod不受影响,将继续接受所有流量。

示例:限制对nginx服务的访问

假设你希望限制对nginx服务的访问,只有具有access:true标签的pod才能访问。

可以创建一个网络政策:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: access-nginx
spec:
  podSelector:
    matchLabels:
      app: nginx
  ingress:
  - from:
    - podSelector:
        matchLabels:
          access: "true"

将策略分配给服务

使用kubectl从上面的nginx-policy.yaml文件创建一个网络策略:

kubectl apply -f nginx-policy.yaml
networkpolicy.networking.k8s.io/access-nginx created

测试网络策略

如果我们试图从一个没有标签(access:true)的pod访问nginx服务,请求将超时:

kubectl run --generator=run-pod/v1 busybox --rm -ti --image=busybox -- /bin/sh
Waiting for pod default/busybox-472357175-y0m47 to be running, status is Pending, pod ready: false

Hit enter for command prompt

/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.100.0.16:80)
wget: download timed out
/ #

定义标签并再次测试

用正确的标签(access:true)创建一个pod,可以正常访问nginx服务:

kubectl run --generator=run-pod/v1 busybox --rm -ti --labels="access=true" --image=busybox -- /bin/sh
Waiting for pod default/busybox-472357175-y0m47 to be running, status is Pending, pod ready: false

Hit enter for command prompt

/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.100.0.16:80)
/ #


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载