这项改动危险的做法是用一条命令翻转端点,同时把所有管理员锁在门外。安全的做法是保持两条路径都开着,先证明私有路径从 VPN 可以走通,然后才下掉公有端点。前提是已有集群、已批准进入其 VPC 的隧道,以及一个本来就能用的 kubeconfig;要做的是对 Kubernetes API 的私有访问,而不是私有节点,也不是新的权限模型。下面每一步都有一个可以安全失败的检查。

1. 盘点端点并保留退路

在改动之前记录当前状态,包括公有 CIDR 允许列表和集群安全组。出问题时你要对照的正是这两样,而如果私有路由被证明是错的,允许列表也是你的回滚路径。

aws eks describe-cluster --region REGION --name CLUSTER \
  --query 'cluster.{endpoint:endpoint,public:resourcesVpcConfig.endpointPublicAccess,private:resourcesVpcConfig.endpointPrivateAccess,cidrs:resourcesVpcConfig.publicAccessCidrs}'

这里的 REGION 和 CLUSTER 是占位符。注意私有标志当前读到的值,因为已经开启私有访问的集群,与从未开启过的集群,第一步并不相同。过渡期间至少保留一条已批准的管理路径;依赖同一集群可达的 VPN 不是恢复路径。

2. 在网络路径就位后再启用私有访问

打开开关是容易的那一半。隧道需要到端点私有地址的路由,集群安全组需要来自 VPN 实际呈现的源地址的 TCP 443。Client VPN 关联、站点到站点网关和对等 VPC 呈现的源地址各不相同,所以要按你实际部署的模型来,而不是套用一个通用私有网段。

aws eks update-cluster-config --region REGION --name CLUSTER \
  --resources-vpc-config endpointPublicAccess=true,endpointPrivateAccess=true

aws eks describe-update --region REGION --name CLUSTER --update-id UPDATE_ID

更新是异步的。要轮询更新 ID 直到它报告成功,而不是等固定秒数就想当然。做这件事时别动节点和控制平面的流量:把集群整个安全组换成一条针对你笔记本的规则,正是让正常数据平面变成第二次事故的做法。

EKS 端点文档 值得完整读一遍,因为它说明仅私有访问可以来自 VPC 或已连接的网络。这句话正是这次迁移可行的全部理由,也是下一步存在的理由。

3. 证明工作站走的是私有路径

两个端点都启用时,kubectl get ns 成功并不能证明是哪一个应答的。解析端点主机名,检查拿到的地址属于私有网段还是公有网段。如果你连接的网络没有通过 DNS 拿到私有视图,命令会经由公有端点成功,而你会基于错误证据下掉公有路径。这是本次迁移最常见的翻车方式,而且它看起来和成功一模一样。

nslookup HASH.gr7.REGION.eks.amazonaws.com
kubectl cluster-info
kubectl get ns --request-timeout=10s

主机名和证书校验要保持原样。在 kubeconfig 里换成私有 IP 并跳过 TLS 校验,并不是你在变更记录里描述的那次迁移,端点一轮换它就会再次失败。

4. 有意识地停用公有访问

私有路径得到验证、恢复流程获批之后,再关闭公有端点。这是真实变更而非预览,所以要对着你真正想要的那个账户和配置执行。

aws eks update-cluster-config --region REGION --name CLUSTER \
  --resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true

在仅私有模式下,公有 DNS 名称从 VPC 内部解析到端点的私有地址,于是能解析和能到达不再是同一件事。任何依赖公有地址的东西,包括 CI 运行器或处在别的网络里的笔记本,现在都需要自己的入口路径。

5. 把网络策略与身份策略分开

公有访问 CIDR 列表只管公有端点,并不约束私有端点;私有端点由集群安全组和连接网络策略来限定。如果你保留公有端点,它的允许列表必须与 API 客户端和节点真正使用的公网出口一致;VPN 地址池很少是那个来源。

这些都不改变 IAM 或 Kubernetes RBAC。端点设置属于管理操作,普通用户不应仅仅为了访问 API 就获得放宽边界的权限。把最终状态、日期和恢复路径写进操作手册,然后趁恢复路径还容易时演练一次。

相关文章