0

我需要抓取在 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 的容器/端口部分中工作。我可以在 haproxy 统计页面中看到“负载均衡器”,但主机从不监听端口 9098 来重定向流量。

谢谢,肖恩

4

1 回答 1

1

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

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

于 2020-06-17T17:52:42.127 回答