如何配置 Traefik ingressroute 将请求路由到某个 url?

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

我正在尝试配置 Traefik ingressRoute 将请求从主机路由到 url。 主机和 traefik 在 Region1 中设置,而 url 用于 Region2 中的负载均衡器,指向 Region2 中的服务。请参阅下面我的 ingressroute 配置:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: route-name
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`region1.domain.com`) && PathPrefix(`/`)
      kind: Rule
      services:
        test-service:
          loadBalancer:
            servers:
              - url: http://region2.domain.com/

我尝试按照此处的示例进行操作:https://doc.traefik.io/traefik/routing/services/但出现错误:

IngressRoute in version "v1alpha1" cannot be handled as a IngressRoute: strict decoding error: unknown field "spec.routes[0].services.test-service"

我能够访问 Region2 中负载均衡器的 url,所以只是想知道是否可以/如何配置 Ingressroute 将请求路由到该 url?

routes azure-aks traefik traefik-ingress ingress-controller
1个回答
0
投票

如果您希望将请求从一个区域中的 Traefik IngressRoute 路由到另一区域中的服务或负载均衡器 URL,有几种不同的方法可以实现此目的。

选项1 创建一个指向您的外部 URL 的

ExternalName
类型的 Kubernetes 服务。该服务充当您的外部服务的 DNS 别名。

apiVersion: v1
kind: Service
metadata:
  name: external-service
  namespace: default
spec:
  type: ExternalName
  externalName: Yourregion2.domain.com

并更新您的 IngressRoute 以将请求路由到您刚刚创建的ExternalName Service。

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: route-name
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`yourregion1.domain.com`) && PathPrefix(`/`)
      kind: Rule
      services:
        - name: external-service
          port: 80

enter image description here

此配置假设对

region1.domain.com
的请求将通过
region2.domain.com
路由到
external-service
port
应与您的外部服务侦听的端口匹配。由于我们指向 URL,因此
80
用于 HTTP,但如果您的服务使用 HTTPS 或其他端口,请进行相应调整。

验证您的服务。

kubectl get svc external-service -n default

enter image description here

通过从浏览器访问

region1.domain.com
或使用
curl
等工具来测试路由。您应该被重定向到托管在
region2.domain.com
的服务。

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