【问题标题】:Google Cloud deployment and Kubernetes node IP address changeGoogle Cloud 部署和 Kubernetes 节点 IP 地址更改
【发布时间】:2019-02-28 17:04:58
【问题描述】:

我们的数据库已经在 Google 云中的 Kubernetes 集群(部署到我们的专用网络)上运行了几个月。上周我们注意到,由于某种原因,所有底层节点 (VM) 的 IP 地址都发生了变化。这导致了中断。我们一直在使用 Kubernetes 的 NodePort 配置来为我们的服务访问我们的数据库 (https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)。 我们知道 VM 中的 Pod 的 IP 地址是动态的,并且最终会发生变化,但是我们不知道实际节点(VM)的 IP 地址也可能会发生变化。这是正常的吗?有谁知道什么会导致 Kubernetes 集群中的虚拟机 IP 地址发生变化?

【问题讨论】:

    标签: kubernetes ip-address


    【解决方案1】:

    来自 GCP 上有关 Ephemeral IP Addresses 的文档,

    当您创建实例或转发规则但未指定 IP 地址,资源被自动分配一个临时的 外部 IP 地址。临时外部 IP 地址从 资源,如果您删除资源。对于 VM 实例,如果您停止 例如,IP 地址也被释放。一旦你重新启动 例如,它被分配了一个新的临时外部 IP 地址。

    您可以为实例分配静态外部 IP 地址,但正如 @Notauser 所提到的,不建议将它用于 Kubernetes 节点。这是因为您可以为您的实例组配置自动缩放器,并且可以最小化或最大化节点大小。 此外,您需要为每个节点保留一个静态 IP 地址,不建议这样做。此外,您将浪费静态 IP 地址资源,如果不使用保留的静态 IP 地址,您仍然需要为此付费。

    否则,您可以configure HTTP loadbalancer using ingress,然后为您的负载均衡器保留一个静态 IP 地址。您应该使用 ClusterIP 类型的服务,而不是使用 NodePort,并创建一个将流量转发到这些服务的入口规则。

    【讨论】:

    • 谢谢 Coolinuxoid 和 Notauser。根据我们的理解,我们可以选择 NodePort 或 LoadBalancer 作为主要的两种服务类型,我们可以将其用于集群外需要访问集群中服务的客户端。我们没有使用 LoadBalancer,因为在我们的例子中,客户端库将进行负载平衡,并且需要了解集群中的所有节点。你知道 LoadBalancer 服务是否真的会做任何负载平衡(例如:循环)?
    【解决方案2】:

    如果您使用的是托管 Kubernetes Engine (GKE) 集群,这是正常的,因为节点是致命的,并且可能会在它变得无响应时被替换或重新启动。因此节点的 IP 会改变。目前无法为节点分配静态(固定)公共 IP。在这种情况下,您应该将您的数据库服务公开为集群 IP。它将具有不变的静态 IP。这是an example 说明如何做到这一点。

    或者,如果您在 Compute Engine (GCE) 中使用非托管 kubernetes 集群,则只需 promote your nodes IP's to static。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-22
      • 2017-11-04
      • 1970-01-01
      • 2020-10-10
      • 2021-06-07
      • 2021-11-12
      • 2018-07-10
      • 1970-01-01
      相关资源
      最近更新 更多