如何在AWS-EKS集群中实现kubectl访问私有化并保留公网服务能力
AWS EKS 匹配需求的部署方案
核心是将EKS控制面的API访问限制、集群工作负载的公网出入流量管控两个配置维度完全拆分,互不影响,完全可以满足需求,具体配置步骤如下:
一、EKS控制面访问限制配置(仅堡垒机可执行kubectl操作)
两种可选配置方式,均可实现仅堡垒机访问EKS API:
- 方案1(轻量配置):开启EKS控制面公网访问,仅将堡垒机的公网出口IP加入访问白名单
用eksctl创建集群时的核心配置片段如下:
配置后EKS API的公网入口仅响应堡垒机的请求,其他公网IP的访问会被直接阻断。vpc: clusterEndpoints: publicAccess: true privateAccess: true publicAccessCidrs: ["<你的堡垒机公网IP/32>"] - 方案2(更高安全级):关闭EKS控制面公网访问,仅开启VPC内私有访问
将堡垒机部署在与EKS集群同VPC或已对等连接的VPC内,此时EKS API仅能被VPC内部资源访问,自然只有堡垒机可以执行kubectl操作,完全避免公网暴露风险。
二、集群应用公网可访问性配置(与控制面配置完全独立)
控制面的访问限制不会影响集群工作负载的公网通信能力,按常规方式配置公网出入口即可:
- 公网入口配置:部署AWS Load Balancer Controller组件,给需要对外暴露的Service或Ingress添加公网LB注解
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing,控制器会自动创建公网ALB/NLB,公网用户访问LB地址即可访问到集群内的应用。 - 公网出口配置:若集群内应用需要主动访问公网,给节点所在的公有子网绑定互联网网关(IGW)、私有子网绑定NAT网关即可,无需修改控制面的访问限制规则。
三、效果验证
- kubectl访问限制验证:使用堡垒机以外的公网设备执行
kubectl get nodes命令,会返回连接失败/超时提示,仅堡垒机可正常执行Kubernetes操作命令。 - 应用公网访问验证:使用任意公网设备访问配置好的公网LB/Ingress地址,可正常获取应用响应内容。
内容的提问来源于stack exchange,提问作者Snehlata Giri
相关产品推荐
相关产品推荐

