【问题标题】:Kubernetes Service LoadBalancer "EXTERNAL-IP" remains "<none>" instead of taking worker nodes public IP addressesKubernetes Service LoadBalancer "EXTERNAL-IP" 保持为 "<none>" 而不是使用工作节点公共 IP 地址
【发布时间】:2019-12-12 12:49:13
【问题描述】:

我有 5 个 VPS,每个 VPS 都有一个公共网络接口,我为此配置了一个 VPN。

  • 3 个节点是 Kubernetes 主节点,我已将 Kubelet --node-ip 标志设置为它们的私有 IP 地址。
  • 3 个节点中的一个节点有一个用于 Kubernetes 主节点的 HAProxy 负载均衡器,监听私有 IP,因此所有节点都使用负载均衡器的私有 IP 地址来加入集群。
  • 2 个节点是 Kubernetes 工作人员,我没有设置 Kubelet --node-ip 标志,因此它们的节点 IP 是公共地址。

集群运行良好,我已经部署了我的应用程序及其依赖项。

现在我想从 Internet 访问应用程序,所以我部署了一个边缘路由器并创建了一个类型为 LoadBalancer 的 Kubernetes 服务。

服务创建良好,但从不将工作节点的公共 IP 地址作为EXTERNAL-IP

手动分配 IP 地址是可行的,但显然希望自动分配。

我已经阅读了有关 the MetalLb project 的信息,但它似乎不适合我的情况,因为它应该有一系列 IP 地址来分发,而这里我每个节点都有一个公共 IP 地址,而不是范围相同。

那么我可以配置 Kubernetes 以便我的 LoadBalancer 类型的服务自动获取公共 IP 地址为EXTERNAL-IP

【问题讨论】:

    标签: kubernetes vpn kubernetes-networking


    【解决方案1】:

    我终于可以分两次回答自己了。

    没有外部负载均衡器

    首先,为了解决我的问题,我发现唯一有效的方法是将我的LoadBalancer服务的externalIPs设置为Kubernetes工作节点的IP地址。

    那些节点正在运行 Traefik,因此它在端口 80 和 443 上进行监听。

    之后,我创建了与 Kubernetes 工作节点一样多的 A DNS 条目,将每个条目指向 Kubernetes 各自的工作节点公共 IP 地址。此设置使 DNS 服务器以随机顺序返回 IP 地址列表,然后 Web 浏览器将负责尝试第一个 IP 地址,如果第一个 IP 地址关闭,则尝试第二个,依此类推。

    这样做的缺点是,当您想要耗尽节点进行维护时,或者当它崩溃时,网络浏览器将浪费时间尝试访问它,直到它尝试下一个 IP 地址。

    所以出现了第二个选项:外部负载均衡器。

    使用外部负载平衡器

    我在另一个 VPS 上安装了 HAproxy 并配置了 Kubernetes API 端口的 SSL 直通,以便它对主节点的流量进行负载均衡,而不会终止它。

    使用此解决方案,我从 Service 中删除了 externalIPs 字段,并安装了 MetalLB,并使用此清单配置了单个 IP 地址:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      namespace: metallb-system
      name: config
    data:
      config: |
        address-pools:
        - name: staging-public-ips
          protocol: layer2
          addresses:
          - 1.2.3.4/32
    

    LoadBalancer Service 创建时,MetalLB 会分配这个 IP 地址并相应地调用 Kubernetes API。

    这已经解决了my issue to integrate my Kubernetes cluster with Gitlab

    警告:MetalLB 将分配一次 IP 地址,因此如果您有第二个LoadBalancer Service,它将永远保持在Pending 状态, 直到你给 MetalLB 一个新的 IP 地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多