HAProxy不支持Kubernetes NodePort作为后端(裸机)



我已经有一个运行HAProxy的主机。在我使用Kubernetes之前,它就已经开始运行了。它可以完美地作为反向代理和SSL终止器,用于各种主机上的各种Docker容器中的各种web内容。

现在我有一个Kubernetes集群,并在其他一些机器上运行。我已经创建了NodePort Service,它在每个工作节点上公开端口30080,如下所示:

apiVersion: v1
kind: Service
metadata:
name: snginx
labels:
app: nginx
spec:
type: NodePort
externalTrafficPolicy: Local    #Cluster or Local
selector:
app: nginx
ports:
- protocol: TCP
port: 8080
targetPort: 80
nodePort: 30080

从运行HAProxy(不是集群的一部分)的机器上,我可以成功卷曲NodePort (curl 10.0.0.20:30080),并且我得到"欢迎使用nginx!…"但是,如果我将NodePort设置为HAProxy中的后端,我会得到503"无服务器可用",HAProxy流量日志显示:

localhost haproxy[18489]: [redactedIP]:49399 [30/Aug/2021:19:24:00.764] http-in~ load/load 66/0/-1/-1/67 503 212 - - SC-- 1/1/0/0/3 0/0 "GET / HTTP/1.1"

haproxy管理日志显示:

Aug 30 20:07:13 localhost haproxy[18839]: Server load/load is DOWN, reason: Layer4 connection problem, info: "General socket error (Permission denied)"

但是,我已经用

禁用了防火墙
sudo systemctl disable --now firewalld

并验证状态未运行。另外,在安装集群时禁用了SELinux。另外,我可以ping 10.0.0.20很好。

"load"是我用来测试负载平衡的主机名(即load.mydomain.com)。

另外,如果我在物理路由器上使用PAT直接路由到该NodePort,从建筑物外部,它会按预期工作。

给了什么?代理请求和curl之间的区别是什么?

谢谢。

SELinux是不同的。也就是说,HAProxy主机(不是集群节点)上的SELinux:

SELinux只允许web服务器向一组有限的端口进行出站连接

也就是说,如果不打开"客户端"(在本例中是HAProxy服务器)上的端口,就不能向NodePort范围(30000-32768)内的任何端口发出出站http请求。

sudo semanage port --add --type http_port_t --proto tcp 30080

相关内容

  • 没有找到相关文章

最新更新