我们正在运行一个6节点裸金属K8s集群(3节点控制和3节点计算平面)。入口被部署,它在基于路径的路由上运行良好。最近,我们在大会前面构建了一个HA负载平衡集群,以实现大会本身的高可用性。
+---------------+ +---------+ +---------+
| Loadbalancers | --> | Ingress | --> | Jenkins |
+---------------+ +---------+ +---------+负载平衡器基本上使用浮动IP地址以反向代理模式运行nginx,该地址具有带有通配符的DNS A类型记录:
*.cnk8sv.infra A <private-IP>然而,在这个设置中,我们无法应用基于虚拟主机的路由。在这种模式下,大会规则不会捕获任何通信量。我怀疑K8s前面的nginx正在将一些信息丢弃在headers中,因此入侵控制器无法执行基于主机的路由。
这是nginx负载平衡器的配置:
location / {
proxy_pass https://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}侵入对象:
spec:
rules:
- host: jenkins.cnk8sv.infra
http:
paths:
- backend:
serviceName: jenkins
servicePort: 8080
path: /一旦我们移除规则中的主机过滤器,流量星就会流动(所以是的,后端已经启动并运行)。任何帮助都将不胜感激。
发布于 2019-02-08 08:34:02
修复是将nginx中的X-Forwarded-Proto值更改为http,因为我们的目标是端口80,即HTTP。
https://stackoverflow.com/questions/54580975
复制相似问题