我需要将运行HAProxy的Docker部署到IBM Cloud(Bluemix)Kubernetes服务中,该HAProxy已在本地docker上进行过。我对如何公开80和443感到迷茫。在简单的简单docker中,它非常简单,但在Kubernetes或至少在IBM Cloud中似乎很复杂。
我不需要负载平衡,虚拟主机或任何其他配置,因为HAProxy会照顾好它。只需复制(移动)我在内部运行的HAProxy,即可将端口80和443暴露到bluemix中。 (出于多种原因,我想使用HAproxy,因此此处的请求非常具体:将HAProxy端口443和80暴露给IBM Cloud Kubernetes服务中的永久IP地址的最简单方法。
我可以为此提供一个基本示例yaml kubectl文件吗?谢谢
最佳答案
节点端口
要在两个环境中都运行相同的镜像,可以为HAProxy容器定义一个Deployment,并通过NodeIP或clusterIP上的 Service
定义一个 NodePort
来访问它们。 NodePort在概念上类似于运行docker run -p n:n
。
IP:NodePort将需要可从外部访问,并且HAProxy将接管那里。使用AWS ELB将外部用户吸引到节点的Here's a sample HAProxy setup。大多数人不建议通过NodePort运行服务,因为Kubernetes提供了提供更多集成的替代方法。
负载均衡器
LoadBalancer专门用于自动配置云提供商的负载平衡器服务。我不相信IBM Clouds负载均衡器在Kubernetes中有任何支持,也许IBM在其中添加了一些东西?如果他们有,您可以使用它代替NodePort
来获得服务。
入口
如果您在本地运行Docker并在外部运行Kubernetes,那么您已经在窗口中抛出了一致性,因此可以使用基于HAProxy的Ingress Controller设置Ingress,有一些可用的方法:
这为您提供了如何管理服务入口但在下面使用HAProxy的标准Kubernetes抽象。不过,这将不是您的HAProxy镜像,很可能您可以像在HAProxy镜像中那样为HAProxy Ingress配置相同的内容。
Voyagers docco非常好:
apiVersion: voyager.appscode.com/v1beta1
kind: Ingress
metadata:
name: test-ingress
namespace: default
spec:
rules:
- host: appscode.example.com
http:
paths:
- path: '/test'
backend:
serviceName: test-service
servicePort: '80'
backendRules:
- 'acl add_url capture.req.uri -m beg /test-second'
- 'http-response set-header X-Added-From-Proxy added-from-proxy if add_url'
关于docker - 在IBM Cloud Kubernetes中公开HAProxy(端口80)Docker的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48943872/