[英]Simplest approach to expose a HAProxy (port 80) Docker in IBM Cloud Kubernetes
我需要将运行 HAProxy 的 Docker 部署到 IBM Cloud (Bluemix) Kubernetes 服务中。 我对如何公开 80 和 443 端口有点迷茫。在简单的 docker 中,这非常简单,但在 Kubernetes 中似乎很复杂,或者至少在 IBM Cloud 中。 我不需要负载平衡、虚拟主机或任何额外的配置,因为 HAProxy 会处理它。 只需要复制(移动)我的本地运行 HAProxy,将端口 80 和 443 暴露到 bluemix 中。 (出于多种原因,我想使用 HAproxy,因此这里的请求非常具体:将 HAProxy 端口 443 和 80 公开到 IBM Cloud Kubernetes 服务中的永久 IP 地址的最简单方法。
我可以为此提供一个基本的示例 yaml kubectl 文件吗? 谢谢
为了保持在两个环境中运行,那么你可以定义一个相同的图像部署为HAProxy的容器和Service
,以通过访问他们NodePort
在NodeIP或clusterIP。 NodePort 在概念上类似于运行 docker docker run -pn:n
。
IP:NodePort 需要可以从外部访问,HAProxy 将从那里接管。 这是一个示例 HAProxy 设置,它使用 AWS ELB 将外部用户连接到节点。 大多数人不建议通过 NodePort 运行服务,因为 Kubernetes 提供了提供更多集成的替代方法。
LoadBalancer专门用于自动配置云提供商负载均衡器服务。 我不相信 IBM Clouds 负载均衡器在 Kubernetes 中有任何支持,也许 IBM 已经添加了一些东西? 如果他们有,您可以使用它而不是NodePort
来访问您的服务。
如果您在本地运行 Docker 并在外部运行 Kubernetes,那么您已经将一致性排除在外,因此您可以使用基于 HAProxy 的 Ingress Controller 设置Ingress ,有一些可用的:
这为您提供了如何管理服务入口的标准 Kubernetes 抽象,但在底层使用 HAProxy。 不过,这不会是您的 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'
如果您可以在每个应该公开端口 80/443 的节点上运行这个 HAProsy,那么考虑使用hostNetwork: true
运行 DaemonSet。 这将允许您创建直接在节点网络上打开 80 和 443 的 pod。 如果您的集群中有负载均衡器支持,则可以改用 LoadBalancer 类型的服务。 它将从高节点端口转发,例如 ie。 32080 到您的后备 haproxy pod,并在其前面自动配置 LB,为您提供外部 IP 并将 80/443 从该 IP 转发到您的高节点端口(同样,假设您的 kube 部署支持使用 LB 服务)
IBM Cloud 具有用于负载均衡器和 Ingress 的内置解决方案。 这些文档包括两者的示例 YAML。
负载均衡器: https : //console.bluemix.net/docs/containers/cs_loadbalancer.html#loadbalancer
入口: https : //console.bluemix.net/docs/containers/cs_ingress.html#ingress
如果您需要 tls 终止或想要使用路由而不是 IP 地址来访问您的 HAProxy,那么 Ingress 将是最佳选择。 如果这些选项无关紧要,那么我建议从提供的负载均衡器开始,看看它是否满足您的需求。
请注意,负载均衡器和 Ingress 都需要付费集群。 对于 lite 集群,只有 NodePort 可用。
这是一个示例 YAML,它部署 IBM Liberty 并通过负载均衡器服务公开它。
#If you are not logged into the US-South https://api.ng.bluemix.net
region, change the image registry location to match your region.
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ibmliberty-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: ibmliberty
spec:
containers:
- name: ibmliberty
image: registry.ng.bluemix.net/ibmliberty
---
apiVersion: v1
kind: Service
metadata:
name: ibmliberty-loadbalancer
spec:
type: LoadBalancer
selector:
app: ibmliberty
ports:
- protocol: TCP
port: 9080
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.