NSX Advanced Load Balancer Controller クラスタ インスタンスは、工場出荷時のデフォルト設定とは異なる、共通の 1 つの初期コントローラ構成から展開することが必要になる場合が多くあります。これを実現するには、必要なオブジェクト定義を含む JSON ファイルを作成し、それを以降のコントローラの展開に使用します。その後、リーダーとして、フォロワーを追加してクラスタを作成できます。  初期化された同一の Controller クラスタのセットができるため、それぞれを必要に応じてカスタマイズします。

setup.json の作成

ほとんどの場合、これらのオブジェクトは NSX Advanced Load Balancer REST API セクションを参照して作成できます。

次の例では、8.8.8.8 を DNS 構成に追加してシステム構成を更新しています。

{
    "SystemConfiguration": [
        {
            "dns_configuration": {
                "search_domain": "",
                "server_list": [
                    {
                        "type": "V4",
                        "addr": "8.8.8.8"
                    }
                ]
            }
        }
    ]
}

SSLKeyAndCertificate オブジェクトなどの複雑なオブジェクトの場合は、2 つの構成ファイルに対して diff コマンドを実行することで JSON ファイルを作成できます。典型的な展開では、テスト用のコントローラ環境で setup.json を生成することをお勧めします。生成されたこのファイルは、実際の展開のテンプレートとして使用できます。NSX Advanced Load Balancer Controller 構成スナップショットは、export CLI コマンドを使用して作成できます。

> export configuration file before.cfg
Please enter the passphrase to encrypt configuration:
Downloaded the attachment to before.cfg
Completed writing the export configuration to before.cfg

必要に応じて、ユーザー インターフェイスまたは CLI を使用してオブジェクトを構成します。

> export configuration file after.cfg
Please enter the passphrase to encrypt configuration:
Downloaded the attachment to after.cfg
Completed writing the export configuration to after.cfg

これ以外にも、Python スクリプトを使用して構成の差分を取得できます。NSX Advanced Load Balancer は、別のコントローラの初期構成をカスタマイズするために明示的に記述されています。

/opt/avi/scripts/diff_config.py -f before.cfg -t after.cfg > setup.json

ユーザー パスワードは、User オブジェクトを使用して setup.json を作成するときに、次のコードを使用して暗号化できます。

/opt/avi/scripts/avi_passwd_tool.py --password admin --salt fF6ngAb3pvPgpbkdf2_sha256$100000$fF6ngAb3pvPg$ijkEue1M9fR/qsLVgzvPe7N0VvOxIjDiJVmK9NIx+0Q=$6$fF6ngAb3pvPg$CqAKtNRZtgXtJchrPmoxUgdLFM7rFGmta1tWb7sobQI4iSZAY2QuAOBNtboVGrmDYPMCvqXXH6lARr9RedCJT.

setup.json を使用した展開

Python スクリプトによって作成された setup.json ファイルを使用してコントローラを展開する前に、構成バックアップを作成することをお勧めします。次のコマンドを使用して、既存の構成の暗号化されたバックアップを作成します。

/opt/avi/python/bin/portal/manage.py export_configuration --file ~/setup-old.json --passphrase secret

Mesos/ベアメタル展開の場合

コントローラ コンテナにある、/vol としてマウントされたホストのパーシステント ディレクトリに setup.json をコピーします。avi_baremetal スクリプトを使用している場合、デフォルトの場所は、ホストの /opt/avi/controller/data です。コントローラをコンテナとして展開する場合は、setup.jsonavi_baremetal_setup.py スクリプトに追加の引数として渡すことができます。次はその例です。

./avi_baremetal_setup.py -c -cc 4 -cm 12 -i 10.10.22.108 -m 10.10.22.108 --setup-json /root/configs/avi-setup.json

仮想マシンとしてのコントローラの展開の場合

コントローラが起動するまで待機します。コントローラに構成ファイルを /var/lib/avi/etc/setup.json として配置します(ファイル名に注意してください)。再起動時またはフレッシュ スタート時に、NSX Advanced Load Balancer Controller は指定された setup.json ファイルを使用して自己構成します。

reboot

OpenStack 展開の場合

setup.json のサイズが許容範囲内の場合、UserData 構成サイズは 48 KB に制限されます。

># cfgdrv userdata
>nova boot --config-drive true --image avicontroller --key-name mykey --flavor 4 --user-data /root/my-avi-config.json --nic net-id=7402bf4f-240f-4172-99c1-90000ea45f86 avicontrollers

># metasvc userdata
>nova boot --config-drive false --image avicontroller --key-name mykey --flavor 4 --user-data /root/my-avi-config.json --nic net-id=7402bf4f-240f-4172-99c1-90000ea45f86 avicontrollers

setup.json のサイズが許容範囲を超える場合は、setup.json をアップロードし、展開フェーズで参照できます。

ユーザー データは、「url」または「file」タグを使用してこのファイルを参照できます。次に示すのは、URL を使用した my-avi-config-url.json の例です。

{
 "META": {
     "init_config": {
         "url": "https://s3-us-west-2.amazonaws.com/avi-controller-configs/linuxserver-awsipam-setup.json"
     }
   } 
}

次に示すのは、ファイルパスを使用した my-avi-config-url.json の例です。

{
  "META": {
    "init_config": {
      "file": "/vol/linuxserver-awsipam-setup.json"     
    }
  } 
}

展開の例を次に示します。

># cfgdrv userdata indirection
>nova boot --config-drive true --image avicontroller --key-name mykey --flavor 4 --user-data /root/my-avi-config-url.json --nic net-id=7402bf4f-240f-4172-99c1-90000ea45f86 --min-count=3 --max-count=3 avicontrollers

># metasvc userdata indirection
nova boot --config-drive false --image avicontroller --key-name mykey --flavor 4 --user-data /root/my-avi-config-url.json --nic net-id=7402bf4f-240f-4172-99c1-90000ea45f86 --min-count=3 --max-count=3 avicontrollers

AWS 展開の場合

UserData 構成サイズは 16KB に制限されています。setup.json のサイズが許容範囲内の場合は、AWS Web コンソールからの起動中に、my-avi-config.json を切り取って user-data セクションに貼り付けます。

# metasvc userdata  ec2-run-instances ami-b7ea27d7 -f /root/my-avi-config.json -t c4.2xlarge -s subnet-62f1b707 -g sg-642d8d02

setup.json のサイズが許容範囲を超える場合は、AWS Web コンソールからの起動中に、my-avi-config-url.json を切り取って user-data セクションに貼り付けます。

# metasvc userdata indirection ec2-run-instances ami-b7ea27d7 -f /root/my-avi-config-url.json -t c4.2xlarge -s subnet-62f1b707 -g sg-642d8d02

my-avi-config-url.json OpenStack セクションの説明と同様の形式に従っています。S3 バケットのサンプル my-avi-config-url.json ファイルを次に示します。

{
  "META": {
    "init_config": {
      "s3": "avi-controller-configs/linuxserver-awsipam-setup.json"
    }
  } 
}

S3 バケットに setup.json をアップロードする場合:

  • パブリック:url スタイルまたは s3 スタイルを使用します。

  • 仮想マシンの RBAC を介したプライベート:s3 スタイルを使用します。IAM を使用してオブジェクトを s3-get できるようにするには、仮想マシン ロールに s3:GetObject アクションが許可されている必要があります。

  • S3-bucket の RBAC を介したプライベート:s3 スタイルを使用します。仮想マシン ロールには AWS アクセス権が必要です。オブジェクトをダウンロードするため、S3 バケットには、アカウントかユーザーの権限、または仮想マシンのロールが必要です。

バケット ポリシーの例

{
   "Version": "2012-10-17",
   "Statement": [
     {
       "Sid": "AddPerm",
       "Effect": "Allow",
       "Principal": {
         "AWS": [
           "arn:aws:iam::139284885014:role/BM-AviController-Role",
           "arn:aws:iam::139284885014:root"
          ]
        },
       "Action": "s3:*",
       "Resource": "arn:aws:s3:::avi-controller-configs/*"
     }
   ]
 }

Azure 展開の場合

Azure 環境で初期構成を用意するには次の 2 つの方法があります。

  • Azure CLI の使用

  • ARM (Azure Resource Manager) テンプレートの使用

Azure CLI の使用

NSX Advanced Load Balancer Controller が Azure CLI を使用して展開されている場合は、展開中に JSON ファイルを指定できます。

az vm create --resource-group rahulr-jenkins-resource-group --location centralus --image avi-networks:avi-vantage-adc:avi-vantage-adc-byol:17.2.7 --name Avi-Test-Controller --size Standard_F8s --subnet /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Network/virtualNetworks/<vnet_name>/subnets/rahulr-subnet --public-ip-address "" --nsg "" --custom-data ./initial_config.json

Azure ARM テンプレートの使用

NSX Advanced Load Balancer Controller が ARM テンプレートを使用して展開されている場合、JSON データは Azure ポータルの [カスタム展開] 画面で [カスタム データ] として示されます。[ホーム] > [テンプレート] > [avi-cluster-managed-disks-market place] > [カスタム展開] の順に移動します。



[カスタム データ] フィールドで、必要な JSON テンプレートを使用します。参考までに、次の JSON テンプレートは 8.8.8.8 を DNS 構成に追加するためのテンプレートです。以下に示す JSON 構成をコピーし、ARM テンプレートの [カスタム データ] フィールドに追加します。

{
    "SystemConfiguration": [
        {
            "dns_configuration": {
                "search_domain": "",
                "server_list": [
                    {
                        "type": "V4",
                        "addr": "8.8.8.8"
                    }
                ]
            }
        }
    ]
}