将原始主机名与入口 nginx 控制器中的应用程序路径映射

问题描述 投票:0回答:1

我在 EKS 集群中安装了 API 网关,并且有以下通信流程:

用户 -> F5 LB -> Nginx 入口控制器 LB (devapi.example.com) -> 服务 -> API 网关 Pods

现在,我使用 DNS 名称 devapi.example.com 和应用程序路径直接通过入口控制器负载均衡器访问 API。我的入口模板与主机名(对于所有 API 来说是唯一且共享的)相匹配,并将 URL 中附加的路径转发到应用程序 pod,这样它就可以到达正确的 API:

https://devapi.example.com/hello-world -> https://api-gateway-service/hello-world

我需要什么

我想开始在 F5 中为每个应用程序发布不同的 DNS 名称。我可以在 F5 中发布 DNS 名称并将它们指向 devapi.example.com(真的不知道是否可以在此处附加路径)。我想在 F5 中发布应用程序 DNS,这样我就可以为每个应用程序指定一个 DNS 名称,该名称将重定向到 devapi.example.com,并附加基于原始 DNS 的特定路径:

hello-world-dev.example.com -> devapi.example.com/hello-world
liveness-check-dev.example.com -> devapi.example.com/health

某些主机名可能与路径中的任何单词都不匹配(请参阅 liveness-check-dev 主机名)。有没有办法将 F5 中的原始主机名与应用程序路径映射,以便我可以重写我的路径?

nginx kubernetes-ingress nginx-ingress ingress-controller ingress-nginx
1个回答
0
投票

您可以考虑使用这种定义 F5 配置的方法:

  1. 创建虚拟服务器,在 F5 上建立一台虚拟服务器 (vs_all_apps) 来处理所有传入流量。将

    devapi.example.com
    设置为默认服务器来处理与特定应用程序 DNS 规则不匹配的请求。然后启用 SNI 服务器(服务器名称指示)支持以根据主机名区分请求。

  2. 定义iRules,其中实现iRule(

    rule\_rewrite\_paths)
    以使用SNI信息执行基于源的路径重写。然后使用
    HTTP::header exists "Host"
    [HTTP::host split "." 1]
    从SNI字段中提取主机名。创建一个查找表(
    ltm rule lookup table my\_app\_mappings)
    )将 F5 主机名映射到
    devapi.example.com
    路径。使用
    lookup
    命令根据提取的主机名查找相应的路径,处理没有直接匹配的情况。使用
    HTTP::uri
    和映射路径( [
     ltm rule lookup table my\_app\_mappings $hostname]:$uri)

© www.soinside.com 2019 - 2024. All rights reserved.