0

我需要将一个运行 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 文件吗?谢谢

4

3 回答 3

2

节点端口

要在两个环境中保持相同的映像运行,您可以为 HAProxy 容器定义一个部署,并通过NodeIP 或 clusterIP 上的aService访问它们。NodePortNodePort 在概念上类似于 running docker run -p n:n

IP:NodePort 需要可从外部访问,HAProxy 将从那里接管。这是一个示例 HAProxy 设置,它使用 AWS ELB 让外部用户访问节点。大多数人不建议通过 NodePort 运行服务,因为 Kubernetes 提供了提供更多集成的替代方法。

负载均衡器

LoadBalancer专门用于云提供商负载均衡器服务的自动配置。我不相信 IBM Clouds 负载均衡器在 Kubernetes 中有任何支持,也许 IBM 已经添加了一些东西?如果他们有,您可以使用它而不是 aNodePort来访问您的服务。

入口

如果您在本地运行 Docker 并在外部运行 Kubernetes,那么您已经将一致性抛到了窗外,因此您可以使用基于 HAProxy 的 Ingress Controller设置Ingress ,有一些可用的:

这为您提供了标准 Kubernetes 抽象,即如何管理服务的入口,但在下面使用 HAProxy。不过,这不是您的 HAProxy 映像,您可能可以为 HAProxy Ingress 配置与在 HAProxy 映像中相同的内容。

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'
于 2018-02-23T10:29:36.590 回答
0

如果您可以在应该公开端口 80/443 的每个节点上运行此 HAProsy,那么请考虑使用hostNetwork: true. 这将允许您创建直接在节点网络上打开 80 和 443 的 pod。如果您的集群中有负载均衡器支持,则可以改用 LoadBalancer 类型的服务。它将从像ie这样的高节点端口转发。32080 到您的后备 haproxy pod,并在其前面自动配置 LB 以为您提供外部 IP 并将 80/443 从该 IP 转发到您的高节点端口(再次假设您的 kube 部署支持使用 LB 服务)

于 2018-02-23T09:57:37.173 回答
0

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 可用。

这是一个部署 IBM Liberty 并通过负载均衡器服务公开它的示例 YAML。

#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
于 2018-02-23T14:39:16.517 回答