GCP 实例组可以在虚拟服务的 NSX Advanced Load Balancer 池中配置。控制器会定期轮询在 NSX Advanced Load Balancer 池中配置的 GCP 实例组,并使用 GCP 实例组中的实例更新池服务器。
除了轮询外,还会使用 GCP pub-sub 通知服务获取关于在 GCP 实例组中创建和删除了实例的通知。如果将新的实例添加到在 NSX Advanced Load Balancer 池中配置的 GCP 实例组,则 NSX Advanced Load Balancer 将更新池成员资格以包含新置备的实例。相反,从 GCP 实例组中删除实例时,NSX Advanced Load Balancer 将从其池成员资格中删除此服务器。这样,无需任何操作员干预或配置更新,即可实现对后端服务器资源的无缝、弹性和自动化管理。
NSX Advanced Load Balancer 同时支持 GCP 受管和非受管实例组。实例组可以位于任何 GCP 项目中,但必须具有如下所述的所需权限。有关 GCP 中所需权限的详细信息,请参阅角色和权限(GCP 完全访问)。您可以将服务帐户配置为具有对服务引擎项目中 GCP 实例组自动缩放功能的权限,以及对实例组(服务器)项目的权限。
通过 CLI 配置池
以下是通过 NSX Advanced Load Balancer CLI 配置 GCP 实例组的步骤:
使用 InstanceGroupName@InstanceGroupProjectID 格式的 GCP 实例组列表设置 NSX Advanced Load Balancer 池中的 external_autoscale_groups 字段。
实例组可以跨多个池共享。
示例
您可以将两个 GCP 实例组添加到一个池中,这两个 GCP 实例组都属于不同的 GCP 项目。以下是 CLI 详细信息:
[admin:controller]: > configure pool pool-1 [admin:controller]: pool> cloud_ref gcp-cloud [admin:controller]: pool> external_autoscale_groups instance-group-name-1@instance-group-project-1 [admin:controller]: pool> external_autoscale_groups instance-group-name-2@instance-group-project-2 [admin:controller]: pool> save +---------------------------------------+-----------------------------------------------------+ | Field | Value | +---------------------------------------+-----------------------------------------------------+ | uuid | pool-ea2ee84d-a51e-451f-b59e-4906a4a0a4e2 | | name | pool-1 | | default_server_port | 80 | | graceful_disable_timeout | 1 min | | connection_ramp_duration | 10 min | | max_concurrent_connections_per_server | 0 | | lb_algorithm | LB_ALGORITHM_LEAST_CONNECTIONS | | lb_algorithm_hash | LB_ALGORITHM_CONSISTENT_HASH_SOURCE_IP_ADDRESS | | inline_health_monitor | True | | use_service_port | False | | capacity_estimation | False | | capacity_estimation_ttfb_thresh | 0 milliseconds | | vrf_ref | global | | fewest_tasks_feedback_delay | 10 sec | | enabled | True | | request_queue_enabled | False | | request_queue_depth | 128 | | host_check_enabled | False | | sni_enabled | True | | rewrite_host_header_to_sni | False | | rewrite_host_header_to_server_name | False | | external_autoscale_groups[1] | instance-group-name-1@instance-group-project-1 | | external_autoscale_groups[2] | instance-group-name-2@instance-group-project-2 | | lb_algorithm_core_nonaffinity | 2 | | lookup_server_by_name | False | | analytics_profile_ref | System-Analytics-Profile | | tenant_ref | admin | | cloud_ref | gcp-cloud | | server_timeout | 0 milliseconds | | delete_server_on_dns_refresh | True | | enable_http2 | False | | ignore_server_port | False | | routing_pool | False | +---------------------------------------+-----------------------------------------------------+
有关自动缩放服务引擎项目的角色和权限,请参阅角色和权限(GCP 完全访问)。
配置云
以下是配置云的步骤:
您可以使用云配置中的 autoscale_polling_interval 字段配置轮询间隔。
如果为实例组通知配置了 GCP pub-sub,则建议将轮询间隔增加到 5 分钟。这是在每个周期性时间间隔之后协调 NSX Advanced Load Balancer 池配置所必需的。
通过 CLI 配置云
以下是通过 NSX Advanced Load Balancer CLI 配置云的 CLI 详细信息。
[admin:controller]: > configure cloud gcp-cloud Updating an existing object. [admin:controller]: cloud> autoscale_polling_interval 300 Overwriting the previously entered value for autoscale_polling_interval [admin:controller]: cloud> save +------------------------------+--------------------------------------------+ | Field | Value | +------------------------------+--------------------------------------------+ | uuid | cloud-32cd1a1e-bfc0-40f9-940b-1b37408ffa67 | | name | gcp-cloud | | vtype | CLOUD_GCP | | apic_mode | False | | gcp_configuration | | | cloud_credentials_ref | gcp-service-account | | region_name | us-central1 | | zones[1] | us-central1-a | | zones[2] | us-central1-b | | se_project_id | se-project-id | | network_config | | | config | INBAND_MANAGEMENT | | inband | | | vpc_subnet_name | subnet-1 | | vpc_project_id | network-project-id | | vpc_network_name | dev-net-1 | | vip_allocation_strategy | | | mode | ROUTES | | dhcp_enabled | True | | mtu | 1500 bytes | | prefer_static_routes | False | | enable_vip_static_routes | False | | license_type | LIC_CORES | | state_based_dns_registration | True | | ip6_autocfg_enabled | False | | dns_resolution_on_se | False | | enable_vip_on_all_interfaces | False | | tenant_ref | admin | | license_tier | ENTERPRISE | | autoscale_polling_interval | 300 seconds | +------------------------------+--------------------------------------------+
跟踪 GCP 实例组中的实例
在跟踪 GCP 实例组中的实例时,将使用对实例组的轮询以及 GCP StackDriver 日志记录中的通知。
使用 GCP StackDriver 日志记录和 GCP Pub/Sub 更新服务器
以下是使用 GCP StackDriver 日志记录和 GCP Pub/Sub 更新服务器的过程:
NSX Advanced Load Balancer Controller 在每个云的服务引擎项目中创建一个 GCP pub-sub 主题和一个 GCP pub-sub 订阅。
控制器为服务器项目中的每个实例组创建一个 StackDriver 日志池。
每当在 GCP 实例组中添加或移除实例时,都会在 GCP StackDriver 日志记录中创建一个日志条目。
该日志条目将与配置的实例组池的查询进行匹配,如果相匹配,则会将其导出到服务引擎项目中的 pub-sub 主题。
每当在实例组中添加或移除实例时,控制器都会从 GCP pub-sub 获取通知,并更新包含配置的实例组的所有 NSX Advanced Load Balancer 池。
通过轮询更新服务器
如果缺少某些更新,则将定期轮询 GCP 实例组以同步主题、订阅、池和服务器。
在控制器处理 GCP pub-sub 通知后,NSX Advanced Load Balancer 池即会随服务器一起更新。
[admin:10-138-10-50]: > show pool pool1 +---------------------------------------+----------------------------------------------------------------------------------+ | Field | Value | +---------------------------------------+----------------------------------------------------------------------------------+ | uuid | pool-ea2ee84d-a51e-451f-b59e-4906a4a0a4e2 | | name | pool1 | | default_server_port | 80 | | graceful_disable_timeout | 1 min | | connection_ramp_duration | 10 min | | max_concurrent_connections_per_server | 0 | | servers[1] | | | ip | 10.20.0.8 | | hostname | instance-group-1-bf52 | | enabled | True | | ratio | 1 | | external_uuid | https://www.googleapis.com/compute/v1/projects/instance-group-project-1/zones/us | | | -central1-c/instances/instance-group-1-bf52 | | verify_network | False | | resolve_server_by_dns | False | | static | False | | rewrite_host_header | False | | autoscaling_group_name | instance-group-1@instance-group-project-1 | | servers[2] | | | ip | 10.20.0.9 | | hostname | instance-group-1-9phd | | enabled | True | | ratio | 1 | | external_uuid | https://www.googleapis.com/compute/v1/projects/instance-group-project-1/zones/us | | | -central1-b/instances/instance-group-1-9phd | | verify_network | False | | resolve_server_by_dns | False | | static | False | | rewrite_host_header | False | | autoscaling_group_name | instance-group-1@instance-group-project-1 | | servers[3] | | | ip | 10.20.0.7 | | hostname | instance-group-1-s078 | | enabled | True | | ratio | 1 | | external_uuid | https://www.googleapis.com/compute/v1/projects/instance-group-project-1/zones/us | | | -central1-f/instances/instance-group-1-s078 | | verify_network | False | | resolve_server_by_dns | False | | static | False | | rewrite_host_header | False | | autoscaling_group_name | instance-group-1@instance-group-project-1 | | lb_algorithm | LB_ALGORITHM_LEAST_CONNECTIONS | | lb_algorithm_hash | LB_ALGORITHM_CONSISTENT_HASH_SOURCE_IP_ADDRESS | | inline_health_monitor | True | | use_service_port | False | | capacity_estimation | False | | capacity_estimation_ttfb_thresh | 0 milliseconds | | vrf_ref | global | | fewest_tasks_feedback_delay | 10 sec | | enabled | True | | request_queue_enabled | False | | request_queue_depth | 128 | | host_check_enabled | False | | sni_enabled | True | | rewrite_host_header_to_sni | False | | rewrite_host_header_to_server_name | False | | external_autoscale_groups[1] | instance-group-1@instance-group-project-1 | | lb_algorithm_core_nonaffinity | 2 | | lookup_server_by_name | False | | analytics_profile_ref | System-Analytics-Profile | | tenant_ref | admin | | cloud_ref | gcp-cloud | | server_timeout | 0 milliseconds | | delete_server_on_dns_refresh | True | | enable_http2 | False | | ignore_server_port | False | | routing_pool | False | +---------------------------------------+----------------------------------------------------------------------------------+