使用 Seesaw 进行捆绑式负载均衡

GKE on VMware 可在以下三种负载均衡模式之一中运行:集成手动或捆绑式。本文档介绍了如何配置 GKE on VMware 以在捆绑式模式下运行 Seesaw 负载均衡器

此处为完整说明。如需简要了解如何使用 Seesaw 负载均衡器,请参阅 Seesaw 负载均衡器(快速入门)

在捆绑式负载均衡模式下,GKE on VMware 提供并管理负载均衡器。您无需获得负载均衡器许可,并且只需执行最基本的设置步骤。

本文档介绍如何为管理员集群和一个关联的用户集群配置 Seesaw 负载均衡器。您可以在单个虚拟机上运行 Seesaw 负载均衡器,也可以在使用两个虚拟机的高可用性 (HA) 模式下运行负载均衡器。在高可用性模式下,Seesaw 负载均衡器使用虚拟路由器冗余协议 (VRRP)。这两个虚拟机称为主虚拟机和备用虚拟机。每个 Seesaw 虚拟机都会获得您选择的虚拟路由器标识符 (VRID)

Seesaw 配置示例

以下是以高可用性模式运行 Seesaw 负载均衡器的集群的配置示例:

高可用性模式的 Seesaw 负载均衡器配置。
高可用性模式的 Seesaw 负载均衡器配置(点击可放大)

上图显示了管理员集群和用户集群的两个 Seesaw 虚拟机。在此示例中,管理员集群和用户集群位于两个不同的 VLAN 中,每个集群位于单独的子网中:

集群 子网
管理员集群 172.16.20.0/24
用户集群 172.16.40.0/24

admin-cluster.yaml

管理员集群配置文件的以下示例显示了上图中显示的以下配置:

  • 为管理员集群提供服务的 Seesaw 虚拟机对的主 IP 地址。

  • 为管理员集群的 Kubernetes API 服务器指定的 VIP。

  • 为管理员集群中的 Prometheus 和 Grafana 插件指定的 VIP。用户集群使用此 VIP 地址与管理员集群进行指标通信。

network:
  hostConfig:
  ...

  ipMode:
    type: "static"
    ipBlockFilePath: "config-folder/admin-cluster-ipblock.yaml"
...

loadBalancer:
  seesaw:
    ipBlockFilePath: "config-folder/admin-seesaw-ipblock.yaml"
    masterIP: 172.16.20.57
  ...

  vips:
    controlPlaneVIP: "172.16.20.70"
    addonsVIP: "172.16.20.71"

admin-cluster-ipblock.yaml

以下示例 IP 地址块文件显示管理员集群中节点的 IP 地址指定。它还包括用户集群控制层面节点的地址以及集群升级期间使用的 IP 地址。

blocks:
- netmask: "255.255.255.0"
  gateway: "17.16.20.1"
  ips:
  - ip: 172.16.20.50
    hostname: admin-vm-1
  - ip: 172.16.20.51
    hostname: admin-vm-2
  - ip: 172.16.20.52
    hostname: admin-vm-3
  - ip: 172.16.20.53
    hostname: admin-vm-4
  - ip: 172.16.20.54
    hostname: admin-vm-5

admin-seesaw-ipblock.yaml

下面是另一个 IP 地址块文件的示例,该文件为服务管理员集群的 Seesaw 虚拟机指定了两个 IP 地址。请注意,这是用于负载均衡器虚拟机而不是集群节点的单独 IP 地址块文件。

blocks:
  - netmask: "255.255.255.0"
    gateway: "172.16.20.1"
    ips:
    - ip: "172.16.20.60"
      hostname: "admin-seesaw-vm-1"
    - ip: "172.16.20.61"
      hostname: "admin-seesaw-vm-2"

user-cluster.yaml

以下示例用户集群配置文件显示了以下配置:

  • 为用户集群提供服务的 Seesaw 虚拟机对的主 IP 地址。

  • 为用户集群中的 Kubernetes API 服务器和入站流量服务指定的 VIP 地址。由于用户集群的控制平面在管理员集群的节点上运行,因此 Kubernetes API 服务器 VIP 地址在管理员集群子网上。

network:
  hostConfig:
  ...

  ipMode:
    type: "static"
    ipBlockFilePath: "config-folder/user-cluster-ipblock.yaml"
...

loadBalancer:
  seesaw:
    ipBlockFilePath: "config-folder/user-seesaw-ipblock.yaml"
    masterIP: 172.16.40.31
  ...

  vips:
    controlPlaneVIP: "172.16.20.72"
    ingressVIP: "172.16.40.100"

user-cluster-ipblock.yaml

以下示例 IP 地址块文件显示用户集群中节点的 IP 地址指定。这包括要在集群升级期间使用的 IP 地址。

blocks:
- netmask: "255.255.255.0"
  gateway: "17.16.40.1"
  ips:
  - ip: 172.16.40.21
    hostname: user-vm-1
  - ip: 172.16.40.22
    hostname: user-vm-2
  - ip: 172.16.40.23
    hostname: user-vm-3
  - ip: 172.16.40.24
    hostname: user-vm-4
  - ip: 172.16.40.25
    hostname: user-vm-5

user-seesaw-ipblock.yaml

下面是另一个 IP 地址块文件的示例,该文件为服务用户集群的 Seesaw 虚拟机指定了两个 IP 地址。

blocks:
  - netmask: "255.255.255.0"
    gateway: "172.16.40.1"
    ips:
    - ip: "172.16.40.29"
      hostname: "user-seesaw-vm-1"
    - ip: "172.16.40.30"
      hostname: "user-seesaw-vm-2"

端口组

下表介绍了每个 Seesaw 虚拟机的网络接口配置及其连接的端口组,如上图所示。

Seesaw 虚拟机 网络接口 网络接口配置 连接的端口组
主实例 网络接口 1 VIP 负载均衡器
网络接口 2 从 Seesaw 虚拟机的 IP 地址块文件中获取的 IP 地址 集群节点
备份 网络接口 1 无配置 负载均衡器
网络接口 2 从 Seesaw 虚拟机的 IP 地址块文件中获取的 IP 地址 集群节点

集群节点也会连接到集群节点端口组。

如上表所示,管理员集群和用户集群的每个 Seesaw 虚拟机都有两个网络接口。对于每个 Seesaw 虚拟机,这两个网络接口会连接到两个单独的端口组:

  • 负载均衡器端口组

  • 集群节点端口组

集群的两个端口组位于该集群的同一 VLAN 上。

设置 Seesaw 负载均衡器

上图显示了 Seesaw 负载均衡的推荐网络配置。规划自己的配置时,我们强烈建议您在捆绑式负载均衡模式下使用 vSphere 6.7 或更高版本,以及 Virtual Distributed Switch (VDS) 6.6 或更高版本。

如果您愿意,可以使用早期版本,但安装的安全性会降低。本主题的其余部分更详细地介绍了使用 vSphere 6.7+ 和 VDS 6.6+ 的安全优势。

规划 VLAN

使用捆绑式负载均衡模式时,我们强烈建议您将集群置于不同的 VLAN 上。

如果您的管理员集群位于它自己的 VLAN 上,则控制层面流量会与数据层面流量分离开来。这种隔离可防止管理员集群和用户集群控制层面产生意外的配置错误。此类错误可能会导致出现问题,例如由同一 VLAN 中的第 2 层循环导致的广播风暴,或者冲突的 IP 地址消除了数据层面与控制层面之间所需的隔离。

预配虚拟机资源

对于运行 Seesaw 负载均衡器的虚拟机,请根据预期的网络流量预配 CPU 和内存资源。

Seesaw 负载均衡器不属于内存密集型,可以在具有 1 GB 内存的虚拟机中运行。但是,CPU 要求会随着网络数据包速率的增加而提高。

下表显示了预配 Seesaw 虚拟机的存储、CPU 和内存准则。由于数据包速率并非典型的网络性能衡量方式,因此该表还会显示活跃网络连接数上限的准则。这些准则假设虚拟机具有 10 Gbps 链路的环境,并且 CPU 运行容量低于 70%。

当 Seesaw 负载均衡器以高可用性模式运行时,它会使用(主备)对,因此所有流量都流经单个虚拟机。 由于实际用例各不相同,需要根据您的实际流量修改这些准则。监控 CPU 和数据包速率指标,以确定必要的更改。

如果您需要更改 Seesaw 虚拟机的 CPU 和内存,请参阅升级负载均衡器。请注意,您可以保留相同版本的负载均衡器,并更改 CPU 数量和内存分配。

对于小型管理员集群,我们建议使用 2 个 CPU,对于大型管理员集群,我们建议使用 4 个 CPU。

存储 CPU 内存 数据包速率 (pps) 活跃连接数上限
20 GB 1(非生产) 1 GB 25 万 100
20 GB 2 3 GB 45 万 300
20 GB 4 3 GB 85 万 6000
20 GB 6 3 GB 100 万 1 万

预留 VIP 和 IP 地址

VIP

无论您选择哪种负载均衡模式,都必须预留一些虚拟 IP 地址(VIP 地址)以用于负载均衡。这些 VIP 地址允许外部客户端访问您的 Kubernetes API 服务器、入站服务和插件服务。

此外,还要考虑在任何给定时间,用户集群中可能有多少个 LoadBalancer 类型的 Service 处于活跃状态,并为这些 Service 预留足够的 VIP 地址。您稍后创建 LoadBalancer 类型的 Service 时,Anthos clusters on VMware 会自动在负载均衡器上配置 Service VIP 地址。

节点 IP 地址

使用捆绑式负载均衡模式时,您可以为集群节点指定静态 IP 地址,也可以让集群节点从 DHCP 服务器获取其 IP 地址。

如果您希望集群节点具有静态 IP 地址,请为管理员集群中的节点预留足够的地址,并为您要创建的所有用户集群中的节点预留足够的地址。此外,还要为每个集群预留一个额外的 IP 地址,以供集群升级期间使用。如需详细了解预留节点 IP 地址的数量,请参阅创建管理员集群

Seesaw 虚拟机的 IP 地址

接下来,对于每个集群、管理员和用户,请为将运行 Seesaw 负载均衡器的虚拟机预留 IP 地址。您预留的地址数量取决于要创建高可用性 Seesaw 负载均衡衡器还是非高可用性 Seesaw 负载均衡器。

主 IP 地址

除了 Seesaw 虚拟机的 IP 地址之外,还要为每个集群的 Seesaw 虚拟机对预留一个主 IP 地址。

非 HA 配置

如果您的设置是非 HA 配置:

  • 对于管理员集群,请为 Seesaw 虚拟机预留一个 IP 地址,并为 Seesaw 负载均衡器预留一个主 IP 地址。这两个地址都必须与管理员集群节点位于同一 VLAN。

  • 对于用户集群,请为 Seesaw 虚拟机预留一个 IP 地址,并为 Seesaw 负载均衡器预留一个主 IP 地址。这两个地址都必须与用户集群节点位于同一 VLAN。

规划您的端口组

上图介绍了高可用性配置中使用的两个端口组,以及如何将它们连接到 Seesaw 虚拟机上的网络接口。对于单个 Seesaw 虚拟机,请决定是将两个网络接口连接到同一 vSphere 端口组,还是连接到单独的端口组。如果您未启用 MAC 学习,则可以使用一个端口组。如果端口组不同,则必须位于同一 VLAN。

创建 IP 地址块文件

对于每个集群、管理员和用户,请在 IP 地址块文件中指定您为 Seesaw 虚拟机选择的地址。如果您打算为集群节点使用静态 IP 地址,则必须为这些地址创建单独的 IP 地址块文件。

填写配置文件

管理员集群准备一个配置文件,并为用户集群准备另一个配置文件。

在给定集群的配置文件中,将 loadBalancer.kind 设置为 "Seesaw"

loadBalancer 下,填写 seesaw 部分:

loadBalancer:
  kind: Seesaw
  seesaw:

如需了解如何填写集群配置文件的 seesaw 部分,请参阅 loadbalancer.seesaw(管理员集群)loadbalancer.seesaw(用户集群)

在管理员集群配置文件中,指定以下内容:

  • 管理员集群的 Kubernetes API 服务器的 VIP 地址
  • 管理员集群插件的 VIP 地址
  • 为管理员集群提供服务的 Seesaw 虚拟机对的主 IP 地址。

这些 VIP 地址必须位于管理员集群子网上。

在用户集群配置文件中,指定以下内容:

  • 用户集群的 Kubernetes API 服务器的 VIP 地址(必须位于管理员集群子网上)
  • 用户集群中的入站流量 VIP 地址
  • 为用户集群提供服务的 Seesaw 虚拟机对的主 IP 地址。

上述列表中的最后两个地址必须位于用户集群子网上。

启用 MAC 学习或混杂模式(仅限高可用性)

如果您正在设置非 HA Seesaw 负载均衡器,则可以跳过此部分。

如果您已将 loadBalancer.seesaw.disableVRRPMAC 设置为 true,则可以跳过本部分。

如果您正在设置 HA Seesaw 负载均衡器,并且已将 loadBalancer.seesaw.disableVRRPMAC 设置为 false,则必须对负载均衡器端口组启用 MAC 学习、模拟传输和混杂模式的某种组合。

启用这些功能的方式取决于您使用的交换机类型:

交换机类型启用功能安全影响
vSphere 7.0 VDS 对于具有 HA 的 vSphere 7.0,您需要将 loadBalancer.seesaw.disableVRRPMAC 设置为 true。不支持 MAC 学习。
带有 VDS 6.6 的 vSphere 6.7

为负载均衡器启用 MAC 学习和模拟传输的方式是运行以下命令:gkectl prepare network --config [CONFIG_FILE],其中 [CONFIG_FILE] 是集群配置文件的路径。您需要 dvPort group.Modify 权限才能执行此操作。

轻微。如果您的负载均衡器端口组仅连接到 Seesaw 虚拟机,那么可以将 MAC 学习限定为可信的 Seesaw 虚拟机。

vSphere 6.5 或

vSphere 6.7,带有低于 6.6 的 VDS 版本

为您的负载均衡器端口组启用混杂模式和模拟传输。在网络标签页中的端口组页面上使用 vSphere 界面:修改设置 -> 安全 您的负载均衡器端口组上的所有虚拟机都处于混杂模式。因此,负载均衡器端口组上的任何虚拟机都可以看到所有流量。如果负载均衡器端口组仅连接到 Seesaw 虚拟机,那么只有这些虚拟机才能看到所有流量。
NSX-T 逻辑交换机 在逻辑交换机上启用 MAC 学习 vSphere 不支持在同一个第 2 层网域中创建两个逻辑交换机。因此,Seesaw 虚拟机和集群节点必须位于同一逻辑交换机上。这意味着对所有集群节点启用 MAC 学习。攻击者可能能够通过在集群中运行具有特权的 pod 来实现 MAC 仿冒。
vSphere 标准交换机 为您的负载均衡器端口组启用混杂模式和模拟传输。在每个 ESXI 主机上使用 vSphere 界面:配置 -> 虚拟交换机 -> 标准交换机 -> 在端口组上修改设置 -> 安全 您的负载均衡器端口组上的所有虚拟机都处于混杂模式。因此,负载均衡器端口组上的任何虚拟机都可以看到所有流量。如果负载均衡器端口组仅连接到 Seesaw 虚拟机,那么只有这些虚拟机才能看到所有流量。

完成管理员集群配置文件的填写

按照创建管理员集群中的说明完成管理员集群配置文件的填写。

运行预检检查

对管理员集群配置文件运行预检检查:

gkectl check-config --config ADMIN_CLUSTER_CONFIG

ADMIN_CLUSTER_CONFIG 替换为管理员集群配置文件的路径。

上传操作系统映像

将操作系统映像上传到您的 vSphere 环境:

gkectl prepare --config ADMIN_CLUSTER_CONFIG

为管理员集群创建负载均衡器

gkectl create loadbalancer --config [ADMIN_CLUSTER_CONFIG]

创建管理员集群

按照创建管理员集群中的说明创建管理员集群。

完成用户集群配置文件的填写

按照创建用户集群中的说明完成用户集群配置文件的填写。

运行预检检查

对用户集群配置文件运行预检检查:

gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

替换以下内容:

  • ADMIN_CLUSTERE_KUBECONFIG:管理员集群 kubeconfig 文件的路径

  • USER_CLUSTER_CONFIG:用户集群配置文件的路径

上传操作系统映像

将操作系统映像上传到您的 vSphere 环境:

gkectl prepare --config USER_CLUSTER_CONFIG

为用户集群创建负载均衡器

为用户集群创建负载均衡器:

gkectl create loadbalancer --config USER_CLUSTER_CONFIG

创建用户集群

按照创建用户集群中的说明创建用户集群。

性能和负载测试

应用的下载吞吐量与后端数量呈线性比例关系。这是因为后端绕过负载均衡器,而使用直接服务器返回功能直接将响应发送给客户端。

相反,应用的上传吞吐量受限于执行负载均衡的 Seesaw 虚拟机的容量。

应用所需的 CPU 和内存量不尽相同,因此在开始为大量客户端提供服务之前,请务必进行负载测试。

测试表明,通过 10000 个并发 TCP 连接,一个配备有 6 个 CPU 和 3 GB 内存的 Seesaw 虚拟机可以处理 10 GB/秒(线路速率)的上传流量。但是,如果您计划支持大量的并发 TCP 连接,请务必运行您自己的负载测试。

扩缩限制

使用捆绑式负载均衡时,集群可以扩缩的程度存在限制。集群中的节点数量存在限制,并且负载均衡器上可配置的 Service 数量存在限制。健康检查也存在限制。健康检查的数量取决于节点数量和 Service 数量。

从 1.3.1 版开始,健康检查的数量取决于节点数量和本地流量 Service 的数量。本地流量 Service 是 externalTrafficPolicy 设置为 "Local" 的 Service。

1.3.0 版1.3.1 版和更高版本
最大 Service 数 (S)100500
最大节点数 (N)100100
最大健康检查数S * N <= 10000N + L * N <= 10000,其中 L 是本地流量 Service 的数量

示例:在 1.3.1 版中,假设您有 100 个节点和 99 个本地流量 Service。则健康检查数为 100 + 99 * 100 = 10000,不超过 10000 的限制。

升级集群的负载均衡器

升级集群时,负载均衡器会自动升级。您无需运行单独的命令来升级负载均衡器。 如果您的负载均衡器处于高可用性模式,则 GKE on VMware 会以滚动方式重新创建负载均衡器虚拟机。为防止升级期间服务中断,集群会在创建新虚拟机之前启动故障切换。

如果您愿意,可以更新 Seesaw 虚拟机的 CPU 或内存,而无需执行完全升级。首先修改集群配置文件中的 cpusmemoryMB 值。例如:

apiVersion: v1
bundlePath:
loadBalancer:
  kind: Seesaw
  seesaw:
    cpus: 3
    memoryMB: 3072

然后,要更新管理员集群的负载均衡器,请运行以下命令:

gkectl upgrade loadbalancer --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config ADMIN_CLUSTER_CONFIG --admin-cluster
要更新用户集群的负载均衡器,请运行以下命令:
gkectl upgrade loadbalancer --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config USER_CLUSTER_CONFIG

替换以下内容:

  • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径

  • ADMIN_CLUSTER_CONFIG:管理员集群配置文件的路径

  • USER_CLUSTER_CONFIG:用户集群配置文件的路径

查看 Seesaw 日志

Seesaw 捆绑式负载均衡器将日志文件存储在 /var/log/seesaw/ 中的 Seesaw 虚拟机上。最重要的日志文件是 seesaw_engine.INFO

从 v1.6 开始,如果启用了 Stackdriver,日志也会上传到 Cloud。您可以在资源“anthos_l4lb”下查看这些日志。如需停用日志上传功能,您可以通过 ssh 连接到虚拟机并运行以下命令:

sudo systemctl disable --now docker.fluent-bit.service

查看 Seesaw 虚拟机的相关信息

您可以从 SeesawGroup 自定义资源中获取集群的 Seesaw 虚拟机的相关信息。

查看集群的 SeesawGroup 自定义资源:

kubectl --kubeconfig CLUSTER_KUBECONFIG get seesawgroups -n kube-system -o yaml

CLUSTER_KUBECONFIG 替换为集群 kubeconfig 文件的路径。

输出具有 isReady 字段,该字段显示虚拟机是否已准备好处理流量。输出还会显示 Seesaw 虚拟机的名称和 IP 地址,以及哪个虚拟机是主虚拟机:

apiVersion: seesaw.gke.io/v1alpha1
kind: SeesawGroup
metadata:
  ...
  name: seesaw-for-cluster-1
  namespace: kube-system
  ...
spec: {}
status:
  machines:
  - hostname: cluster-1-seesaw-1
    ip: 172.16.20.18
    isReady: true
    lastCheckTime: "2020-02-25T00:47:37Z"
    role: Master
  - hostname: cluster-1-seesaw-2
    ip: 172.16.20.19
    isReady: true
    lastCheckTime: "2020-02-25T00:47:37Z"
    role: Backup

查看 Seesaw 指标

Seesaw 捆绑式负载均衡器提供以下指标:

  • 每个 Service 或节点的吞吐量
  • 每个 Service 或节点的数据包速率
  • 每个 Service 或节点的有效连接数
  • CPU 和内存用量
  • 每个 Service 的后端 pod(运行状况良好)数量
  • 哪个虚拟机是主虚拟机,以及哪个是备用虚拟机
  • 正常运行时间

从 v1.6 开始,这些指标通过 Stackdriver 上传到 Cloud。您可以在“anthos_l4lb”的监控资源下查看它们。

您还可以使用选择的任何监控和信息中心解决方案,只要这些解决方案支持 Prometheus 格式即可。

删除负载均衡器

如果您删除了使用捆绑式负载均衡的集群,则应删除该集群的 Seesaw 虚拟机。可以通过在 vSphere 界面中删除 Seesaw 虚拟机来执行此操作。

或者,您也可以运行 gkectl delete loadbalancer

对于管理员集群:

gkectl delete loadbalancer --config ADMIN_CLUSTER_CONFIG --seesaw-group-file GROUP_FILE

对于用户集群:

gkectl delete loadbalancer  --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG \
    --seesaw-group-file GROUP_FILE

替换以下内容:

  • ADMIN_CLUSTER_CONFIG:管理员集群配置文件的路径

  • USER_CLUSTER_CONFIG:用户集群配置文件的路径

  • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径

  • GROUP_FILE:Seesaw 群组文件的路径。群组文件的名称采用这种形式
    seesaw-for-CLUSTER_NAME-IDENTIFIER.yaml
    例如:seesaw-for-gke-admin-12345.yaml

配置无状态 NSX-T 分布式防火墙政策,以便与 Seesaw 负载均衡器一起使用

如果您的配置使用有状态 NSX-T 分布式防火墙,并且您还想要使用 Seesaw 负载均衡器,则可以使用多种选项。请选择最适合您的环境。

NSX 配置核对清单

在实现上述其中一个补救选项之前,请验证您是否拥有以下 NSX DFW 配置:

  • 有状态 NSX DFW 部分是默认配置。这可能是您的环境中的情况。请参阅防火墙部分和防火墙规则

  • 作为服务集成的一部分,服务插入有时会与 NSX DFW 一起使用,以提供服务链和 L7 检查。默认情况下,服务插入政策也是有状态的。如需确认您的环境中启用了此集成,请参阅以下信息

选项 1 - 为 Seesaw 负载均衡器创建无状态分布式防火墙政策

借助此选项,您可在环境中将分布式防火墙保持在启用状态,同时将 Anthos 基础架构(尤其是 Seesaw 负载均衡器)映射到无状态政策。请务必考虑无状态防火墙和有状态防火墙之间的区别,确保选择最适合您的环境的类型。请参阅 VMware 文档的在管理器模式下添加防火墙规则部分 - 过程 - 第 6 步

如需创建无状态防火墙政策,请执行以下操作:

  1. 导航到清单 > 代码。创建名为 seesaw 的标记。

  2. 导航到清单 > 组。创建名为 Seesaw 的群组。

  3. 配置 Seesaw 所设成员。

    • 点击设置成员。根据您创建的 seesaw 标记,使用成员资格条件配置所设成员。虽然 VMware 通常认为使用 NSX 标记是最佳做法,但这种方法需要实施自动化机制,以确保在每次环境发生变化时(例如您升级或调整环境中的 Anthos 集群的大小时)进行设置。在这种情况下,基于某些其他成员资格条件的政策可能效果更好。您可以使用其他动态成员资格选项,例如虚拟机名称(包括正则表达式)、细分和细分端口。如需详细了解群组成员资格条件,请参阅添加群组
  4. 导航到安全 > 分布式防火墙。创建一个名为 Anthos 的部分。

  5. 点击右上角齿轮图标,并将有状态开关切换为

  6. 为该部分添加规则。建议您至少添加两条对称规则,如下所示:

    Source: Seesaw Group, Destination: Any, Applied to: Seesaw Group
    Source: Any, Destination: Seesaw Group, Applied to: Seesaw Group
    

  7. 发布更改并验证操作。

无状态部分必须放在 NSX DFW 表中,以便优先于以有状态方式允许相同流量的其他部分,从而遮盖无状态规则。确保无状态部分是最具体的,并且置于可能造成重叠的其他政策之前。

虽然不是必需的,但您可使用粗略的身份资格条件(例如细分标记)创建一个包含所有 Anthos 虚拟机的群组,这意味着连接到特定 NSX 网络的所有虚拟机都将包含在该群组中。然后,您可以在无状态政策中使用该群组。

选项 2 - 将 Seesaw 虚拟机添加到分布式防火墙排除列表

使用此选项,您可以从分布式防火墙检查中完全排除虚拟机,而不停用 NSX DFW。请参阅管理防火墙排除列表

  1. 导航到安全 > 分布式防火墙。选择操作 > 排除列表

  2. 选择 Seesaw 群组或包含所有 Anthos 虚拟机的群组。

问题排查

与 Seesaw 虚拟机建立 SSH 连接

有时,您可能希望通过 SSH 连接到 Seesaw 虚拟机进行问题排查或调试。

获取 SSH 密钥

如果您已创建集群,请按照以下步骤获取 SSH 密钥:

  1. 从集群中获取 seesaw-ssh Secret。从 Secret 中获取 SSH 密钥并对它进行 base64 解码。将解码的密钥保存在临时文件中:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get -n  kube-system secret seesaw-ssh -o \
    jsonpath='{@.data.seesaw_ssh}' | base64 -d | base64 -d > /tmp/seesaw-ssh-key
    

    CLUSTER_KUBECONFIG 替换为集群 kubeconfig 文件的路径。

  2. 为密钥文件设置适当的权限:

    chmod 0600 /tmp/seesaw-ssh-key

    如果您尚未创建集群,请按照以下步骤获取 SSH 密钥:

  3. 找到名为 seesaw-for-CLUSTER_NAME-IDENTIFIER.yaml 的文件。

    该文件称为群组文件,位于 config.yaml 旁边。

    此外,gkectl create loadbalancer 还会输出群组文件的位置。

  4. 在该文件中,获取 credentials.ssh.privateKey 的值,并对其进行 base64 解码。将解码的密钥保存在临时文件中:

    cat seesaw-for-CLUSTER_NAME-IDENTIFIER.yaml  | grep privatekey | sed 's/    privatekey: //g' \
    | base64 -d > /tmp/seesaw-ssh-key
    
  5. 为密钥文件设置适当的权限:

    chmod 0600 /tmp/seesaw-ssh-key
    

现在,您可以通过 SSH 连接到 Seesaw 虚拟机:

ssh -i /tmp/seesaw-ssh-key ubuntu@SEESAW_IP

SEESAW_IP 替换为 Seesaw 虚拟机的 IP 地址。

获取快照

您可以使用 gkectl diagnose snapshot 命令和 --scenario 标志来截取 Seesaw 虚拟机的快照。

如果您将 --scenario 设置为 allall-with-logs,则输出将包含 Seesaw 快照以及其他快照。

如果您将 --scenario 设置为 seesaw,则输出将仅包含 Seesaw 快照。

示例:

gkectl diagnose snapshot --kubeconfig ADMIN_CLUSTER_KUBECONFIG --scenario seesaw

gkectl diagnose snapshot --kubeconfig ADMIN_CLUSTER_KUBECONFIG --cluster-name CLUSTER_NAME --scenario seesaw

gkectl diagnose snapshot --seesaw-group-file GROUP_FILE --scenario seesaw

替换以下内容:

  • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径

  • GROUP_FILE:集群群组文件的路径。

从受损状态重新创建 Seesaw 虚拟机

如果 Seesaw 虚拟机被意外删除,您可以使用带有 --no-diff--force 标志的 gkectl upgrade loadbalancer 命令来重新创建该虚拟机。这将重新创建集群中的所有 Seesaw 虚拟机,无论其是否存在或是否健康。如果您的负载均衡器处于高可用性模式,并且两个虚拟机中只有一个被删除,运行此命令将重新创建两个虚拟机。

例如,要在管理员集群中重新创建 Seesaw 负载均衡器,请运行以下命令:

gkectl upgrade loadbalancer --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config ADMIN_CLUSTER_CONFIG --admin-cluster --no-diff --force

要在用户集群中重新创建 Seesaw 负载均衡器,请运行以下命令:

gkectl upgrade loadbalancer --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config USER_CLUSTER_CONFIG --no-diff --force

替换以下内容:

  • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径

  • ADMIN_CLUSTER_CONFIG:管理员集群配置文件的路径

  • USER_CLUSTER_CONFIG:用户集群配置文件的路径

已知问题

Cisco ACI 不适用于直接服务器返回 (DSR)

Seesaw 在 DSR 模式下运行,默认情况下,它在 Cisco ACI 中无法正常运行,这是由于数据层面 IP 学习导致的。您可以在此处找到使用应用端点组的可能解决方法。

Citrix Netscaler 不适用于直接服务器返回 (DSR)

如果您在 Seesaw 之前运行 Netscaler 负载均衡器,则必须关闭基于 MAC 的转发 (MBF)。请参阅 Citrix 文档

在某些情况下,升级 Seesaw 负载均衡器不起作用

如果您尝试从 1.8.0 版升级集群,或使用 gkectl upgrade loadbalancer 更新 1.8.0 版中的 Seesaw 负载均衡器的一些参数,此操作将在 DHCP 及 IPAM 模式下不起作用。请等待我们在即将发布的版本中提供的修复方案公布后,再进行升级。