このセクションでは、管理者以外の権限を使用した OpenStack のフル アクセスの統合プロセスについて説明します。

OpenStack で、プロバイダ モードを使用して NSX Advanced Load Balancer ソリューションを展開するには、管理者権限が必要です。管理者権限を使用すると、テナント(プロジェクト)、ユーザー、ロール、ネットワーク、ルーター、ポートなどの OpenStack リソースにシステム全体でアクセスできます。これにより、NSX Advanced Load Balancer と OpenStack がシームレスに統合できます。クラウド管理者またはオペレータは、OpenStack で追加の構成を行う必要はありません。

ただし、展開によっては、ビジネス ポリシーまたは IT ポリシーにより管理者権限が無効になる場合があります。このような場合、プロバイダ モードで NSX Advanced Load Balancer を展開して使用することはできません。このガイドでは、管理者権限を付与せずにプロバイダ モードで NSX Advanced Load Balancer を展開して使用するための OpenStack サービス ポリシーの変更と OpenStack ネットワーク リソースについて概説します。

管理者権限のない管理者ユーザーの作成

OpenStack を管理者権限なしで使用するには、OpenStack 管理者が NSX Advanced Load Balancer クラウド構成で使用する OpenStack で NSX Advanced Load Balancer 管理者ユーザー、NSX Advanced Load Balancer 管理者ロール、およびテナントを作成する必要があります。既存のテナントも使用できます。

NSX Advanced Load Balancer の OpenStack クラウドで構成された管理者ユーザー(NSX Advanced Load Balancer 管理者ユーザー)を使用して、初期接続の確立、Keystone による認証、プロジェクト、展開されたリージョン、およびネットワークへのアクセスといった初期設定を行うことができます。初期設定が完了したら、これを使用して OpenStack からテナントをインポートし、さまざまなテナントのリソースにアクセスできます。NSX Advanced Load Balancer 管理者ユーザーに、テナント(プロジェクト)、ユーザー、ロールを読み取り、テナント内のユーザーへのロールの割り当てを一覧表示するのに十分な権限があることを確認します。

NSX Advanced Load Balancer の OpenStack クラウドの管理テナント(NSX Advanced Load Balancer 管理テナント)は、NSX Advanced Load Balancer がプロバイダ モードで SE を起動するテナントです。管理者ユーザーに、SE のイメージをアップロードし、フレーバーを一覧表示し、NSX Advanced Load Balancer 管理テナントで作成または共有されるネットワークに仮想マシンを追加するのに十分な権限があることを確認します。

OpenStack で、NSX Advanced Load Balancer 管理者ユーザーを次のように作成できます。

  1. 次のコマンドを使用して、管理者認証情報を使用して OpenStack に aviadmin ロールを作成します。

    source admin-openrc.sh
  2. 次のコマンドを使用して、OpenStack Cloud に aviuser という名前のユーザーを作成します。

    config
    $ openstack user create --password avi123 --description 'Avi Admin user' aviuser
  3. 次のコマンドを使用して、aviadmin ロールを作成します。

     $ openstack role create aviadmin 
  4. 次のコマンドを使用して、OpenStack の NSX Advanced Load Balancer 管理テナントとして使用する avilbaas という名前のプロジェクトを作成します。

    Cloud config
     $ openstack project create --description 'Avi LBaaS Project' avilbaas 
  5. 次のコマンドを使用して、avilbaas テナントで aviuser ユーザー、aviadmin ロールを割り当てます。

    $ openstack role add --project avilbaas --user aviuser aviadmin 
  6. NSX Advanced Load Balancer ロード バランサ サービスが必要な他のプロジェクトに aviuser ユーザー、aviadmin ロールを追加します。CLI コマンドは次のとおりです。

    $ openstack role add --project demo --user aviuser aviadmin 
  7. 次のコマンドを使用して、すべてのテナントで aviuser に割り当てられているロールを確認します。

    $ openstack role assignment list --user aviuser --names 
  8. デフォルト以外のドメインの場合は、NSX Advanced Load Balancer 管理者ユーザーと NSX Advanced Load Balancer 管理テナントの作成時に適切なドメインを使用します。

OpenStack ポリシーの変更

NSX Advanced Load Balancer Controller は、Keystone、Nova、Neutron、および Glance OpenStack サービスと通信します。サービスごとに必要なポリシー変更のリストを次に示します。

Keystone ポリシーの変更

Keystone ポリシーを変更する手順は次のとおりです。

  1. たとえば、keystone.conf ファイルでポリシー ファイルを特定します。

    [oslo_policy]
    policy_file = keystone.policy.yaml 
  2. Keystone ポリシー ファイル(keystone.policy.yaml など)で、aviadmin ロールを定義します。

     "aviadmin_role": "role:aviadmin" 
  3. keystone.policy.yaml などで、aviadmin_role の次の API へのアクセスを許可します。

    Show domain details
    GET  /v3/domains/{domain_id}
    Intended scope(s): system
    "identity:get_domain": "rule:admin_required or token.project.domain.id:%(target.domain.id)s or rule:aviadmin_role"
          
    List domains
    GET  /v3/domains
    Intended scope(s): system
    "identity:list_domains": "rule:admin_required or rule:aviadmin_role"
       
       
    List endpoints
    GET  /v3/endpoints
    Intended scope(s): system
    "identity:list_endpoints": "rule:admin_required or rule:aviadmin_role"
       
    List projects
    GET  /v3/projects
    Intended scope(s): system
    "identity:list_projects": "rule:admin_required or rule:aviadmin_role"
       
    Show role details
    GET  /v3/roles/{role_id}
    HEAD  /v3/roles/{role_id}
    Intended scope(s): system
    "identity:get_role": "rule:admin_required or rule:aviadmin_role"
       
    List roles
    GET  /v3/roles
    HEAD  /v3/roles
    Intended scope(s): system
    "identity:list_roles": "rule:admin_required or rule:aviadmin_role"
       
    List role assignments
    GET  /v3/role_assignments
    HEAD  /v3/role_assignments
    Intended scope(s): system
    "identity:list_role_assignments": "rule:admin_required or rule:aviadmin_role"
       
    List services
    GET  /v3/services
    Intended scope(s): system
    "identity:list_services": "rule:admin_required or rule:aviadmin_role"
       
    Show user details
    GET  /v3/users/{user_id}
    HEAD  /v3/users/{user_id}
    "identity:get_user": "rule:admin_or_owner or rule:aviadmin_role"
       
    List users
    GET  /v3/users
    HEAD  /v3/users
    Intended scope(s): system
    "identity:list_users": "rule:admin_required or rule:aviadmin_role"  
  4. 次のコマンドを使用して、Keystone サービスを再起動します。

     apache2ctl restart 

Nova ポリシーの変更

Nova ポリシーを変更する手順は次のとおりです。

  1. nova.conf ファイルからポリシー ファイルを特定します。

    [oslo_policy] policy_file = nova.policy.yaml
  2. Nova ポリシー ファイルで、aviadmin ロールを定義します。

    "aviadmin_role": "role:aviadmin"
  3. aviadmin_role in nova policy file: の次の API へのアクセスを許可します。

    List all aggregates
     GET  /os-aggregates
     "os_compute_api:os-aggregates:index": "rule:admin_api or rule:aviadmin_role"
        
     Show details for an aggregate
     GET  /os-aggregates/{aggregate_id}
     "os_compute_api:os-aggregates:show": "rule:admin_api or rule:aviadmin_role"
        
     List availability zone information without host information
     GET  /os-availability-zone
     "os_compute_api:os-availability-zone:list": "rule:admin_or_owner or rule:aviadmin_role"
        
     List detailed availability zone information with host information
     GET  /os-availability-zone/detail
     "os_compute_api:os-availability-zone:detail": "rule:admin_api or rule:aviadmin_role"
        
     List available extensions and show information for an extension by
     alias
     GET  /extensions
     GET  /extensions/{alias}
     "os_compute_api:extensions": "rule:admin_or_owner or rule:aviadmin_role"
        
     It also allows access to the full list of tenants that have access
     to a flavor via an os-flavor-access API.
     GET  /flavors/{flavor_id}/os-flavor-access
     GET  /flavors/detail
     GET  /flavors/{flavor_id}
     POST  /flavors
     PUT  /flavors/{flavor_id}
     "os_compute_api:os-flavor-access": "rule:admin_or_owner or rule:aviadmin_role"
        
     List all servers
     GET  /servers
     "os_compute_api:servers:index": "rule:admin_or_owner or rule:aviadmin_role"
        
     List all servers with detailed information
     GET  /servers/detail
     "os_compute_api:servers:detail": "rule:admin_or_owner or rule:aviadmin_role"
        
     List all servers for all projects
     GET  /servers
     "os_compute_api:servers:index:get_all_tenants": "rule:admin_api or rule:aviadmin_role"
        
     List all servers with detailed information for all projects
     GET  /servers/detail
     "os_compute_api:servers:detail:get_all_tenants": "rule:admin_api or rule:aviadmin_role"
  4. nova-api サービスを再起動します。

    service nova-api restart

Neutron ポリシーの変更

Neutron ポリシーを変更する手順は次のとおりです。

  1. neutron.conf ファイルからポリシー ファイルを特定します。

    [oslo_policy]
     policy_file = neutron.policy.json 
  2. neutron.policy ファイルで aviadmin ロールを定義します (neutron.policy.json):

     "aviadmin_role": "role:aviadmin", 
  3. neutron.policy.json で、aviadmin_role の次の API へのアクセスを許可します。

     "create_port:device_owner": "not rule:network_device or rule:context_is_advsvc or rule:admin_or_network_owner or rule:aviadmin_role",
        
     "create_port:fixed_ips": "rule:context_is_advsvc or rule:admin_or_network_owner or rule:aviadmin_role",
     "create_port:fixed_ips:ip_address": "rule:context_is_advsvc or rule:admin_or_network_owner or rule:aviadmin_role",
     "create_port:fixed_ips:subnet_id": "rule:context_is_advsvc or rule:admin_or_network_owner or rule:shared or rule:aviadmin_role",
     "create_port:allowed_address_pairs": "rule:admin_or_network_owner or rule:aviadmin_role",
     "get_port": "rule:context_is_advsvc or rule:admin_owner_or_network_owner or rule:aviadmin_role",
     "update_port:fixed_ips": "rule:context_is_advsvc or rule:admin_or_network_owner or rule:aviadmin_role",
     "update_port:fixed_ips:ip_address": "rule:context_is_advsvc or rule:admin_or_network_owner or rule:aviadmin_role",
     "update_port:fixed_ips:subnet_id": "rule:context_is_advsvc or rule:admin_or_network_owner or rule:shared or rule:aviadmin_role",
     "update_port:allowed_address_pairs": "rule:admin_or_network_owner or rule:aviadmin_role ",
     "get_agent": "rule:admin_only or rule:aviadmin_role",
     "get_l3-agents": "rule:admin_only or rule:aviadmin_role",
     "get_loadbalancer-agent": "rule:admin_only or rule:aviadmin_role",
     "get_loadbalancer-pools": "rule:admin_only or rule:aviadmin_role",
     "get_agent-loadbalancers": "rule:admin_only or rule:aviadmin_role",
     "get_loadbalancer-hosting-agent": "rule:admin_only or rule:aviadmin_role",
     "create_floatingip:floating_ip_address": "rule:admin_only or rule:aviadmin_role",
     "get_floatingip": "rule:admin_or_owner or rule:aviadmin_role",
  4. 次のコマンドを使用して、neutron-server サービスを再起動します。

     service neutron-server restart 

クラウドの構成

NSX Advanced Load Balancer Controller で、aviuser 認証情報を使用してクラウドを構成し、管理テナントとして avilbaas を構成します。OpenStack ロール マッピングで、OpenStack の aviadmin ロールを NSX Advanced Load Balancer System-Admin または Tenant-Admin ロールにマッピングします。

map_admin_to_cloud_adminTrue に設定できます。これにより、avilbaas テナントが NSX Advanced Load Balancer の管理テナントにマッピングされ、NSX Advanced Load Balancer の管理テナントで実行されたアクションが avilbaas テナントに反映されます。

構成例

この例では、すべての OpenStack ロールに Tenant-Admin ロールが付与されています。

[admin:avi-controller]: show cloud Default-Cloud
+------------------------------+--------------------------------------------+
| Field                        | Value                                      |
+------------------------------+--------------------------------------------+
| uuid                         | cloud-4db84437-f236-41cb-996f-11e450976744 |
| name                         | Default-Cloud                              |
| vtype                        | CLOUD_OPENSTACK                            |
| openstack_configuration      |                                            |
|   username                   | aviuser                                    |
|   password                   | [sensitive]                                |
|   admin_tenant               | avilbaas                                   |
|   mgmt_network_name          | mgmt                                       |
|   privilege                  | WRITE_ACCESS                               |
|   use_keystone_auth          | True                                       |
|   region                     | RegionOne                                  |
|   hypervisor                 | KVM                                        |
|   tenant_se                  | False                                      |
|   import_keystone_tenants    | True                                       |
|   anti_affinity              | True                                       |
|   port_security              | False                                      |
|   security_groups            | False                                      |
|   allowed_address_pairs      | True                                       |
|   free_floatingips           | False                                      |
|   img_format                 | OS_IMG_FMT_AUTO                            |
|   use_admin_url              | True                                       |
|   role_mapping[1]            |                                            |
|     os_role                  | *                                          |
|     avi_role                 | Tenant-Admin                               |
|   use_internal_endpoints     | False                                      |
|   config_drive               | True                                       |
|   auth_url                   | http://10.10.32.213:5000/v3                |
|   insecure                   | False                                      |
|   external_networks          | False                                      |
|   neutron_rbac               | True                                       |
|   map_admin_to_cloudadmin    | True                                       |
|   nuage_port                 | 8443                                       |
|   contrail_plugin            | False                                      |
|   name_owner                 | True                                       |
|   use_nuagevip               | False                                      |
|   nuage_virtualip            | False                                      |
|   contrail_disable_policy    | False                                      |
| apic_mode                    | False                                      |
| 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          | True                                       |
| tenant_ref                   | admin                                      |
| license_tier                 | ENTERPRISE_18                              |
| autoscale_polling_interval   | 60 seconds                                 |
+------------------------------+--------------------------------------------+

OpenStack Keystone/Nova/Neutron リソースの要件

OpenStack リソースの要件は次のとおりです。

  1. クラスタの VIP を使用する場合は、NSX Advanced Load Balancer Controlleravilbaas テナントに割り当てる必要があります。管理者権限がない場合、コントローラはコントローラの他のテナントを参照できないため、コントローラと SE が同じテナント(avilbaas テナント)にあると想定します。

  2. フレーバー:コントローラは、パブリック フレーバー、または avilbaas テナントがアクセス可能なフレーバーのみを使用できます。SE にフレーバーを使用するには、avilbaas テナントとフレーバーを共有します。フレーバーを共有した後、SE グループで instance_flavor オプションを設定します。

  3. すべてのテナントでの aviadmin ロールの追加:統合するには、管理者ロールが必要です。

    1. NSX Advanced Load Balancer 管理者ユーザーは、管理者ロールがない場合、テナント ネットワークにポートを作成できません。これは Neutron ポリシーでは変更できません。この問題を解決するために、CC エージェントはテナント範囲のクライアントを使用して仮想サービスの VIP ポートを作成します。

    2. 管理者ロールがない場合や、ネットワーク所有者でない場合、NSX Advanced Load Balancer 管理者ユーザーはテナント ネットワークで作成されたポートに allowed-address-pair エントリを追加できません。そのため、仮想サービスの配置に失敗します。この問題は、ポリシーの変更により解決できます。この問題を解決するには、テナントで NSX Advanced Load Balancer 管理者ユーザーに aviadmin ロールを追加し、上記の「Neutron ポリシーの変更」セクションで説明したようにポリシーを変更します。

  4. テナント ネットワーク

    1. プロバイダ モードで展開する場合、テナント ネットワークは、avilbaas などの NSX Advanced Load Balancer 管理テナントと共有する必要があります。共有しないと、コントローラは SE をネットワークに接続できません。たとえば、

      neutron rbac-create --target-tenant [avilbaas-tenant-uuid] --action access_as_shared --type network [network-uuid]
    2. プロバイダ モード以外(専用 SE モード、テナント コンテキストの SE)で展開する場合、管理ネットワークは、NSX Advanced Load Balancer を展開するすべてのテナントで共有する必要があります。仮想サービス VIP やバックエンド プール メンバーの作成に使用するテナント ネットワークは、avilbaas テナントと共有する必要はありません。

  5. FIP 割り当て:テナントで、テナント ネットワークをプロバイダ ネットワークに接続するルーターを作成する必要があります。管理テナント(または他のテナント)でルーターを作成した場合、コントローラは、これらのルーターにアクセスしたり、FIP 割り当てに使用するプロバイダ ネットワークを特定したりすることはできません。

注:

フローティング IP アドレス機能を使用する場合、仮想サービスの VIP 要求でフローティング ネットワーク/サブネット UUID を手動で渡しても、ルーターが別のテナントに作成されている場合は使用できません。これは、アクセスが仮想サービスの作成先であるテナントに制限されていることが原因です。コントローラがルーターに接続されている VIP ネットワークを表示できない場合は、FIP ネットワークも表示されません。FIP ネットワークがテナント ルーターのインターフェイスからプロバイダ ネットワークに派生し、ルーターが VIP ネットワークをホストするテナントである必要があります。

アップグレード機能

既存の環境では、管理者ロールを持つ管理者の認証情報が使用されます。クラウドを再構成し、aviadmin ロールを持つ新しい認証情報を使用できます。

ケース 1:

OpenStack 管理テナントを NSX Advanced Load Balancer 管理テナントとして使用します。管理テナントで管理者ユーザーに aviadmin ロールを追加し、すべてのテナント ネットワークを管理テナントと共有する必要があります。この機能を使用するためにアップグレードしても、サービス中断は発生しません。

ケース 2:

OpenStack の管理以外のテナントを NSX Advanced Load Balancer 管理テナントとして使用します。この場合、このテナントで管理者ユーザーに aviadmin ロールを追加します。NSX Advanced Load Balancer クラウドの構成で、このテナントを NSX Advanced Load Balancer 管理テナントとして構成します。すべてのテナント ネットワークをこのテナントと共有する必要があります。この機能を使用するためにアップグレードしても、サービス中断は発生しません。

ケース 3:

クラウドの NSX Advanced Load Balancer 管理テナントを変更します。管理テナントを使用して SE を起動するため、インスタンスによっては混乱を招きます。別の管理テナントを構成すると、他のテナントを使用してすべての SE をホストすることになります。これは混乱を招くため、メンテナンス ウィンドウですべての仮想サービスを無効または有効にする必要があります。