【问题标题】:HAProxy with Kubernetes in a DR setup在 DR 设置中使用 Kubernetes 的 HAProxy
【发布时间】:2019-06-16 12:59:06
【问题描述】:

我们在本地托管了 Kubernetes 设置,并试图让 K8s 之外的客户端连接到 K8s 集群中托管的服务。

为了使用 HA Proxy(在 K8s 外部运行)来完成这项工作,我们的 HAProxy 后端配置如下 -

   backend vault-backend
   ...
   ...
   server k8s-worker-1 worker1:32200 check
   server k8s-worker-2 worker2:32200 check
   server k8s-worker-3 worker3:32200 check

现在,此解决方案有效,但工作人员名称和相应的节点端口在此配置中是硬编码的,当添加(或删除/更改)更多工作人员时,这显然不方便。

我们遇到了 HAProxy Ingress Controller (https://www.haproxy.com/blog/haproxy_ingress_controller_for_kubernetes/),这听起来很有希望,但(我们认为)有效地添加了另一个 HAProxy 层......因此,增加了另一个故障点。

有没有更好的解决方案来实现这个要求?

【问题讨论】:

    标签: kubernetes haproxy


    【解决方案1】:

    现在,此解决方案有效,但工作人员名称和相应的节点端口在此配置中是硬编码的,当添加(或删除/更改)更多工作人员时,这显然不方便。

    您可以为您的 Kubernetes Service 显式配置 NodePort,这样它就不会选择随机端口,并且您始终在外部 HAProxy 上使用相同的端口:

    apiVersion: v1
    kind: Service
    metadata:
      name: <my-nodeport-service>
      labels:
        <my-label-key>: <my-label-value>
    spec:
      selector:
        <my-selector-key>: <my-selector-value>
      type: NodePort
      ports:
       - port: <service-port>
         nodePort: 32200
    

    我们遇到了 HAProxy Ingress Controller (https://www.haproxy.com/blog/haproxy_ingress_controller_for_kubernetes/),这听起来很有希望,但(我们认为)有效地添加了另一个 HAProxy 层......因此,增加了另一个故障点。

    您可以在集群内部运行 HAProxy 入口并在集群外部移除 HAproxy,但这实际上取决于您运行的服务类型。例如,Kubernetes Ingress 是第 7 层资源。此处的 DR 将通过您的 HAProxy 入口控制器的多个副本来处理。

    【讨论】:

    • 感谢 Rico 的快速回复。你是对的 - 为 kubernetes 服务配置 nodePort 是一个有助于标准化正在使用的端口的选项,而不是每次都发出随机端口。但是,工人名称仍然是硬编码的,这就是问题所在。
    • 是的。您需要一个脚本来更新工作人员并在每次添加服务器时重新加载 HAProxy。这是一个常见的问题。
    • 我知道我这次谈话真的迟到了......但是如果你使用 Ansible 之类的东西来配置你的 k8s 集群,那么当添加一个新的服务器来混合时,Ansible 也可以更新 HApoxy 配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2022-11-10
    • 2022-06-15
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多