【问题标题】:Simplest approach to expose a HAProxy (port 80) Docker in IBM Cloud Kubernetes在 IBM Cloud Kubernetes 中公开 HAProxy(端口 80)Docker 的最简单方法
【发布时间】:2018-02-23 08:26:35
【问题描述】:

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

【问题讨论】:

    标签: docker kubernetes ibm-cloud haproxy ibm-cloud-kubernetes


    【解决方案1】:

    节点端口

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

    IP:NodePort 需要可从外部访问,HAProxy 将从那里接管。 Here's a sample HAProxy setup 使用 AWS ELB 让外部用户访问节点。大多数人不建议通过 NodePort 运行服务,因为 Kubernetes 提供了提供更多集成的替代方法。

    负载平衡器

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

    入口

    如果您在本地运行 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'
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我能否确保我始终使用这种方法获得相同的 IP? (我的意思是,在yaml文件中指定IP,所以如果我需要删除服务并重新创建它,IP不会改变)
      • 再次回到这个选项,如果我理解正确的话,使用 hostNetwork: true 将允许我创建一个直接将端口 80/443 暴露给外部节点 IP 的 pod。那是对的吗?谢谢。
      【解决方案3】:

      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
      

      【讨论】:

      • 谢谢。我已经阅读了这些替代方案,但我确实需要使用 HAProxy...所以需要的帮助是关于在 IBM Cloud 中使用端口 80 和 443 以及静态 IP 公开 HAProxy Docker 的最简单方法。
      • 我能否确保我始终使用这种方法获得相同的 IP? (我的意思是,在yaml文件中指定IP,所以如果我需要删除服务并重新创建它,IP不会改变)
      • 是的,此链接中的文档:console.bluemix.net/docs/containers/… 提供了有关如何使用 loadBalancerIP 字段来指定子网中的 IP 的说明。使用带 HAProxy 的负载平衡器可能是多余的,但这是一种获取分配给应用程序的 IP 并将其公开到公共 Internet 的方法。
      • 在这种情况下你用 haproxy 做什么?
      • 因为有一些来自 IBM Cloud 的服务,我需要从 IBM Cloud 前端代理。这就是为什么我不能使用典型的前端/暴露方法。
      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 2018-09-11
      • 2018-09-11
      • 2018-09-17
      相关资源
      最近更新 更多