kubernetes拦截应用上所有的流量

  • kubernetes拦截应用上所有的流量已关闭评论
  • 155 views
  • A+
所属分类:Kubernetes

这一策略使用 Pod 选择器来进行 Pod 选择,会拦截所有的目标为某应用的 Pod 的流量。

用例

  • 非常普遍:如果以白名单的方式来使用网络策略,首先要使用这一策略来进行拦截。
  • 想要运行一个不被任何其他 Pod 访问的 Pod。
  • 需要暂时性的进行来自其他 Pod 的流量的隔离。

kubernetes拦截应用上所有的流量

示例

使用app=web标签运行一个 Nginx Pod,并暴露其 80 端口:

kubectl run web --image=nginx --labels app=web --expose --port 80

创建一个临时 Pod,在这一 Pod 中访问web服务:

$ kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh
/ # wget -qO- http://web
<!DOCTYPE html>
<html>
<head>
...

运行成功之后,我们把下面的内容保存为web-deny-all.yaml,并将其应用到集群上。

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: web-deny-all
spec:
  podSelector:
    matchLabels:
      app: web
  ingress: []
$ kubectl apply -f web-deny-all.yaml
networkpolicy "access-nginx" created

测试

再次运行一个测试容器,在这一容器中访问上面建立的服务:

$ kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh
/ # wget -qO- --timeout=2 http://web
wget: download timed out

可以看到,这次就无法完成了。


讲解

在上面的 YAML 中,我们使用app=web这样的标签来确定应用网络策略的 Pod 范围。其中的spec.ingres字段为空,这样所有到目标 Pod 的流量都会被阻止

如果创建另一个网络策略来让某些 Pod 可以访问我们的目标 Pod,这一策略就会失效。

如果网络策略中包含任意一条规则允许这一流量,就意味着这种流量是有效的,从而忽略掉拦截规则。

清理

kubectl delete deploy web
kubectl delete service web
kubectl delete networkpolicy web-deny-all
  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar