我在 Kubernetes 中使用 Traefik IngressRoute。
我的目标是在访问 https://kubernetes_host.com/my_api/... 时将请求代理到http://10.139.158.30:5000/api/v1/
我会在 Nginx 中这样做:
location /my_api {
proxy_pass http://10.139.158.30:5000/api/v1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme http;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
但我不知道如何在 Traefik IngressRoute 中做到这一点。在文档中,仅代理内部 Kubernetes 服务的请求。例子:
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: route-proxy
namespace: xxx
spec:
entryPoints:
- xxx
routes:
- kind: Rule
match: PathPrefix(`/my_api`)
services:
- kind: Service
name: some-service
port: 80
您可以尝试创建一个
Endpoint
-Service
对来指向您的 IP:或者使用较新的
EndpointSlice
API(来自 k8s v1.21):Service
然后,在您的定义中引用IngressRoute
:更多信息:https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors。