我最近正在评估HAProxy入口控制器作为后端服务的负载平衡器,并附带以下介绍:https://github.com/jcmoraisjr/haproxy-ingress。入口控制器能够重定向请求以更正后端服务,但它不能过滤响应页面以重写url以匹配外部方面。
我有一个名为'report'的服务,它在http://internal-ip:5000
上运行,其入口配置为:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: report-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /report
backend:
serviceName: report-service
servicePort: 5000
HAProxy入口控制器正确找到了该服务并生成配置:
frontend httpfront-default-backend
...
reqrep ^([^\ :]*)\ /report/?(.*$) \1\ /\2 if from-https { var(txn.path) -m beg /report }
...
但是默认的返回页面(/)包含一段JavaScript,如下所示:
__upload_file = (data_file) => {
const formData = new FormData();
formData.append('file', data_file)
return fetch('/upload', {
method: 'POST',
body: formData
}).then(response => {
...
})
您看到fetch
命令具有/upload
URL参数,应该将其更改为/report/upload
,但没有。因为HAProxy配置是由入口控制器本身维护的,所以我们只能从kubernetes入口配置中感染它,但是我不知道该怎么做才能使其工作。有没有人可以提供想法?谢谢。