繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM