首页 文章

在IBM Cloud Kubernetes中公开HAProxy(端口80)Docker的最简单方法

提问于
浏览
0

我需要将运行HAProxy的Docker部署到IBM Cloud(Bluemix)Kubernetes服务中,该Docker已经在内置docker上工作 . 我对如何暴露80和443感到有些迷茫 . 在简单的简单码头工具中,它非常简单但在Kubernetes或者至少在IBM Cloud中看起来很复杂 . 我不需要负载 balancer ,虚拟主机或任何额外的配置,因为HAProxy将负责它 . 只需复制(移动)我的内部运行HAProxy将端口80和443暴露为bluemix . (由于多种原因,我想使用HAproxy,因此这里的请求非常具体:在IBM Cloud Kubernetes服务中将HAProxy端口443和80暴露给永久IP地址的最简单方法 .

我可以有一个基本的例子yaml kubectl文件吗?谢谢

3 回答

  • 1

    NodePort

    要在两个环境中保持相同的映像运行,您可以为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

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

    Ingress

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

    IBM Cloud为负载均衡器和Ingress提供了内置解决方案 . 文档包括两者的样本YAML .

    负载均衡器:https://console.bluemix.net/docs/containers/cs_loadbalancer.html#loadbalancer

    Ingress:https://console.bluemix.net/docs/containers/cs_ingress.html#ingress

    如果您需要终止或想要使用路由而不是IP地址来访问您的HAProxy,那么Ingress将是最佳选择 . 如果这些选项无关紧要,那么我建议从提供的负载均衡器开始,看看它是否符合您的需求 .

    请注意,负载均衡器和Ingress都需要付费群集 . 对于精简集群,只有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
    
  • 0

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

相关问题