我们在本地托管了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层,从而增加了另一个故障点。
是否有更好的解决方案来实现此要求?
答案 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。