k8s-使用-NetworkPolicy-屏蔽恶意-IP-访问

当我们在 Kubernetes 集群中部署了一些服务并对外暴露时,可能会遇到一些恶意访问的情况,比如暴力破解、恶意扫描等。虽然大多数情况下都不会造成安全问题,但是也会对服务造成一定的影响,比如日志被刷爆、服务被拖慢等。公有云厂商一般会提供一些安全组、网络 ACL 等功能来限制某些 IP 地址访问,只不过每次都需要登录到云平台进行操作比较繁琐,而且不同云厂商的操作方式也不一样,日后要进行迁移就会比较麻烦。既然是解决 Kubernetes 集群的问题用 Kubernetes 提供的 NetworkPolicy 再合适不过了。

默认情况下 Pod 的出入站流量都是开放的,即任何 Pod 都可以被集群内的其它 Pod 或通过 Service 被集群外的目标访问,Pod 也能访问集群内外的任何目标,NetworkPolicy 可以用来限制 Pod 的出入站流量,一般用于在多租户集群中隔离不同租户的网络流量,也可以用来限制外部目标访问 Pod 的流量。下面来看一个简单的 NetworkPolicy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: wordpress-mysql
  namespace: default # <-- 应用 NetworkPolicy 的 Namespace
spec:
  podSelector: # <-- 选择要应用 NetworkPolicy 的 Pod
    matchLabels:
      app: wordpress-mysql
  policyTypes: # <-- 指定 NetworkPolicy 的类型
    - Ingress # <-- 应用于入站流量
  ingress: # <-- 入站规则
    - from: # <-- 允许访问的来源
        - podSelector: # <-- 选择来源 Pod
            matchLabels:
              app: wordpress

policyTypes 字段可以看出这是一个入站规则,应用在 podSelector 字段所匹配的 Pods 上,如果 podSelector 字段为空表示匹配当前命名空间下的所有 Pods;ingress 字段描述了入站规则,from 字段描述了具体允许的访问来源。因此这个 NetworkPolicy 的作用是仅允许带有 app=wordpress 标签的 Pod 访问 app=wordpress-mysql 的 Pod,其它 Pod 的访问将被拒绝,由此可以看出 NetworkPolicy 是一种白名单策略。关于出站规则可以参考 官方文档 这里就不展开。

了解 NetworkPolicy 的基本概念后稍作修改即可实现屏蔽恶意 IP 访问的功能:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: wordpress-mysql
  namespace: default
spec:
  ...
  ingress: # <-- 入站规则
    - from:
        - ipBlock: # <-- 允许访问的来源 IP 块
            cidr: 0.0.0.0/0 # <-- 允许所有 IP 访问 
            except: # <-- 除了以下 IP
              - 1.1.1.1/32
              - 2.2.2.2/32
              # ...

除了使用 podSelector 选择允许访问的 Pod 外还可以使用 ipBlock 直接指定 IP 块,cidr 字段指定允许访问的 IP 段,except 字段指定排除的 IP 段;这两个字段配合就可以实现黑名单策略,允许除 1.1.1.1 和 2.2.2.2 外的目标访问 app=wordpress-mysql 的 Pods。如果要实现白名单策略只需要将 cidr 字段改为允许访问的 IP 地址即可。

最后需要注意的是 NetworkPolicy 需要 CNI 插件的支持 (如同 Ingress 需要 ingress-controller),如果 CNI 插件不支持 NetworkPolicy 策略将不会生效。目前大多数 CNI 插件都支持 NetworkPolicy,如 CalicoCiliumWeave Net 等;如果正在使用不支持 NetworkPolicy 的 CNI 插件 (例如 Flannel),可以考虑迁移到支持 NetworkPolicy 的 CNI 插件或者使用 kube-router 项目来实现 NetworkPolicy 的功能。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值