非标准端口上的 haproxy-ingress 负载平衡 http

haproxy-ingress load balance http on non standard port

我需要在 pod 中抓取 Prometheus 导出器 运行。它在端口 9098 上运行,导出器工作正常,我可以从 运行 所在的主机手动 抓取 它。问题在于入口。我正在尝试让入口允许在端口 9098(它是 http 和 TCP)上进行外部抓取。这是我的入口 yaml。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/balance-algorithm: roundrobin
    ingress.kubernetes.io/maxconn-server: "10"
    ingress.kubernetes.io/ssl-redirect: "false"
  name: ingress-ecobee-exporter
  namespace: monitoring
spec:
  rules:
  - host: mysupercool.domain.name
    http:
      paths:
      - path: /
        backend:
          serviceName: ecobee-exporter-service
          servicePort: 9098

我已指定端口 9098 在我的 haproxy-ingress.yaml 的 containers/ports 部分工作。我可以在 haproxy 统计页面中看到“负载均衡器”,但主机从不监听端口 9098 以重定向流量。

谢谢, 肖恩

HAProxy Ingress 使用 ingress objects 在 bind 配置的端口中公开 http 服务;医生 here。配置的servicePort有内部服务的端口名或者端口号,在haproxy的监听端口中没有体现。如果使用 https,这里使用 TLS 的 sni 扩展来选择一个证书来启动握手。 http Host header 用于选择入口的主机名。也就是说,您可能应该使用 http://mysupercool.domain.name 连接到导出器 - 前提是该域解析为您的入口,并且这是该域中唯一匹配 / 的路径。

另一方面,

tcp-service 在任意端口号上公开任何基于 tcp 的服务,包括 http/s。没有 sni 或 Host header 读数 - 这是一个普通的 L4 TCP 代理。这里应该特别小心:如果端口号被重用,haproxy 不会抱怨。在这种情况下,内核将在每个冲突端口之间对新请求进行负载平衡。