【问题标题】:Assign an External IP to a Node为节点分配外部 IP
【发布时间】:2018-11-17 03:04:56
【问题描述】:

我正在运行一个裸机 Kubernetes 集群并尝试使用负载均衡器来公开我的服务。我通常知道负载均衡器是底层公共云的一个功能,但是随着最近对 Ingress Controller 的支持,现在似乎应该可以使用 nginx 作为自托管负载均衡器了。

到目前为止,我一直在按照示例 here 设置一个 nginx 入口控制器和它背后的一些测试服务。但是,我无法执行第 6 步,该步骤显示运行负载均衡器的节点的外部 IP,因为我的节点在地址部分没有 ExternalIP,只有 LegacyHostIP 和 InternalIP。

我已尝试通过在服务规范中指定 ExternalIP 手动将其分配给我的集群。但是,这似乎被映射为 externalID。

如何手动设置节点的 ExternalIP 地址?

【问题讨论】:

  • 我想我可能已经想通了。通过将我的复制控制器绑定到服务并公开它,nginx 负载均衡器就可以工作了。我将暂时保留这个问题,但如果有人可以评论这是否是建议的解决方法。

标签: kubernetes


【解决方案1】:

这是经过测试并适用于在特定节点上创建的 nginx 服务的东西。

apiVersion: v1
kind: Service
metadata:
    name: nginx
    namespace: default
spec:
    ports:
    -   port: 80
        protocol: TCP
        targetPort: 80
        name: http
    -   port: 443
        protocol: TCP
        targetPort: 443
        name: https
    externalIPs:
      - '{{external_ip}}'
    selector:
        app: nginx

假设 nginx 部署上游监听端口 80、443。 externalIP是节点的公网IP。

【讨论】:

  • 您能解释一下 external_ip 的模板值的来源吗?这几乎是我最终为我的 nginx Ingress RC 创建的服务定义,但我已经硬编码了外部 IP。
  • 如果我在 DigitalOcean 上设置一个节点,那么它就是我放在那里的节点的公共 IP。因此,当我配置系统时,我会获取外部 IP,然后编译 nginx 模板,然后运行 ​​create-service。
  • 经过一番挖掘,我发现外部和内部 IP 由运行 Kubernetes 的特定云决定。支持因云而异,例如 [github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/… 适用于 Google Compute Engine 的那个)(搜索 ExternalIP 以查看它从何处获取数据)。由于它依赖于各个云提供商,因此支持似乎是高度可变的。
  • @KingJ 我也在尝试同一个博客,但没有运气,我也没有获得外部 IP。我在私有数据中心运行 Kubernetes 集群。如果您找到任何解决方案,请分享?
  • @VaibhavJain 外部 IP 仅分配给某些云提供商。如果您在自己的基础架构上运行它(例如您所说的私有数据中心),您将不会获得外部 IP。
【解决方案2】:

我建议查看 MetalLB:https://github.com/google/metallb

它允许使用 ARP 或 BGP 在裸机集群中使用外部 IP 地址。它对我们非常有用,让您可以像在云中一样简单地请求 LoadBalancer 服务。

【讨论】:

  • 我已将此标记为已接受的答案,因为尽管它需要在 Kubernetes 上安装一些额外的东西,但它确实允许在裸机环境中分配外部 IP。谢谢你的提示 - 非常有趣的项目,我想我会在我的下一个 K8S 构建中使用它!
猜你喜欢
  • 2023-03-06
  • 2019-01-14
  • 2018-06-19
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多