控制层面 IP 轮替

本页面介绍如何在 Google Kubernetes Engine 中为您的控制层面执行 IP 地址轮替。

概览

如需更改集群的 Kubernetes 主实例用于处理来自 Kubernetes API 的请求的 IP 地址,您可以执行 IP 轮替

IP 地址轮替还会更改 SSL 证书和集群证书授权机构,从而限制先前地址与新地址的连接。

准备工作

在开始之前,请确保您已执行以下任务:

使用以下任一方法设定默认的 gcloud 设置:

  • 使用 gcloud init(如果您想要在系统引导下完成默认设置)。
  • 使用 gcloud config(如果您想单独设置项目 ID、区域和地区)。

使用 gcloud init

如果您收到 One of [--zone, --region] must be supplied: Please specify location 错误,请完成本部分。

  1. 运行 gcloud init 并按照说明操作:

    gcloud init

    如果您要在远程服务器上使用 SSH,请使用 --console-only 标志来防止命令启动浏览器:

    gcloud init --console-only
  2. 按照说明授权 gcloud 使用您的 Google Cloud 帐号。
  3. 创建新配置或选择现有配置。
  4. 选择 Google Cloud 项目。
  5. 选择默认的 Compute Engine 区域。

使用 gcloud config

  • 设置默认项目 ID
    gcloud config set project project-id
  • 如果您使用的是区域级集群,请设置默认计算区域
    gcloud config set compute/zone compute-zone
  • 如果您使用的是地区级集群,请设置默认计算地区
    gcloud config set compute/region compute-region
  • gcloud 更新到最新版本:
    gcloud components update

IP 轮替的工作原理

IP 轮替涉及多个步骤:

  • 当您启动 IP 轮替时,除了原始 IP 地址以外,集群主实例还会开始通过新 IP 地址提供服务。
  • 启动轮替后,您必须更新集群的 API 客户端(例如使用 kubectl 命令行界面的开发机器)才能开始通过新 IP 地址与主实例通信。
  • 完成轮替后,主实例便会停止通过旧 IP 地址处理流量。

执行 IP 轮替

以下部分介绍了如何执行 IP 轮替。

启动轮替

要启动 IP 轮替,请运行以下命令:

gcloud container clusters update [CLUSTER_NAME] --start-ip-rotation

其中,[CLUSTER_NAME] 是集群的名称

此命令会将集群主实例配置为通过两个 IP 地址(即其原始地址和新地址)提供服务。这会导致集群 API 的短暂停机。

该命令返回以下输出:


This will start an IP Rotation on cluster [CLUSTER-NAME].
The master will be updated to serve on a new IP address in addition to
the current IP address. GKE will then recreate all
nodes to point to the new IP address. This operation is
long-running and will block other operations on the cluster (including
delete) until it has run to completion.
Do you want to continue (Y/n)?

确认后,将 shell 保持为打开状态,直到操作完成为止。

重新配置完主实例后,GKE 会自动更新集群的节点,从而使用新的 IP 地址。每个节点池都会标记为“需要重新创建”。只有在自动重新创建完成之后,GKE 才会结束 IP 轮替。

检查轮替

要监控更新操作,请运行以下命令:

gcloud container operations list --filter="UPGRADE_NODES RUNNING"

此命令返回更新操作的操作 ID

要轮询操作,请将操作 ID 传递给以下命令:

gcloud container operations wait [OPERATION_ID]

节点池会逐一重新创建,并且每个节点池都有自己的操作。如果您有多个节点池,则可以使用上述说明轮询每个操作。

更新 API 客户端

启动 IP 轮替后,您必须更新集群外的所有 API 客户端(例如开发者机器上的 kubectl)以指向新地址。

如需更新 API 客户端,请为每个客户端运行以下命令:

gcloud container clusters get-credentials [CLUSTER_NAME]

完成轮替

要完成轮替,请运行以下命令:

gcloud container clusters update [CLUSTER_NAME] --complete-ip-rotation

该命令返回以下输出:

This will complete the in-progress IP Rotation on cluster [CLUSTER_NAME].
The master will be updated to stop serving on the old IP address and only
serve on the new IP address. Make sure all API clients have been updated
to communicate with the new IP address (e.g. by running `gcloud container
clusters get-credentials --project [PROJECT-ID] --zone [COMPUTE-ZONE]
[CLUSTER-NAME]`). This operation is long-running and will
block other operations on the cluster (including delete) until it has
run to completion.

该命令会将集群主实例配置为仅通过其新 IP 地址提供服务。这会导致集群 API 短暂停机。

后续步骤