跳到主要内容

安全组(防火墙)

安全组基于kubernetes的Networkpolicy开发,基本思想是将不同服务分成若干个安全组,安全组内默认放通服务相互访问,安全组外默认隔离(假设每个服务都只属于一个安全组的情况)。在此基础上增加ingress(入站)白名单和egress(出站)白名单。安全组的ingress白名单中添加的服务(或者命名空间、集群网络出口、应用负载均衡、CIDR等)都可以访问安全组内服务,支持添加IPv 6 地址和IPv 6 相关协议规则的防火墙。安全组的egress白名单添加的服务(或者命名空间、集群网络出口、应用负载均衡、CIDR等),都允许安全组内的服务访问(只是该安全组的策略允许,如果目标服务在其它安全组内,还要看目标服务所属安全组的策略是否允许)。

多安全组

一个服务属于多个安全组时,每个安全组内服务互通,组与组间是否能通取决于ingress和egress白名单规则。例如有服务A、B、C,A、B属于安全组一,B、C属于安全组二,在没有其它规则的情况下,A、B互通,B、C互通,A、C互相隔离。如果安全组一的egress白名单添加服务C,依然是A、B互通,B、C互通,A、C互相隔离。如果安全组二ingress白名单也添加了服务A,那么结果是A、B互通,B、C互通,A可以访问C,C不能访问A。如下图路线 1 所示,不同安全组内的服务相互访问时,需要经过两个安全组的白名单策略,只有两个策略都允许时,访问才能通。安全组关系示意图如下所示。

如果一个服务属于某个安全组,另一个服务不属于任一安全组,那么只需考虑一个安全组的策略就可以。

白名单含义

  • ingress规则的意思:入站白名单,即隔离对象仅能被ingress规则内的服务访问。
  • egress规则的意思:出站白名单,即隔离对象仅能访问egress规则内的服务。
  • ingress无白名单,该策略ingress隔离不生效(入站未隔离),egress 无白名单,该策略egress隔离不生效(出站未隔离)。

白名单应用

  • 同一个项目内存在2个服务A和服务B。
  • 为服务A创建安全组,并为此安全组设置egress规则放通服务B。
  • 进入服务A容器中访问服务B,访问方式是curl服务B名字。
  • 服务验证时,需要给对应容器安装curl工具