基于AWS单ALB实现Kubernetes多Namespace服务自动Ingress暴露方案咨询
解决方案:自动子域名路由到K8s服务(单AWS ALB)及KodeKloud无Ingress访问原理
一、AWS单ALB实现自动子域名路由方案
要实现无需手动编写Ingress YAML,自动按www.<service-name>.<namespace>.saireddy.com路由到对应服务,且仅用一个ALB,可通过以下组合方案实现:
1. 部署AWS Load Balancer Controller
这是AWS官方维护的K8s控制器,负责管理ALB/NLB资源。先确保集群已配置好IAM权限,让控制器能操作AWS的负载均衡、安全组等资源,再将控制器部署到集群中。
2. 配置共享ALB的IngressClass
创建一个默认IngressClass,让所有自动生成的Ingress都绑定到同一个ALB。示例YAML如下:
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb-shared annotations: ingressclass.kubernetes.io/is-default-class: "true" spec: controller: ingress.k8s.aws/alb parameters: apiGroup: elbv2.k8s.aws kind: IngressParams name: shared-alb-config --- apiVersion: elbv2.k8s.aws/v1beta1 kind: IngressParams metadata: name: shared-alb-config spec: group: saireddy-shared-alb # 同组Ingress会复用同一个ALB
3. 自动生成Ingress资源
可以用以下两种方式自动生成对应Ingress:
- 自定义K8s控制器:监听集群中Service的创建/更新事件,一旦有新Service上线,自动生成匹配
www.<service-name>.<namespace>.saireddy.com的Ingress资源,同时指定Service的对应端口(比如tomcat的8080)。 - Helm Chart+模板:用Helm部署服务时,通过模板自动生成对应的Ingress,无需手动编写YAML。
4. DNS通配符解析
在Route53(或你的DNS服务商)中配置通配符解析:将*.saireddy.com指向共享ALB的DNS名称。这样所有子域名请求都会打到这个ALB,再由ALB根据Host头匹配Ingress规则路由到对应服务。
注意事项
- 确保ALB安全组允许80/443端口的公网流量,K8s节点安全组允许ALB访问Service对应的NodePort或Pod端口。
- 若需HTTPS,可结合cert-manager自动生成通配符证书,绑定到Ingress上。
二、KodeKloud实验室无需配置Ingress访问服务的实现方式
KodeKloud的无Ingress即时访问,核心是两种临时暴露方式的封装:
- NodePort+反向代理:实验室平台会自动检测Service的NodePort,然后通过部署在节点前端的反向代理,生成临时访问URL(比如
https://<lab-id>-<node-port>.k8s.labs.kodekloud.com),用户访问时,反向代理直接将请求转发到对应节点的NodePort。 - 自动端口转发:后台自动执行
kubectl port-forward命令,把Pod或Service的端口映射到实验室网关服务器,再对外提供访问链接,绕过了集群的Ingress控制器。
这种模式只适合临时测试,因为NodePort端口范围有限、端口转发稳定性差,不适合生产环境。
内容的提问来源于stack exchange,提问作者saireddy bonthu
相关产品推荐
相关产品推荐

