我正在尝试配置 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?
如果您希望将请求从一个区域中的 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
此配置假设对
region1.domain.com
的请求将通过 region2.domain.com
路由到 external-service
。
port
应与您的外部服务侦听的端口匹配。由于我们指向 URL,因此 80
用于 HTTP,但如果您的服务使用 HTTPS 或其他端口,请进行相应调整。
验证您的服务。
kubectl get svc external-service -n default
通过从浏览器访问
region1.domain.com
或使用 curl
等工具来测试路由。您应该被重定向到托管在 region2.domain.com
的服务。