このセクションでは、管理者以外の権限を使用した 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 管理者ユーザーを次のように作成できます。
次のコマンドを使用して、管理者認証情報を使用して OpenStack に
aviadmin
ロールを作成します。source admin-openrc.sh
次のコマンドを使用して、OpenStack Cloud に
aviuser
という名前のユーザーを作成します。config $ openstack user create --password avi123 --description 'Avi Admin user' aviuser
次のコマンドを使用して、
aviadmin
ロールを作成します。$ openstack role create aviadmin
次のコマンドを使用して、OpenStack の NSX Advanced Load Balancer 管理テナントとして使用する
avilbaas
という名前のプロジェクトを作成します。Cloud config $ openstack project create --description 'Avi LBaaS Project' avilbaas
次のコマンドを使用して、
avilbaas
テナントでaviuser
ユーザー、aviadmin
ロールを割り当てます。$ openstack role add --project avilbaas --user aviuser aviadmin
NSX Advanced Load Balancer ロード バランサ サービスが必要な他のプロジェクトに
aviuser
ユーザー、aviadmin
ロールを追加します。CLI コマンドは次のとおりです。$ openstack role add --project demo --user aviuser aviadmin
次のコマンドを使用して、すべてのテナントで
aviuser
に割り当てられているロールを確認します。$ openstack role assignment list --user aviuser --names
デフォルト以外のドメインの場合は、NSX Advanced Load Balancer 管理者ユーザーと NSX Advanced Load Balancer 管理テナントの作成時に適切なドメインを使用します。
OpenStack ポリシーの変更
NSX Advanced Load Balancer Controller は、Keystone、Nova、Neutron、および Glance OpenStack サービスと通信します。サービスごとに必要なポリシー変更のリストを次に示します。
Keystone ポリシーの変更
Keystone ポリシーを変更する手順は次のとおりです。
たとえば、keystone.conf ファイルでポリシー ファイルを特定します。
[oslo_policy] policy_file = keystone.policy.yaml
Keystone ポリシー ファイル(keystone.policy.yaml など)で、
aviadmin
ロールを定義します。"aviadmin_role": "role:aviadmin"
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"
次のコマンドを使用して、Keystone サービスを再起動します。
apache2ctl restart
Nova ポリシーの変更
Nova ポリシーを変更する手順は次のとおりです。
nova.conf ファイルからポリシー ファイルを特定します。
[oslo_policy] policy_file = nova.policy.yaml
Nova ポリシー ファイルで、
aviadmin
ロールを定義します。"aviadmin_role": "role:aviadmin"
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"
nova-api
サービスを再起動します。service nova-api restart
Neutron ポリシーの変更
Neutron ポリシーを変更する手順は次のとおりです。
neutron.conf ファイルからポリシー ファイルを特定します。
[oslo_policy] policy_file = neutron.policy.json
neutron.policy
ファイルでaviadmin
ロールを定義します (neutron.policy.json):
"aviadmin_role": "role:aviadmin",
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",
次のコマンドを使用して、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_admin
を True に設定できます。これにより、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 リソースの要件は次のとおりです。
クラスタの VIP を使用する場合は、NSX Advanced Load Balancer Controller を
avilbaas
テナントに割り当てる必要があります。管理者権限がない場合、コントローラはコントローラの他のテナントを参照できないため、コントローラと SE が同じテナント(avilbaas
テナント)にあると想定します。フレーバー:コントローラは、パブリック フレーバー、または
avilbaas
テナントがアクセス可能なフレーバーのみを使用できます。SE にフレーバーを使用するには、avilbaas
テナントとフレーバーを共有します。フレーバーを共有した後、SE グループでinstance_flavor
オプションを設定します。すべてのテナントでの
aviadmin
ロールの追加:統合するには、管理者ロールが必要です。NSX Advanced Load Balancer 管理者ユーザーは、管理者ロールがない場合、テナント ネットワークにポートを作成できません。これは Neutron ポリシーでは変更できません。この問題を解決するために、CC エージェントはテナント範囲のクライアントを使用して仮想サービスの VIP ポートを作成します。
管理者ロールがない場合や、ネットワーク所有者でない場合、NSX Advanced Load Balancer 管理者ユーザーはテナント ネットワークで作成されたポートに
allowed-address-pair
エントリを追加できません。そのため、仮想サービスの配置に失敗します。この問題は、ポリシーの変更により解決できます。この問題を解決するには、テナントで NSX Advanced Load Balancer 管理者ユーザーにaviadmin
ロールを追加し、上記の「Neutron ポリシーの変更」セクションで説明したようにポリシーを変更します。
テナント ネットワーク
プロバイダ モードで展開する場合、テナント ネットワークは、
avilbaas
などの NSX Advanced Load Balancer 管理テナントと共有する必要があります。共有しないと、コントローラは SE をネットワークに接続できません。たとえば、neutron rbac-create --target-tenant [avilbaas-tenant-uuid] --action access_as_shared --type network [network-uuid]
プロバイダ モード以外(専用 SE モード、テナント コンテキストの SE)で展開する場合、管理ネットワークは、NSX Advanced Load Balancer を展開するすべてのテナントで共有する必要があります。仮想サービス VIP やバックエンド プール メンバーの作成に使用するテナント ネットワークは、
avilbaas
テナントと共有する必要はありません。
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 をホストすることになります。これは混乱を招くため、メンテナンス ウィンドウですべての仮想サービスを無効または有効にする必要があります。