vcd-cli とは
vcd-cli
vcd-cli は、 VMware Cloud Director 向けのコマンド ライン インターフェイスです。詳細については、 https://vmware.github.io/vcd-cli/ を参照してください。
IBM Cloud for VMware Solutions Shared とは
VMware Solutions Shared の概要
IBM Cloud™ for VMware Solutions Shared では、VMware 仮想データ・センター環境のデプロイメントとして、標準化されたデプロイメントとカスタマイズ可能なデプロイメントのどちらかを選択できます。 VMware Solutions Shared の仮想データ・センター・インスタンスを使用すると、IBM がホストする VMware インフラストラクチャー上で、VMware ワークロードを素早くシームレスにクラウドへマイグレーションまたはデプロイできます。 IBM は、VMware vCloud Director が IBM Cloud 上で稼働している、セルフサービスでオンデマンドの VMware クラウド・コンピューティング・プラットフォームを提供します。 この Infrastructure as a Service (IaaS) の オンデマンド・オファリングには、必要に応じて、特定の仮想 CPU (vCPU)、ストレージ、vRAM、ネットワーク、および IP を使用するためのオプションがあります。
インストール
こちらに手順があります。
% vcd version
vcd-cli, VMware vCloud Director Command Line Interface, 23.0.0
ログイン
組織名を使ってログインします。
% vcd login \
daldir01.vmware-solutions.cloud.ibm.com \
00000000000000000000000000000000 \
admin \
--password ******** \
--vdc khayama-vdc \
-w -i
admin logged in, org: '00000000000000000000000000000000', vdc: 'khayama-vdc'
初期設定の確認
プロビジョニング直後の設定を確認します。
システム
VMware Cloud Director のバージョンが確認できます。
% vcd system info
property value
---------------------- -------------------------------------------
Description 9.7.0.15470680 Thu Jan 16 14:17:36 UTC 2020
Link
OrganizationReferences
RightReferences
RoleReferences
name VMware vCloud Director
カタログ
IBM Cloud に最適化されたテンプレートカタログが用意されています。
% vcd catalog list
creationDate description isPublished isShared name numberOfMedia numberOfVAppTemplates orgName ownerName publishSubscriptionType status version
------------------------ ------------- ------------- ---------- -------------- --------------- ----------------------- -------------- ----------- ------------------------- -------- ---------
2019-11-15T16:42:45.023Z true true Public Catalog 0 6 public-catalog system PUBLISHED RESOLVED 69
% vcd catalog list "Public Catalog"
catalogName entityType isPublished name ownerName status storageKB vdcName
-------------- ------------ ------------- ------------------------------ ----------- -------- ----------- ----------------------------
Public Catalog vapptemplate true CentOS-8-Template-Official system RESOLVED 33554432 dal10-w02-public-catalog-vdc
Public Catalog vapptemplate true CentOS-7-Template-Official system RESOLVED 67108864 dal10-w02-public-catalog-vdc
Public Catalog vapptemplate true RedHat-8-Template-Official system RESOLVED 33554432 dal10-w02-public-catalog-vdc
Public Catalog vapptemplate true Windows-2019-Template-Official system RESOLVED 41943040 dal10-w02-public-catalog-vdc
Public Catalog vapptemplate true RedHat-7-Template-Official system RESOLVED 33554432 dal10-w02-public-catalog-vdc
Public Catalog vapptemplate true Windows-2016-Template-Official system RESOLVED 41943040 dal10-w02-public-catalog-vdc
ユーザー
初期は admin
ユーザーのみです。
% vcd user list
deployedVMQuota fullName identityProviderType isEnabled isLdapUser isLocked name numberOfDeployedVMs numberOfStoredVMs roleNames storedVMQuota
----------------- ---------- ---------------------- ----------- ------------ ---------- ------ --------------------- ------------------- -------------------------- ---------------
0 INTEGRATED true false false admin 1 1 Organization Administrator 0
Edge Gateway
Edge Gateway の情報が確認できます。
% vcd gateway list
name
-------------------
edge-dal10-bd2b9a98
% vcd gateway list-config-ip-settings edge-dal10-bd2b9a98
external_network gateway ip_address
------------------------------- --------------------- ------------------
dal10-w02-tenant-external ['52.117.a.1/24'] ['52.117.a.x']
dal10-w02-service01 ['52.117.b.1/24'] ['52.117.b.y']
DLR_to_EDGE_edge-dal10-bd2b9a98 ['10.255.255.249/30'] ['10.255.255.249']
IBM Cloud のプライベートネットワーク内にある共通サービス向けのスタティックルートがあります。
- IaaS endpoints (161.26.0.0/16)
- service endpoints (166.9.0.0/16)
% vcd gateway services static-route list edge-dal10-bd2b9a98
MTU Network Next Hop
----- ------------- ------------
1500 161.26.0.0/16 52.117.b.2
1500 166.9.0.0/16 52.117.b.2
デフォルトでは、Edge Gateway を通るすべての通信がブロックされています。
% vcd gateway services firewall list edge-dal10-bd2b9a98
ID name ruleType
------ -------------------------------- --------------
131074 firewall internal_high
131075 highAvailability internal_high
131076 dns internal_high
131073 default rule for ingress traffic default_policy
Storage Policies
4つのストレージポリシーを使うことができます。
vcd search orgVdcStorageProfile
id iopsAllocated iopsLimit isDefaultStorageProfile isEnabled isVdcBusy name numberOfConditions storageLimitMB storageUsedMB vdc vdcName
------------------------------------ --------------- ----------- ------------------------- ----------- ----------- ------------ -------------------- ---------------- --------------- --------------------------------------------------- -----------
212775c5-5667-4a6e-ab71-f34ab774b71d 0 15000000 true true false 4 IOPS/GB 0 0 0 urn:vcloud:vdc:f8346b11-6ed7-4fbe-b0d2-f1d14e3c290c khayama-vdc
dc8498ee-5c71-4503-9c4e-65a49884a73c 0 15000000 false true false 10 IOPS/GB 0 0 0 urn:vcloud:vdc:f8346b11-6ed7-4fbe-b0d2-f1d14e3c290c khayama-vdc
eb07e7fe-1818-4c11-b4d7-3cc63fcd182f 0 0 false true false 0.25 IOPS/GB 0 0 0 urn:vcloud:vdc:f8346b11-6ed7-4fbe-b0d2-f1d14e3c290c khayama-vdc
fe0faed7-45a6-4be6-82ea-9e5d46c4bb4c 0 15000000 false true false 2 IOPS/GB 1 0 0 urn:vcloud:vdc:f8346b11-6ed7-4fbe-b0d2-f1d14e3c290c khayama-vdc
構成
簡単な構成をコマンドで実施します。
ユーザー作成
vcd user create khayama Passw0rd! 'Organization Administrator' --enabled
Edge Gateway ファイアウォール
ping
Edge Gateway への ping 通信を許可します。
#!/bin/bash
export PING_RULE_NAME=ping_from_external_to_edge
echo $PING_RULE_NAME
export EDGE_NAME=`vcd gateway list | grep edge`
echo $EDGE_NAME
export EDGE_EXTERNAL_IP=`vcd gateway list-config-ip-settings "$EDGE_NAME" | grep tenant | awk '{print $3}' | cut -d"'" -f2 | cut -d"'" -f1`
echo $EDGE_EXTERNAL_IP
vcd gateway services firewall create $EDGE_NAME \
--name $PING_RULE_NAME \
--action accept \
--type User \
--disabled \
--logging-enabled
export PING_RULE_ID=`vcd gateway services firewall list "$EDGE_NAME" | grep "$PING_RULE_NAME" | awk '{print $1}'`
echo $PING_RULE_ID
vcd gateway services firewall update $EDGE_NAME $PING_RULE_ID \
--destination $EDGE_EXTERNAL_IP:ip \
--service icmp any any
vcd gateway services firewall enable $EDGE_NAME $PING_RULE_ID
ssh
Edge Gateway への ssh 通信を許可します。
#!/bin/bash
export SSH_RULE_NAME=ssh_from_external_to_edge
echo $SSH_RULE_NAME
export EDGE_NAME=`vcd gateway list | grep edge`
echo $EDGE_NAME
export EDGE_EXTERNAL_IP=`vcd gateway list-config-ip-settings "$EDGE_NAME" | grep tenant | awk '{print $3}' | cut -d"'" -f2 | cut -d"'" -f1`
echo $EDGE_EXTERNAL_IP
vcd gateway services firewall create $EDGE_NAME \
--name $SSH_RULE_NAME \
--action accept \
--type User \
--disabled \
--logging-enabled
export SSH_RULE_ID=`vcd gateway services firewall list "$EDGE_NAME" | grep "$SSH_RULE_NAME" | awk '{print $1}'`
echo $SSH_RULE_ID
vcd gateway services firewall update $EDGE_NAME $SSH_RULE_ID \
--destination $EDGE_EXTERNAL_IP:ip \
--service tcp any 22
vcd gateway services firewall enable $EDGE_NAME $SSH_RULE_ID
Edge Gateway の SSH 有効化はポータルで行う必要があります。
vm_outbound
仮想マシンからのアウトバウンド通信を許可します。
#!/bin/bash
export OUT_RULE_NAME=outbound_from_vm_to_any
echo $OUT_RULE_NAME
export VM_NET="192.168.1.0/24"
echo $VM_NET
export EDGE_NAME=`vcd gateway list | grep edge`
echo $EDGE_NAME
vcd gateway services firewall create $EDGE_NAME \
--name $OUT_RULE_NAME \
--action accept \
--type User \
--disabled \
--logging-enabled
export OUT_RULE_ID=`vcd gateway services firewall list "$EDGE_NAME" | grep "$OUT_RULE_NAME" | awk '{print $1}'`
echo $OUT_RULE_ID
vcd gateway services firewall update $EDGE_NAME $OUT_RULE_ID \
--source $VM_NET:ip
vcd gateway services firewall enable $EDGE_NAME $OUT_RULE_ID
corp_inbound
企業ネットワークからのインバウンド通信を許可します。
#!/bin/bash
export IN_RULE_NAME=inbound_from_corp_to_any
echo $IN_RULE_NAME
export CORP_NET="203.141.91.0/24"
echo $CORP_NET
export EDGE_NAME=`vcd gateway list | grep edge`
echo $EDGE_NAME
vcd gateway services firewall create $EDGE_NAME \
--name $IN_RULE_NAME \
--action accept \
--type User \
--disabled \
--logging-enabled
export IN_RULE_ID=`vcd gateway services firewall list "$EDGE_NAME" | grep "$IN_RULE_NAME" | awk '{print $1}'`
echo $IN_RULE_ID
vcd gateway services firewall update $EDGE_NAME $IN_RULE_ID \
--source $CORP_NET:ip
vcd gateway services firewall enable $EDGE_NAME $IN_RULE_ID
VDC Network
ネットワークを定義して作成します。
#!/bin/bash
export NW_NAME=routed_192_168_1_0_24
echo $NW_NAME
export GW_CIDR="192.168.1.1/24"
echo $GW_CIDR
export EDGE_NAME=`vcd gateway list | grep edge`
echo $EDGE_NAME
vcd network routed create $NW_NAME \
-g $EDGE_NAME \
--subnet $GW_CIDR \
--distributed-interface-enabled
DHCP
DHCP を定義して作成します。
#!/bin/bash
export EDGE_NAME=`vcd gateway list | grep edge`
echo $EDGE_NAME
vcd gateway services dhcp-pool create $EDGE_NAME \
--range 192.168.1.2-192.168.1.254 \
--gateway-ip 192.168.1.1 \
--primary-server 161.26.0.10 \
--secondary-server 161.26.0.11 \
--subnet 255.255.255.0
コマンドが正常に完了するために、以下の修正を行う必要がありました。
Update dhcp_pool.py by khayama · Pull Request #530 · vmware/vcd-cli
Update gateway.py by khayama · Pull Request #664 · vmware/pyvcloud
また、Edge Gateway の DHCP 有効化はポータルで行う必要があります。
SNAT
Outbound to Internet
インターネットにアウトバウンド通信ができるように SNAT ルールを作成します。
#!/bin/bash
export EDGE_EXTERNAL_IP=`vcd gateway list-config-ip-settings "$EDGE_NAME" | grep tenant | awk '{print $3}' | cut -d"'" -f2 | cut -d"'" -f1`
echo $EDGE_EXTERNAL_IP
vcd gateway services nat create-snat $EDGE_NAME \
--original-ip 192.168.1.0/24 \
--translated-ip $EDGE_EXTERNAL_IP \
--desc "Outbound to Internet" \
--vnic 0 \
--enabled \
--logging-enabled
Outbound to Common Service
サービスネットワークにアウトバウンド通信ができるように SNAT ルールを作成します。
#!/bin/bash
export EDGE_SERVICE_IP=`vcd gateway list-config-ip-settings "$EDGE_NAME" | grep service | awk '{print $3}' | cut -d"'" -f2 | cut -d"'" -f1`
echo $EDGE_SERVICE_IP
vcd gateway services nat create-snat $EDGE_NAME \
--original-ip 192.168.1.0/24 \
--translated-ip $EDGE_SERVICE_IP \
--desc "Outbound to Common Service" \
--vnic 1 \
--enabled \
--logging-enabled
VM 作成
vApp という VM グループの中に VM を作成します。
DHCP が機能するように、アダプタタイプを変更し、
パスワード変更を行なって反映します。(反映には少し時間がかかります。)
#!/bin/bash
export VAPP_NAME=vapp1
echo $VAPP_NAME
export VM_NAME=vm1
echo $VM_NAME
export NW_NAME=routed_192_168_1_0_24
echo $NW_NAME
# vApp を作成
vcd vapp create $VAPP_NAME \
--catalog "Public Catalog" \
--template CentOS-8-Template-Official \
--network $NW_NAME \
--cpu 4 --memory 8192 --disk-size 40000 \
--storage-profile '2 IOPS/GB' \
--hostname khayama \
--vm-name $VM_NAME
# vApp を停止
vcd vapp stop $VAPP_NAME
# アダプタタイプを VMXNET3 に変更
vcd vm add-nic $VAPP_NAME $VM_NAME \
--adapter-type VMXNET3 \
--primary --connect \
--network $NW_NAME \
--ip-address-mode DHCP
# --ip-address-mode MANUAL --ip-address 192.168.1.10 \
vcd vm delete-nic $VAPP_NAME $VM_NAME --index 0
# パスワードをカスタマイズ設定
vcd vm update-gc-section $VAPP_NAME $VM_NAME \
--admin-password Passw0rd! \
--disable-reset-password \
--disable-admin-password-auto
# パスワードの変更を反映して起動
vcd vm poweron-force-recustomize $VAPP_NAME $VM_NAME
# vApp の情報確認
vcd vapp info $VAPP_NAME
# vApp の強制削除
# vcd vapp delete $VAPP_NAME -y -f
DNAT
最後に外部から VM へアクセスするために DNAT ルールを作成します。
#!/bin/bash
export EDGE_NAME=`vcd gateway list | grep edge`
echo $EDGE_NAME
export VM_IP=`vcd vm info $VAPP_NAME $VM_NAME | grep ip | awk '{print $2}'`
echo $VM_IP
vcd gateway services nat create-dnat $EDGE_NAME \
--original-ip 52.117.a.z \
--translated-ip $VM_IP \
--desc "Inbound to VM" \
--vnic 0 \
--enabled \
--logging-enabled \
--protocol tcp \
--original-Port any \
--translated-Port any
DNAT 用のパブリック IP は IBM Cloud から払い出されるものを活用できます。
参考
参考 : NSX のバージョン
Edge Gateway に SSH 接続すると以下のコマンドで確認できます。
vse-eb077907-871a-4168-aaf9-2feba09aa8f6-0> show version
Name: NSX Edge
Version: 6.4.6
Build number: 14780962
Kernel: 4.4.185