本主题介绍了在 Google Cloud Platform 中置备和配置 NSX Advanced Load Balancer 的过程。
Google Cloud 中的网络、子网、实例
网络资源有助于管理网络、防火墙以及网络和实例的其他方面。可在 GCP 控制台的左侧菜单中查找网络资源。
创建 Virtual Private Cloud (VPC) 网络
VPC 网络有时简称为网络,是物理网络(例如数据中心网络)的虚拟版本。它可为计算引擎虚拟机实例、Kubernetes 引擎集群以及项目中的其他资源提供连接。
要创建 VPC 网络,请执行以下操作:
转到 Google Cloud Platform 控制台。
导航到已订阅的项目。
单击
。单击创建 VPC 网络。
输入 VPC 网络的名称。
输入 VPC 网络的子网名称和网络 IP 地址范围。
注:仅输入 IP4 地址,因为 GCP 不支持 IPV6。
单击创建。创建的网络如下所示。
GCP 中的防火墙规则
借助 GCP 防火墙规则,您可以允许或拒绝流入和流出虚拟机实例的流量。NSX Advanced Load Balancer 使用协议端口进行管理通信。有关更多信息,请参阅端口和协议。
要创建防火墙规则,请执行以下操作:
在左侧窗格中的防火墙规则下,单击网络下的 VPC 网络。
单击创建防火墙规则。
此时将显示创建防火墙规则屏幕。创建防火墙规则以允许网络内的 TCP、UDP 和 ICMP 流量以及来自相应网络外部的 HTTP/HTTPS 流量。
为所有 UDP 和 TCP 流量创建防火墙规则
要为所有 UDP 和 TCP 流量创建规则,请按下图所示配置相应字段,然后单击创建。
在 TCP 端口 80 和 443 上创建防火墙规则
要在 TCP 端口 80 和 443 上创建规则,请按下图所示配置相应字段,然后单击创建。
为 ICMP 创建防火墙规则
要为 ICMP 创建防火墙规则,请按下图所示配置相应字段,然后单击创建。
为内部 SE 到 SE 通信创建防火墙规则
要为内部 SE 到 SE 通信创建防火墙规则,请按下图所示配置相应字段,然后单击创建。
创建的防火墙规则如下所示。
创建控制器
要创建 NSX Advanced Load Balancer Controller 实例,请执行以下操作:
导航到 Google Cloud Platform 控制台,然后单击
。单击创建实例。
输入实例的名称、区域和可用区。
对于计算机类型,请选择 n1-standard-4,并选择 4 个 vCPU 和 15 GB 内存。
注:具体大小将因缩放要求而异。
要选择其他分布并更改磁盘大小,请单击更改。
注:NSX Advanced Load Balancer 仅支持 CentOS 和 Ubuntu。有关更多信息,请参阅系统要求。
选择 CentOS 7 映像,然后根据需要选择引导磁盘大小(最小为 40 GB)。有关更多信息,请参阅《VMware NSX Advanced Load Balancer 配置指南》中的“调整服务引擎大小”主题。
单击选择。
单击身份和 API 访问。
注:或者,也可以使用服务帐户身份验证机制。特权会在经过身份验证的实体通过 API 单元生成时继承。控制器实例必须在读写范围内生成,而 SE 则在只读范围内生成。有关更多信息,请参阅各种控制器和服务引擎部署的角色和权限。
选择所需的服务帐户。
选择为每个 API 设置访问权限作为访问范围。
对于计算引擎,请选择读写权限。
单击允许 HTTP 流量和允许 HTTPS 流量以允许外部连接。
单击安全性选项卡。
从将用于启动 SSH 的计算机中复制公钥,并将其粘贴到相应文本框中。
NSX Advanced Load Balancer Controller 是使用在创建网络时指定的网络范围中的外部 IP 地址和内部 IP 地址创建的。
注:如果未分配外部 IP,Google Cloud Platform 将不允许对创建的实例进行串行控制台访问。安装或运行 NSX Advanced Load Balancer 时,不需要串行控制台访问权限,但该访问权限可能有助于进行故障排除。
单击创建按钮。
创建服务器实例
服务器实例应运行服务器,以接受将在其上创建 VS 的特定端口上的流量。
要创建服务器实例,请执行以下操作:
从 GCP 控制台中,单击转到计算引擎。
在虚拟机实例页面中单击创建实例。
输入实例的名称,以及将在其中创建服务器的可用区。
对于计算机类型,请选择 n1-standard-4,并选择 4 个 vCPU 和 15 GB 内存。
注:具体大小将因缩放要求而异。
要选择其他分布并更改磁盘大小,请单击更改。
注:NSX Advanced Load Balancer 仅支持 CentOS 和 Ubuntu。有关更多信息,请参阅系统要求。
在身份和 API 访问下,单击为每个 API 设置访问权限。
在计算引擎下,选择只读权限。
注:或者,也可以使用服务帐户身份验证机制。特权会在经过身份验证的实体通过 API 单元生成时继承。控制器实例应当在读写范围内生成,而 SE 则在只读范围内生成。有关更多信息,请参阅各种控制器和服务引擎部署的角色和权限。
单击防火墙下的允许 HTTP 流量,以允许外部连接。
单击
。输入网络和子网详细信息。
将 IP 转发设置为开。
从将用于启动 SSH 的计算机中复制公钥。
单击安全性选项卡,然后单击 SSH 密钥下的添加项目。
将密钥粘贴到相应文本框中。
单击创建。
同样,创建具有所需规格的客户端实例。
创建 SE 虚拟机实例
要创建 SE 虚拟机实例,请执行以下操作:
从 GCP 控制台中,单击转到计算引擎。
在虚拟机实例页面中单击创建实例。
输入实例的名称,以及将在其中创建服务器的可用区。
对于计算机类型,请选择 1 个 vCPU 以及 3.75 GB 内存。
选择一个引导磁盘,并选择 Ubuntu 16.04 LTS 或 Debian GNU/Linux 9 (stretch) 作为操作系统映像。有关更多信息,请参阅系统要求。
在身份和 API 访问下,单击为每个 API 设置访问权限。
在计算引擎下,选择读写权限。
单击防火墙下的允许 HTTP 流量和允许 HTTPS 流量以允许外部连接。
单击
。输入网络和子网详细信息。
将 IP 转发设置为开。
从将用于启动 SSH 的计算机中复制公钥。
单击安全性选项卡,然后单击 SSH 密钥下的添加项目。
将密钥粘贴到下面显示的文本框中。
单击创建。
准备实例
打开 yum-cron。
作为必备条件,实例需要位于 CentOS 7.5 上。
要配置 Docker 存储库,请在 /etc/yum.repos.d/ 下创建文件 docker.repo
[localhost@avi-controller ~]$ sudo vim docker.repo [docker-main] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg
确认实例正在 CentOS 7.5 上运行
[localhost@avi-controller ~]$ cat /etc/centos-release CentOS Linux release 7.5.1611 (Core)
在所有 5 个实例上安装并启动 Docker。
sudo yum update -y sudo yum install -y epel-release sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce sudo systemctl enable docker sudo systemctl start docker (Lock release ) head -n1 /etc/centos-release | awk ' {print $4} ' > /etc/yum/vars/releasever
要保留当前版本的 CentOS/RHEL,请将 Linux 系统锁定到特定操作系统版本。有关更多信息,请参阅《VMware NSX Advanced Load Balancer 管理指南》中的“将 Linux 系统锁定到特定操作系统版本”主题。
有关存储驱动程序的更多信息,请参阅 Docker 存储驱动程序。
如下所示,devicemapper
配置了环回。这适用于概念证明,而不适用于生产环境。在生产环境中,建议使用 overlay2 作为推荐的存储驱动程序。例如,
root@cnu-bm6 ~]# docker info Containers: 1 Running: 1 Paused: 0 Stopped: 0 Images: 1 Server Version: 17.12.1-ce Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 9b55aab90508bd389d7654c4baf173a981477d55 runc version: 9f9c96235cc97674e935002fc3d78361b696a69e init version: 949e6fa Security Options: seccomp Profile: default Kernel Version: 3.10.0-693.21.1.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 8 Total Memory: 15.51GiB Name: cnu-bm6 ID: V2GA:L7IT:NW6S:FSDD:JLO2:OIGX:USQQ:UGXQ:BUA3:MYU3:O6JB:FQYX Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Username: abcd Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled [root@cnu-bm6 ~]#
如果为 Ubuntu 生成实例,则必须配置 sshguard
,如下所述。当 -w
选项参数以“.”(点)或“/”(斜杠)开头时,sshguard
可以获取允许文件。下面提供了示例允许文件 /etc/list。
# comment line (a '#' as very first character) # a single IPv4 and IPv6 address 1.2.3.4 2001:0db8:85a3:08d3:1319:8a2e:0370:7344 # address blocks in CIDR notation 127.0.0.0/8 10.11.128.0/17 192.168.0.0/24 2002:836b:4179::836b:0000/126 # hostnames rome-fw.enterprise.com hosts.test.com
以下是 sshguard
引用测试文件的代码段。
sshguard -w /etc/test
在服务器实例上测试服务器。
要测试实例,请在为要用作池服务器的虚拟服务配置的端口上启动 Web 服务器侦听,如下面的示例中所示。
sudo docker run -d -p 80:80 avinetworks/server
配置 NSX Advanced Load Balancer(方法 1)
在创建的实例上安装/运行 NSX Advanced Load Balancer Controller。有关说明,请参阅在 Linux 服务器云中安装 NSX Advanced Load Balancer。
在 NSX Advanced Load Balancer 中,导航到 。
确保 SE 状态为绿色,如下所示:
从 NSX Advanced Load Balancer 22.1.3 开始,将显示以下屏幕:
通过
ssh
登录到控制器实例,对控制器执行exec
并启动 Shell。键入以下命令以列出要使用的容器 ID。sudo docker ps sudo docker exec -it [container_id] bash shell
创建一个带有 IP 地址池的网络以分配 VIP。在 NSX Advanced Load Balancer 中,导航到 。
导航到
并创建 IPAM,如下所示。
从 NSX Advanced Load Balancer 22.1.3 开始,将显示以下屏幕:
转到
。编辑默认云,并选择 Linux 作为云基础架构类型。
单击下一步。
在 Linux 服务器配置屏幕中,选择 GCP 作为 IPAM 配置文件。
从 NSX Advanced Load Balancer 22.1.3 开始,将显示以下屏幕:
导航到 IPAM/DNS 选项卡。
对于 IPAM 配置文件字段,请选择 GCP IPAM 配置文件。
单击保存。
有关 GCP 的更多信息,请参阅为 GCP 配置 IPAM。
将 SE 添加到云
创建网络配置文件并将其附加到 IPAM,如下所示。
要将 SE 添加到云,请导航到
,然后配置 LSC 云,如下所示。从 NSX Advanced Load Balancer 22.1.3 开始,将提供以下 UI:
有关更多信息,请参阅将 Avi 服务引擎添加到 Linux 服务器云。
安装并配置控制器和服务引擎(方法 2)
或者,如果已创建控制器服务文件,可以使用 setup.json 文件重新启动控制器,以使用 GCP IPAM 配置文件和用于分配 VIP 的网络来配置 Linux 服务器云。
将下面显示的 setup.json 文件复制到主机上的 /opt/avi/controller/data(假设 /opt/avi/controller/data 是服务文件中用于控制器的卷)。
根据需要修改 SSH 密钥、用户名、网络子网和网络/IPAM 名称
{ "CloudConnectorUser": [ { "name": "rangar", "tenant_ref": "admin", "public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9ZZWDLSl/PJHWA8QuDlfDHJuFh6k55qxRxO28fSRvAEbWCXXgXdnH8vSVVDE Mo0brgqrp+vful2m7hNm0TPv8REbT2luVeWo+G0R1hxzdALzI8VmMBxX2VduKZ5Zrh3C9GKxaUYb4R2hzLaYKUBQnFa2B0YWiAfC3ow71fwwgb7cVhxExTyhhF01gY 9Tcb3w9uugv3vXNzyxDssHXtwY60WcVUIK1L+8SqXu/r6YUG8j4IsaYkXJHBE6CHPwDg4uwRG35IkfhsIg0KtKRwpzHbhOx0qRjG9ZaVc0SnfMIHmdAFwXpDpi/AKV NAmjkix2GIPIi1OISnEngSjnugVb7\n", "private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAvWWVgy0pfzyR1gPELg5XwxybhYepOeasUcTtvH0kbwBG1gl1\ n4F3Zx/L0lVQxDKNG64Kq6fr37pdpu4TZtEz7/ERG09pblXlqPhtEdYcc3QC8yPFZ\njAcV9lXbimeWa4dwvRisWlGG+Edocy2mClAUJxWtgdGFogHwt6MO9X8MIG+ 3FYcR\nMU8oYRdNYGPU3G98PbroL971zc8sQ7LB17cGOtFnFVCCtS/vEql7v6+mFBvI+CLG\nmJFyRwROghz8A4OLsERt+SJH4bCINCrSkcKcx24TsdKkYxvWWlXNE p3zCB5nQBcF\n6Q6YvwClTQJo5IsdhiDyItTiEpxJ4Eo57oFW+wIDAQABAoIBAFu7XeUA9L5ZmdDs\nVhJwg/VOX80W3dHbdc7M8NCAVCsnGSgFwQAAtMBxXiENfAx A8NKUoS9ejMMUtvNJ\n7x+ywcF3WE63ze/htKGMF2ZNIJ+yAb3Zl6OIswxynTi131cJbINJ9gBwyExsWZyf\nmXIZQwmDKFxeHLlQ80QeR9qDxF3Ypyz7vdEtQMtpI 3JQJMbUX6dmQm0UtOKi5tL8\nzkskZJHnaqwJlem92Zon7S8PIflsPevsAmDrTPbmxIL6Z3KlJkoLzTcWefA6E19N\nw4JmylQokAWiqQ1il+qrcITIZGhsZre081N wjHkzzA8kdb4EUO0nhy7rzbmS67TN\n08Fe0RECgYEA98WaJR5k/r8VBlKEQTErye29cJmkr0w5ZPX+bwko+ejj2S2vqpJc\nuR0YO3q5zY5a4A/33X/vke+r1bNPr p9QSnBscFvA/AEXGAiAeuCsuB+pw8C3N5C5\ncTzKNFx1c2KXbejRkhvL9gz5tJZpdHIqzbGQmwEiNFqnYy6BPbhTm8UCgYEAw6+2\n5WvAGH9Ub+ZfySoeNNaxXfI DvXA2+G/CBg99KYuXzWWmeVx9652lc4Gv+mxhFiJd\nilMfWljlb+f1G5sJnZ3VMKSf/FF¬¬6Mo8MsnAkvjnVWBoezo2sVzu+9g3qGRXNTtRM\nSH1N/eWPeJGwD+Vyk D3r8K+iag7cMhrLpGPWk78CgYARatumJlfVLJuOwTg42PsK\nC+NYSgSwqfwS49QJ/CvcPYne135U0EsiXDA65iqvj4VF4Pl8oaS2rpF2yU8dqGdd\nhD+rOlf7nxv /fYGCoc6idt9ZOm/mwQ64LhzMx38eKF0axdYNnlSdLFZVYolxPSFT\nKltO+ipsYb8IktlU/GMsPQKBgQCeirlqzM64yki11Hcce3Q3qQ3QqGihTc4roBgZ\nYuksB L37mnSy9N3MTFAk8hiKks5h6XvRuyC2yTkyXkL2l7jFq39zRp2cBsMzPTSz\nSSpruF2CYL8+6AeOMYi4v3M/2asaR+R6ApNytk90Bs0XQ/V6qcCDozi6Jsn+Cjmd\ nOYo67wKBgAcUFRHUX4VwCUZAAIxyTM+efpf5z8dKHh/iJA6rtqcTi4vHddEJinT6\ntOiqXjciZEKqZ08GtImIPtuhIBO0m10fCfcjrGxGz2+N9o8fyNvFWU83kG9 IXSq8\nU1YOIYvXwWFQLWIUvyOgnyT4bW0OLa8OrJEq1/DaH8gpvvFi8qRK\n-----END RSA PRIVATE KEY-----\n" } ], "IpamDnsProviderProfile": [ [39/5306] { "name": "gcp", "type": "IPAMDNS_TYPE_GCP", "tenant_ref": "admin", "gcp_profile": { "usable_network_refs": [ "/api/network/?name=net1" ] } } ], "Network": [ { "name": "net1", "tenant_ref": "admin", "cloud_ref": "admin:Default-Cloud", "configured_subnets": [ { "prefix": { "ip_addr": { "type": "V4", "addr": "10.9.0.0" }, "mask": 24 }, "static_ranges": [ { "begin": { "type": "V4", "addr": "10.9.0.2" }, "end": { "type": "V4", "addr": "10.9.0.254" } } ] } ] } ], "SeProperties": [ { "se_runtime_properties": { "global_mtu": 1400, "se_handle_interface_routes": true } } ], "Cloud": [ { "name": "Default-Cloud", "tenant_ref": "admin", "vtype": "CLOUD_LINUXSERVER", "ipam_provider_ref": "admin:gcp", "linuxserver_configuration": { "ssh_attr": { "ssh_user": "rangar", "host_os": "COREOS" }, "se_sys_disk_path": "/” } } ] }
在控制器上执行首次设置并指定用户名/密码。
选择“GCP IPAM”作为默认云的 IPAM 提供程序,并使用创建的两个服务引擎实例的 IP 地址配置 Linux 服务器云。
创建虚拟服务并验证流量
要创建虚拟服务,请执行以下操作:
创建池。例如,GCP-Perf-Test-VS-Pool,如下所示:
从 NSX Advanced Load Balancer 22.1.3 开始,将提供以下 UI:
添加服务器实例 IP 作为池服务器。
创建名为 GCP-Perf-Test-VS 的内部虚拟服务。将从 VIP/IPAM 子网
10.y.y.y./24
自动分配 VIP将从 VIP/IPAM 子网 10.y.y.y./24 自动分配 VIP
所述 IP 子网 10.x.x.x 仅供参考。应将放置子网设置为控制器和服务引擎使用的 VPC 中的主要子网。
从 NSX Advanced Load Balancer 22.1.3 开始,将提供以下 UI:
创建的虚拟服务如下所示。
分配浮动 IP
NSX Advanced Load Balancer 支持为虚拟服务分配浮动 IP(其中,负载均衡器的前端将为从 GCP 分配的公用 IP,后端将为服务引擎)。
可以通过 NSX Advanced Load Balancer UI 分配浮动 IP。要分配浮动 IP,请单击为外部客户端访问分配浮动 IP 以将其启用。
默认情况下,将启用自动分配。单击自动分配以将其禁用,然后输入浮动 IP 地址以手动分配浮动 IP。
也可以通过 CLI 分配浮动 IP,如下所示。
++Truncated Output++ +------------------------------------+-----------------------------------------------------+ [admin]: virtualservice> vip index 1 [admin]: virtualservice:vip> auto_allocate_floating_ip Overwriting the previously entered value for auto_allocate_floating_ip [admin]: virtualservice:vip> save [admin]: virtualservice> save ++ Truncated Output++
测试 ICMP 流量
将 ICMP 流量发送到 VIP IP。在此例中为 10.10.0.1
,并确保编写该 IP。
[localhost@avi-test-server ~]$ ping 10.10.0.1 [root@admin]# curl -I 10.10.0.1 HTTP/1.1 200 OK Content-Type: text/html Content-Length: 3800 Connection: keep-alive Server: nginx/1.12.2 Date: Mon, 18 Mar 2019 06:55:12 GMT Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT ETag: "5a9e5ebd-e74" Accept-Ranges: bytes
验证 VIP/32 的路由是否在 GCP 中进行编写,其中下一跃点为具有 IP 10.8.2.3 的服务引擎 1,如下图所示。
用于配置虚拟服务和池的 API
将下面显示的 setup.json 文件复制到主机上的 /opt/avi/controller/data(假设 /opt/avi/controller/data 是服务文件中用于控制器的卷)。
{ "name": "vs1", "pool_ref": "pool_ref", "services": [ { "port": 80 } ], "vip": [ { “auto_allocate_ip” = true, “auto_allocate_floating_ip” = true "ipam_network_subnet": { "network_ref": "network_ref", "subnet": { "ip_addr": { "addr": "6.2.0.0",--> IPAM subnet. "type": "V4" }, "mask": 16 } }, "subnet": { "ip_addr": { "addr": "10.146.11.0", --> placement subnet, subnet having reachability to client facing VIP "type": "V4" }, "mask": 24 } }
故障排除
一个常见问题是,服务引擎无法连接到控制器或频繁断开与 Ubuntu 的连接。
根本原因
这是由于 sshguard 所致。有关 sshguard 的更多信息,请参阅 sshguard。
sshguard 支持地址。即使允许的地址看起来会产生攻击,这些地址也不会被阻止。这对于防止 LAN 用户被意外阻止非常有用。
当需要允许更长的列表时,可以将其打包为一个纯文本文件,每行一个地址/主机名/块。
缓解
在 sshguard 使用的允许文件中配置控制器 IP(所有三个,如果已集群化)。
当 -w 选项参数以“.”(点)或“/”(斜杠)开头时,sshguard 可以获取允许文件。以下是示例允许文件 (/etc/test),其注释行以开头字符“#”指示。
# a single IPv4 and IPv6 address 1.2.3.4 2001:0db8:85a3:08d3:1319:8a2e:0370:7344 # address blocks in CIDR notation 127.0.0.0/8 10.11.128.0/17 192.168.0.0/24 2002:836b:4179::836b:0000/126 # hostnames rome-fw.enterprise.com hosts.test.com
告知 sshguard 从 /etc/test 文件创建一个允许列表,如下所示:
sshguard -w /etc/test