【问题标题】:haproxy-ingress load balance http on non standard port非标准端口上的 haproxy-ingress 负载平衡 http
【发布时间】:2020-10-05 08:01:51
【问题描述】:

我需要抓取在 pod 中运行的 Prometheus 导出器。它在端口 9098 上运行,导出器工作正常,我可以从运行它的主机手动 scrape 它。问题在于入口。我试图让入口允许外部抓取端口 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 的容器/端口部分中工作。我可以在 haproxy 统计页面中看到“负载均衡器”,但主机从不监听端口 9098 来重定向流量。

谢谢, 肖恩

【问题讨论】:

  • 您的意思是 haproxy 本身正在监听 9098?你应该改用tcp-service。否则,您可以使用 mysupercool.domain.name:80/443 haproxy 正在侦听并知道如何将请求发送到您的后端。
  • 我将它添加到我的 tcp-services 中(我已经为 memcached 准备好了它)。我只是假设 TCP 服务用于非 http/https 服务。所以我不需要入口文件,它直接转发到服务。
  • tcp 在 haproxy 角度并监听任意端口。由于 http 通过 tcp 工作,因此您也可以使用它来公开 http 服务。

标签: kubernetes haproxy-ingress


【解决方案1】:

HAProxy Ingress 使用 ingress 对象在 bind 配置的端口中暴露 http 服务;文档here。配置的servicePort有内部服务的端口名称或编号,不会反映在haproxy的监听端口上。如果使用 https,则此处使用 TLS 的 sni 扩展来选择证书以启动握手。 http Host 标头用于选择入口的主机名。也就是说,您可能应该使用 http://mysupercool.domain.name 连接到导出器 - 前提是此域解析为您的入口,并且这是此域中与 / 匹配的唯一路径。

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

【讨论】:

  • 我错过了文档中的绑定配置端口,在解释和链接之后我完全理解了这一点。我已经使用 haproxy 很多年了,我只是需要适应一些不同的思维方式。
猜你喜欢
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 2016-12-25
  • 2013-10-23
  • 2018-02-17
相关资源
最近更新 更多