【发布时间】:2021-07-19 22:16:22
【问题描述】:
我正在将服务从 Kubernetes 迁移到 AWS ECS。对于路由,我使用 AWS Application Load Balancer (ALB)。
ALB 在端口 80 上有一个侦听器,我的服务聚合在目标组中。
为了在服务之间路由流量,我使用 ALB 侦听器规则。
对于路由,我需要满足两个条件:host-header 和 path-pattern。
所以我会有类似以下的内容:
我尝试向规则添加多个条件(在 Terrafom 中),但只能使用 host-header 或 path-pattern:
条件块中只能设置 host_header、http_header、http_request_method、path_pattern、query_string 或 source_ip 之一
也不能在 AWS 控制台中将host_header 与path_pattern 一起添加。
如何在 AWS ALB 中根据主机头 + 路径模式这两个条件路由流量?
一种可能的选择是每台主机使用一个 ALB,但是当主机/子域的数量增加时,这将过于昂贵。
如何在 Kubernetes 中完成
在 Kubernetes 的 nginx 入口路由器中可以同时进行主机头和路径模式路由。例如拥有这两个入口资源:
资源 1
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: web-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: domain-one.com
http:
paths:
- path: /web
backend:
serviceName: web-service
servicePort: 8080
- path: /media/files
backend:
serviceName: web-service
servicePort: 8080
- host: another-domain.com
http:
paths:
- path: /web
backend:
serviceName: web-service
servicePort: 8080
- path: /media/files
backend:
serviceName: web-service
servicePort: 8080
资源 2
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: api-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: www.domain-one.com
http:
paths:
- path: /api
backend:
serviceName: api-service
servicePort: 8181
对于 Kubernetes,除了path 参数外,还可以定义一个可选的host 参数。
所以最后host和path必须在负载均衡器将流量引导到相应的后端之前匹配传入请求的内容:
那么,如何在 AWS ALB 上实现同样的效果?
谢谢。
【问题讨论】:
标签: amazon-web-services amazon-ecs kubernetes-ingress aws-application-load-balancer