如何在AWS EKS中将Nginx Ingress暴露至公网可访问的公共URL?
EKS Ingress公网暴露操作步骤
EKS集群默认未内置Ingress控制器,你当前创建的Ingress资源仅定义了路由规则,必须部署对应的控制器消费规则,才会自动生成公网访问入口,具体操作如下:
1. 部署AWS Load Balancer Controller
AWS官方维护的AWS Load Balancer Controller(原ALB Ingress Controller)是EKS场景最常用的Ingress控制器,会自动根据Ingress配置创建AWS公网应用负载均衡(ALB)作为访问入口:
- 先为控制器配置IAM权限,推荐使用IAM角色关联服务账户(IRSA)方案,也可直接给EKS节点角色绑定AWS Load Balancer Controller对应的官方IAM权限策略
- 安装控制器后,执行以下命令验证控制器运行正常:
kubectl get pods -n kube-system | grep aws-load-balancer-controller
输出的Pod状态为Running即为部署成功
2. 补全Ingress资源配置
你当前的Ingress配置缺少AWS控制器识别所需的标注,需要修改annotations配置,同时建议升级老旧的apiVersion:
# 旧版extensions/v1beta1已在高版本K8S废弃,推荐使用稳定版api apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress annotations: # 指定Ingress由AWS Load Balancer Controller处理 kubernetes.io/ingress.class: alb # 声明创建公网可访问的ALB alb.ingress.kubernetes.io/scheme: internet-facing # 目标类型:Service为ClusterIP类型填ip,NodePort类型填instance alb.ingress.kubernetes.io/target-type: ip # 保留原有的重写规则 ingress.kubernetes.io/rewrite-target: / spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: my-service-example port: number: 80
3. 验证公网地址生成
修改配置后执行kubectl apply -f <你的Ingress配置文件名.yaml>提交更新,等待2-5分钟后执行kubectl get ingress,输出结果的ADDRESS列会展示自动创建的ALB公网域名,即为Ingress的公共访问URL。
4. 配置域名解析
将你使用的example.com域名的CNAME记录解析到上述ALB公网域名,即可通过域名正常访问后端服务。
注意事项
- 请确保ALB关联的安全组放通了80/443端口的公网入方向访问权限
- 请确保EKS节点或Pod关联的安全组放通了来自ALB的入方向访问权限
内容的提问来源于stack exchange,提问作者yihereg819
相关产品推荐
相关产品推荐

