在灾难恢复设置中使用带有Kubernetes的HAProxy

时间:2019-01-23 01:19:23

标签: kubernetes haproxy

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

为了使用HA Proxy(在K8外部运行)进行这项工作,我们具有如下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

现在,此解决方案有效,但是工作名和相应的nodePort在此配置中进行了硬编码,这显然在添加(或删除/更改)更多工作时不方便。

我们遇到了HAProxy入口控制器(https://www.haproxy.com/blog/haproxy_ingress_controller_for_kubernetes/),这听起来很有希望,但是(我们认为)有效地在混合中添加了另一个HAProxy层,从而增加了另一个故障点。

是否有更好的解决方案来实现此要求?

1 个答案:

答案 0 :(得分:2)

  

现在,此解决方案有效,但是工作名和相应的nodePort在此配置中进行了硬编码,这显然在添加(或删除/更改)更多工作时不方便。

您可以为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入口控制器(https://www.haproxy.com/blog/haproxy_ingress_controller_for_kubernetes/),这听起来很有希望,但是(我们认为)有效地在混合中添加了另一个HAProxy层,从而增加了另一个故障点。

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