【问题标题】:Kubernetes External Load Balancer Service on DigitalOceanDigitalOcean 上的 Kubernetes 外部负载均衡器服务
【发布时间】:2016-06-23 10:01:27
【问题描述】:

我正在 DigitalOcean 上使用 CoreOs 和 Kubernetes 构建一个容器集群,我发现为了向世界公开 Pod,您必须创建一个类型为 LoadBalancer 的服务。我认为这是最佳解决方案,因此您无需在 nginx 或 haproxy 等 kubernetes 之外添加外部负载均衡器。我想知道是否可以使用 DO 的浮动 IP 创建它。

【问题讨论】:

    标签: kubernetes digital-ocean coreos


    【解决方案1】:

    情况发生了变化,DigitalOcean 创建了他们自己的云提供商实现,如回答 here,他们正在维护一个 Kubernetes“Cloud Controller Manager”实现:

    Kubernetes Cloud Controller Manager for DigitalOcean

    目前 digitalocean-cloud-controller-manager 实现:

    • nodecontroller - 使用云提供商特定标签和更新节点 地址,在云上删除时也会删除 kubernetes 节点 提供者。

    • servicecontroller - 负责创建 LoadBalancers 当在 Kubernetes 中创建类型为 LoadBalancer 的服务时

    要试用它,请在您的主节点上克隆项目。

    接下来从https://cloud.digitalocean.com/settings/api/tokens获取令牌密钥并运行:

    export DIGITALOCEAN_ACCESS_TOKEN=abc123abc123abc123
    scripts/generate-secret.sh
    kubectl apply -f do-cloud-controller-manager/releases/v0.1.6.yml
    

    还有更多例子here

    完成上述操作后会发生什么? DO 的云管理器将创建一个负载均衡器(具有开箱即用的故障转移机制,更多关于它in the load balancer's documentation

    随着 DigitalOcean 加入 Kubernetes 的潮流,情况将再次发生变化,请查看 here,您将可以选择让他们管理您的 Kuberentes 集群,而不必担心很多基础设施(这是我对服务,让我们看看它何时可用......)

    【讨论】:

      【解决方案2】:

      LoadBalancer 类型的服务是通过将代码添加到特定于每个云提供商的 kubernetes master 来实现的。 Digital Ocean 没有云提供商 (supported cloud providers),因此 LoadBalancer 类型将无法利用 Digital Ocean 的浮动 IP。

      相反,您应该考虑使用NodePort service 或将ExternalIP 附加到您的服务并将公开的IP 映射到DO 浮动IP。

      【讨论】:

      • 那么这是否意味着我必须在 kubernetes 集群之外创建一个外部负载均衡器?
      • NodePorts 旨在与集群外部的负载均衡器一起使用。负载均衡器类型有助于在支持的云平台上自动配置外部负载均衡器。由于看起来 Digital Ocean 可能不提供负载均衡器,您还可以查看使用 ExternalIPs 并将暴露的 IP 映射到 DO 浮动 IP。
      • 您可以使用 NGINX 入口控制器并将 DigitalOcean LB 指向部署控制器的主机。通过更多的修补,您可能会使其成为一个高度可用的设置。参考:github.com/hobby-kube/guide#bringing-traffic-to-the-cluster
      【解决方案3】:

      实际上可以通过浮动ip暴露服务。唯一的问题是您需要使用的外部 IP 有点不直观。

      看起来 DO 为其浮动 IP 服务提供了某种覆盖网络。要获得您需要公开的实际 IP,您需要通过 ssh 进入您的网关 droplet 并通过访问元数据服务找到其锚 IP:

      curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address
      

      你会得到类似的东西

      10.x.x.x
      

      这是您可以在 kubernetes 的 LoadBalancer 类型服务中用作外部 ip 的地址。

      示例:

      kubectl expose rc my-nginx --port=80 --public-ip=10.x.x.x --type=LoadBalancer
      

      【讨论】:

      • 我在 k8s 1.5.2 中收到“错误:未知标志:--public-ip”
      猜你喜欢
      • 2019-05-27
      • 2019-07-04
      • 2022-10-23
      • 1970-01-01
      • 2016-12-30
      • 2020-06-02
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多