阿里云ACK产品安全组配置管理

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 这篇文章会以ACK产品安全组的配置管理为核心,深入讨论安全组在集群中扮演的角色,安全组在网络链路中所处的位置,以及非法修改安全组会产生的各类问题。文章内容适用于专有集群和托管集群。

作者:声东

阿里云容器产品Kubernetes版本,即ACK,基于阿里云IaaS层云资源创建。资源包括云服务器ECS,专有网络VPC,弹性伸缩ESS等。以这些资源为基础,ACK产品实现了Kubernetes集群的节点,网络,自动伸缩等组件和功能。

一般而言,用户对ACK产品有很大的管理权限,这包括集群扩容,创建服务等。与此同时,用户可以绕过ACK产品,对集群底层云资源进行修改。如释放ECS,删除SLB。如果不能理清背后的影响,这样的修改会损坏集群功能。

这篇文章会以ACK产品安全组的配置管理为核心,深入讨论安全组在集群中扮演的角色,安全组在网络链路中所处的位置,以及非法修改安全组会产生的各类问题。文章内容适用于专有集群和托管集群。

安全组在ACK产品中扮演的角色

阿里云ACK产品有两种基本形态,专有集群和托管集群。这两种形态的最大差别,就是用户对master的管理权限。对安全组来说,两种形态的集群略有差别,这里分开讨论。
1.png

专有集群使用资源编排ROS模板搭建集群的主框架。其中专有网络是整个集群运行的局域网,云服务器构成集群的节点,安全组构成集群节点的出入防火墙。

另外,集群使用弹性伸缩实现动态扩缩容功能,NAT网关作为集群的网络出口,SLB和EIP实现集群API Server的入口。
2.png

托管集群与专有集群类似,同样使用资源编排模板搭建集群的主框架。在托管集群中,云服务器,专有网络,负载均衡SLB,EIP,安全组等扮演的角色专有集群类似。

与专有集群不同的是,托管集群的master系统组件以Pod的形式运行在管控集群里。这就是用Kubernetes管理Kubernetes的概念。

因为托管集群在用户的VPC里,而管控集群在阿里云生产账号的VPC里。所以这样的架构需要解决的一个核心问题,就是跨账号跨VPC通信问题。

为了解决这个问题,此处用到类似传送门的技术。托管集群会在集群VPC里创建两个弹性网卡,这两个弹性网卡可以像普通云服务器一样,和集群节点通信。但是这两个网卡被挂载到托管集群的API Server Pod上,这就解决了跨VPC通信问题。

安全组与ACK集群网络

上一节总结了两种形态ACK集群的组成原理,以及安全组在集群中所处的位置。简单来说,安全组就是管理网络出入流量的防火墙。

安全组规则是基于数据包的目的地址而限流的。出规则需要基于对目标地址的管控需求而定,而入规则则需要对集群内部通信对象有所理解。以下图为例,ACK集群的内部的通信对象包括集群节点,和部署在集群上的容器组Pod两种。

3.png

云服务器没有太多特殊的地方,仅仅是简单的连接在VPC局域网内的ECS。而容器组Pod是连接在,基于veth网口对、虚拟网桥、以及VPC路由表所搭建的、和VPC独立的虚拟三层网络上的。

总结一下,有两种通信实体和三种通信方式,共六种通信场景。

相同节点通信 跨节点通信 外部通信
节点 无关 无关 有关
Pod 无关 无关/有关 有关

前三种场景,以节点为通信实体。第一种场景是节点与其上Pod通信,这种场景和安全组无关;第二种场景是节点与其他节点以及Pod通信,这种场景下,因为节点在相同VPC下,且Pod访问Pod网段以外的地址都会经过SNAT,所以和安全组无关;第三种场景是节点与VPC之外实体通信,这种情况不管出入都与安全组有关。
4.png

后三种场景,以容器组Pod为主要通信实体。第四种场景是Pod在节点内部与Pod和ECS通信,这种场景和安全组无关;第五种场景是Pod跨节点与其他节点以及Pod通信,这种场景下,如果源地址和目的地址都是Pod,则需要安全组入规则放行,其他情况与场景二类似;第六种场景是Pod与VPC之外实体通信,这与场景三类似。
5.png

虽然以上场景有些复杂,但是经过总结会发现,与安全组有关的通信,从根本上说就两种情况。一种是Pod之间跨节点通信,另一种是节点或Pod与外网互访。这里的外网可以是公网,也可以是与集群互联互通的IDC或者其他VPC。

怎么样管理ACK集群的安全组规则

上一节详细分析了安全组在ACK集群通信的时候,会影响到的场景。最后的结论是,配置ACK集群的安全组,只须考虑两种情况,一个是Pod跨节点互访,一个是集群和外网互访。

ACK集群在创建的时候,默认添加了Pod网段放行入规则,与此同时保持出规则对所有地址全开。这使得Pod之间互访没有问题,同时Pod或节点可以随意访问集群以外的网络。

而在默认规则的基础上对集群安全组的配置管理,其实就是在不影响集群功能的情况下,收紧Pod或节点访问外网的能力,和放松集群以外网络对集群的访问。

下边我们分三个常见的场景,来进一步分析,怎么样在默认规则的基础上,进一步管理集群的安全组规则。第一个场景是限制集群访问外网,第二个场景是IDC与集群互访,第三个场景是使用新的安全组管理部分节点。

限制集群访问外网

这是非常常见的一个场景。为了在限制集群访问外网的同时,不影响集群本身的功能,配置需要满足三个条件。

  1. 不能限制出方向Pod网段
  2. 不能限制集群访问阿里云云服务的内网地址段100.64.0.0/10
  3. 不能限制集群访问一部分阿里云云服务的公网地址

ecs.cn-hangzhou.aliyuncs.com
ecs-cn-hangzhou.aliyuncs.com
vpc.cn-hangzhou.aliyuncs.com
slb.cn-hangzhou.aliyuncs.com
location-readonly.aliyuncs.com
location.aliyuncs.com
pvtz.cn-hangzhou.aliyuncs.com
cs.cn-hangzhou.aliyuncs.com
nas.cn-hangzhou.aliyuncs.com
oss-cn-hangzhou.aliyuncs.com
cr.cn-hangzhou.aliyuncs.com
metrics.cn-hangzhou.aliyuncs.com
ess.cn-hangzhou.aliyuncs.com
eci.cn-hangzhou.aliyuncs.com
alidns.cn-hangzhou.aliyuncs.com
sls.cn-hangzhou.aliyuncs.com
arms.cn-hangzhou.aliyuncs.com

其中第一条显而易见,第二条为了确保集群可以通过内网访问DNS或者OSS这类服务,第三条是因为集群在实现部分功能的时候,会通过公网地址访问云服务。

IDC与集群互访

IDC与集群互访这种场景,假设IDC和集群VPC之间,已经通过底层的网络产品打通,IDC内部机器和集群节点或者Pod之间,可以通过地址找到对方。

这种情况下,只需要在确保出方向规则放行IDC机器网段的情况下,对入规则配置放行IDC机器地址段即可。

使用新的安全组管理节点

某些时候,用户需要新增加一些安全组来管理集群节点。比较典型的用法,包括把集群节点同时加入到多个安全组里,和把集群节点分配给多个安全组管理。

如果把节点加入到多个安全组里,那么这些安全组会依据优先级,从高到低依次匹配规则,
这会给配置管理增加复杂度。而把节点分配给多个安全组管理,则会出现脑裂问题,需要通过安全组之间授权,或者增加规则的方式,确保集群节点之间互通。

典型问题与解决方案

前边的内容包括了安全组在ACK集群中所扮演的角色,安全组与集群网络,以及安全组配置管理方法。最后一节基于阿里云售后线上客户海量问题的排查经验,分享一些典型的,与安全组错误配置有关系的问题和解决方案。

使用多个安全组管理集群节点

托管集群默认把节点ECS和管控ENI弹性网卡放在同一个安全组里,根据安全组的特性,这保证了ENI网卡和ECS的网卡之间在VPC网络平面上的互通。如果把节点从集群默认安全组里移除并纳入其他安全组的管理当中,这导致集群管控ENI和节点ECS之间无法通行。

这个问题的现象,比较常见的有,使用kubectl exec命令无法进去pod终端做管理,使用kubectl logs命令无法查看pod日志等。其中kubectl exec命令所返回的报错比较清楚,即从API Server连接对应节点10250端口超时,这个端口的监听者就是kubelet。

6.png

此问题的解决方案有三种,一个是将集群节点重新加入集群创建的安全组,另一个是对节点所在的安全组和集群创建的安全组之间互相授权,最后一个方式是,在两个安全组里使用规则来互相放行节点ECS和管控ENI的地址段。

限制集群访问公网或者运营级NAT保留地址

专有或托管集群的系统组件,如cloud controller manager,metrics server,cluster auto scaler等,使用公网地址或运营商级NAT保留地址(100.64.0.0/10)访问阿里云云产品,这些产品包括但不限于负载均衡SLB,弹性伸缩ESS,对象存储OSS。如果安全组限制了集群访问这些地址,则会导致系统组件功能受损。

这个问题的现象,比较常见的有,创建服务的时候,cloud controller manager无法访问集群节点metadata并获取token值。集群节点以及其上的系统组件通过节点绑定的授权角色访问云资源,如访问不到token,会导致权限问题。

7.png

另外一个现象是,集群无法从阿里云镜像仓库下载容器镜像,导致pod无法创建。在报错中有明显的,访问阿里云镜像仓库的报错。
8.png

此问题的解决方案,是在限制集群出方向的时候,确保运营商级NAT保留地址100.64.0.0/10网段以及阿里云云服务公网地址被放行。其中运营商保留地址比较容易处理,云服务公网地址比较难处理,原因有两个,一个是集群会访问多个云服务且这些云服务的公网地址有可能会更改,另一个是这些云服务可能使用DNS负载均衡。所以需要多次解析这些服务的url并找出所有ip地址并放行。

容器组跨节点通信异常

集群创建的时候,会在安全组里添加容器组网段入方向放行规则。有了这个规则,即使容器组网段和VPC网段不一样,容器组在跨节点通信的时候,也不会受到安全组的限制。如果这个默认规则被移除,那么容器组跨节点通信会失败,进而使得多种集群基础功能受损。

这个问题的现象,比较常见的有,容器组DNS解析失败,容器组访问集群内部其他服务异常等。如下图,在容器组网段规则被移除之后,从disk controller里访问www.aliyun.com则无法解析域名,telnet coredns的地址不通。地址之所以可以ping通的原因,是安全组默认放行了所有icmp数据。

9.png

此问题解决方案比较简单,就是重新把容器组地址段加入安全组。这类问题的难点在于,其引起的问题非常多,现象千奇百怪,所以从问题现象定位到容器组跨节点通信,是解决问题的关键一步。

结束语

这篇文章从三个方面,深入讨论了阿里云ACK产品安全组配置管理。这三个方面分别安全组在集群中扮演的角色,安全组与集群网络,以及常见问题和解决方案。

同时通过分析,可以看到ACK产品安全组配置管理的三个重点,分别是集群的外网访问控制,集群容器组之间跨节点访问,以及集群使用多个安全组管理。与这三个重点对于的,就是三类常见的问题。

以上总结会在集群创建之前和创建之后,对集群安全组的规划管理有一定指导意义。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
25天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
2月前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
2月前
|
人工智能 专有云 Serverless
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
106 2
|
3月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
3月前
|
人工智能 Prometheus 监控
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理
本文介绍了在阿里云容器服务 ACK 上部署 NVIDIA NIM,结合云原生 AI 套件和 KServe 快速构建高性能模型推理服务的方法。通过阿里云 Prometheus 和 Grafana 实现实时监控,并基于排队请求数配置弹性扩缩容策略,提升服务稳定性和效率。文章提供了详细的部署步骤和示例,帮助读者快速搭建和优化模型推理服务。
182 7
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理
|
3月前
|
人工智能 Prometheus 监控
使用NVIDIA NIM在阿里云ACK中加速LLM推理
介绍在阿里云ACK集群上结合AI套件能力快速部署NVIDIA NIM模型推理服务,同时提供全面的监控指标和实现弹性伸缩。
使用NVIDIA NIM在阿里云ACK中加速LLM推理
|
3月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
|
3月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
阿里云ACK容器服务生产级可观测体系建设实践
|
2月前
|
运维 Kubernetes 数据处理
阿里云Argo X K8s玩转工作流引擎,实现大规模并行计算
Kubernetes已经成为事实的云原生操作系统,成为业务上云、容器化的标准。从过去无状态应用、企业核心应用,到现在AI时代的数据处理、AI训练、科学仿真等,越来越多的离线任务跑在K8s上。
|
11天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
41 1