上一节详细分析了安全组在ACK集群通信的时候会涉及的场景,最后的结论是,配置ACK集群的安全组,只需考虑两种情况,一种是Pod之间跨节点通信,一种是集群和外网互访。
ACK集群在创建的时候,默认添加了Pod网段放行入规则,与此同时,保持出规则对所有地址全开放。这使得Pod之间互访没有问题,同时Pod或节点可以随意访问集群以外的网络。
而在默认规则的基础上对集群安全组的配置管理,其实就是在不影响集群功能的情况下,收紧Pod或节点访问外网的能力,和放松集群以外网络对集群的访问限制。
下面我们分三个常见的场景来进一步分析,怎么样在默认规则的基础上进一步管理集群的安全组规则。第一个场景是限制集群访问外网,第二个场景是IDC与集群互访,第三个场景是使用新的安全组管理部分节点。
这是非常常见的一个场景。为了在限制集群访问外网的同时不影响集群本身的功能,配置需要满足三个条件。
(1)不能限制出方向Pod网段。
(2)不能限制集群访问阿里云云服务的内网地址段100.64.0.0/10。
(3)不能限制集群访问一部分阿里云云服务的公网地址。


其中第一条显而易见,第二条是为了确保集群可以通过内网访问DNS或者OSS这类服务,第三条是因为集群在实现部分功能的时候,会通过公网地址访问云服务。
对于IDC与集群互访这种场景,假设IDC和集群VPC之间已经通过底层的网络产品打通,IDC内部机器和集群节点或者Pod之间,可以通过地址找到对方。那么在这种情况下,只需要在确保出方向规则放行IDC机器网段的情况下,对入规则配置放行IDC机器地址段即可。
某些时候,用户需要新增加一些安全组来管理集群节点。比较典型的用法包括把集群节点同时加入到多个安全组里,以及把集群节点分配给多个安全组管理。
如果把节点加入到多个安全组里,那么这些安全组会依据优先级,从高到低依次匹配规则,这会给配置管理增加复杂度。而把节点分配给多个安全组管理,则会出现脑裂(partition)问题,需要通过安全组之间授权或者增加规则的方式,确保集群节点之间互通。