Kubernetes Engine集群节点外网IP
External IP of nodes in cluster of Kubernetes Engine
如果集群升级或失败,集群中的3个工作节点将被删除并重新创建。这时候暴露在外面的节点IP就变了。解决这个问题,请问有没有办法即使我新建一个节点也能保留IP?
TL;DR
您不能将静态 IP 分配给 GKE
节点并期望它在“重新创建”后保持不变。
如果节点出现故障或节点升级,它将使用新 IP 重新创建(之前的静态 IP 将保持未使用状态)。
您可以创建一个 GKE
节点,然后将您的 Ephemeral
IP 提升为 Static
IP,但在节点 failure/upgrade 之后,它将从资源中释放( GKE
节点)。
请看下面的更多解释。
我将这部分分为两部分:
- 入口流量
- 出口流量
入口流量(流量进入集群)
您不必担心 GKE
节点的 External
IP 更改,因为暴露的工作负载应该使用:
Service
类型 LoadBalancer
创建 L4
LoadBalancer(有自己的 IP)指向所有节点(如果节点发生故障,流量将被发送到另一个)
Ingress
创建指向所有节点的 L7 HTTP/HTTPS
负载均衡器(具有自己的 IP)。 (如果一个节点发生故障,流量将被发送到另一个节点)
GKE
中关于 Services
的文档:
有一个选项可以使用 NodePort
类型的 Service
公开您的工作负载,但需要指出的是,这仍然是单点故障。对于 LoadBalancer
类型的 Service
,流量有很多路径可供选择(节点可供选择)。 NodePort
以防节点故障,您的 app/software 将不可用。
出口流量(来自集群 out 的流量)
如果您担心从集群流出的流量将发往某些特定的白名单服务(例如其他位置的 DB
),您可以使用 Cloud NAT
:
Cloud NAT overview
Cloud NAT (network address translation) lets Google Cloud virtual machine (VM) instances without external IP addresses and private Google Kubernetes Engine (GKE) clusters send outbound packets to the internet and receive any corresponding established inbound response packets.
通过这种方法,您可以创建一个 private GKE cluster。您的节点将只有一个内部 IP 地址。然后,您可以配置前面提到的 Cloud NAT,以便节点通过 Cloud Router 路由数据包。您的所有节点都将在 Internet 上从同一个静态 IP 可见,该静态 IP 在任何节点故障的情况下都不会改变。
这里有一个示例设置:
从节点故障和节点升级的角度,建议大家查看官方文档:
- Cloud.google.com: Kubernetes Engine: Docs: Concepts: Cluster upgrades
- Cloud.google.com: Kubernetes Engine: Docs: Concepts: How to: Upgrading a cluster
您还可以看看:
如果集群升级或失败,集群中的3个工作节点将被删除并重新创建。这时候暴露在外面的节点IP就变了。解决这个问题,请问有没有办法即使我新建一个节点也能保留IP?
TL;DR
您不能将静态 IP 分配给 GKE
节点并期望它在“重新创建”后保持不变。
如果节点出现故障或节点升级,它将使用新 IP 重新创建(之前的静态 IP 将保持未使用状态)。
您可以创建一个 GKE
节点,然后将您的 Ephemeral
IP 提升为 Static
IP,但在节点 failure/upgrade 之后,它将从资源中释放( GKE
节点)。
请看下面的更多解释。
我将这部分分为两部分:
- 入口流量
- 出口流量
入口流量(流量进入集群)
您不必担心 GKE
节点的 External
IP 更改,因为暴露的工作负载应该使用:
Service
类型LoadBalancer
创建L4
LoadBalancer(有自己的 IP)指向所有节点(如果节点发生故障,流量将被发送到另一个)Ingress
创建指向所有节点的L7 HTTP/HTTPS
负载均衡器(具有自己的 IP)。 (如果一个节点发生故障,流量将被发送到另一个节点)
GKE
中关于 Services
的文档:
有一个选项可以使用 NodePort
类型的 Service
公开您的工作负载,但需要指出的是,这仍然是单点故障。对于 LoadBalancer
类型的 Service
,流量有很多路径可供选择(节点可供选择)。 NodePort
以防节点故障,您的 app/software 将不可用。
出口流量(来自集群 out 的流量)
如果您担心从集群流出的流量将发往某些特定的白名单服务(例如其他位置的 DB
),您可以使用 Cloud NAT
:
Cloud NAT overview
Cloud NAT (network address translation) lets Google Cloud virtual machine (VM) instances without external IP addresses and private Google Kubernetes Engine (GKE) clusters send outbound packets to the internet and receive any corresponding established inbound response packets.
通过这种方法,您可以创建一个 private GKE cluster。您的节点将只有一个内部 IP 地址。然后,您可以配置前面提到的 Cloud NAT,以便节点通过 Cloud Router 路由数据包。您的所有节点都将在 Internet 上从同一个静态 IP 可见,该静态 IP 在任何节点故障的情况下都不会改变。
这里有一个示例设置:
从节点故障和节点升级的角度,建议大家查看官方文档:
- Cloud.google.com: Kubernetes Engine: Docs: Concepts: Cluster upgrades
- Cloud.google.com: Kubernetes Engine: Docs: Concepts: How to: Upgrading a cluster
您还可以看看: