IBMCloud NetScaler VPXの分散設定

##目的
IBM Citrix Netscaler VPXを活用して、Webサーバへのロードバランスを試してみた。
今回はVPXロードバランスの基本機能を確認する。

##環境
* ローカル端末：macOS Catalina 10.15.6 1台
* プラットフォーム:IBMCloud
    * ロードバランサ:Citrix NetScalerVPX NS11.1: Build 64.14.nc 1サービス
    * DNSサービス:IBMCloud DNS 1サービス
    * 接続先サーバ:CentOS 7.7.1908(Virtual Server for Classic) 2台

###概要構成図

![kou検証_日々更新.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/3f73061c-eff8-06ea-29a3-fc9b4c672164.png)


##分散先設定

**Service Groups**もしくは**Services**で分散先のサーバを登録する。
今回は**Service Groups**で実施した。

**Traffic Management** -> **Load Balancing** -> **Service Groups** -> **Add**を選択
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/5fb57a90-177c-0a40-7825-8f4078c93352.png)


* Name:**任意名**
* Protocol:**HTTP**
* CacheType:**SERVER**
* その他:デフォルト

![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/6d467386-4ae1-0509-1375-317434ad95c8.png)

**Service Group Members**の右側にある**>**を選択する。

![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/2183ade8-63e2-4851-eaea-b3a65a44e94e.png)

* IP Address:**分散対象サーバのIPアドレス**
* Port:**HTTPで利用したいポート番号**
* その他:デフォルト

分散対象サーバの数だけこの工程を繰り返して、複数台登録する
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/3d5f2f9d-e5bf-3a52-5ffb-f18547f06ae4.png)

##SSL証明書の登録
VPXのフロント側はHTTPSで待ち受けるため、証明書を登録する。
証明書は公開するFQDNで発行すること。今回は**vpx.xcloudyx.com＊＊で発行している。

**Traffice Management** -> **SSL** -> **Certificates** -> **Server Certificates** -> **Install**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/7d4f91b9-d774-871f-b936-bbb2d61668db.png)

保有している証明書と秘密鍵を登録する。
お試しであれば、Let's Encryptなどでやってみるとよい
Webブラウザから証明書を簡単に発行可能な[こちらLet's Encryptをオススメします](https://sslnow.ml/)
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/ca80e96e-66a3-5825-13de-e5f794ef59fb.png)

##フロント側設定
サービス提供用のフロントVIPを設定する

**Traffic Management** -> **Load Balancing** -> **Virtual Servers** -> **Add**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/a74b830a-3b7c-b2cd-80d3-cf826c52c027.png)

* Name:**任意**
* Protocol:**SSL**
* IP Address:**購入時にオーダしたグローバルIP**
    * クラウドポータルのvpx詳細から見れる
* Port:**SSLで受けるポート番号**

![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/14502907-ef73-161c-78d9-9501c6e4d1df.png)


![IBM_Cloud____Device_Details.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/4b77baa1-06c6-dd74-51d0-21be9fa0e41f.png)

**Load Balancing Virtual Server ServiceGroup Binding**の右にある**>**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/a51fb8af-662a-1dae-1ac2-017ded1a5609.png)


**>**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/a2af058d-4a56-615b-0dd9-eb9500ef4597.png)

**分散先設定**で作成した、**分散先サーバを選択**し、**Select**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/99deb3e8-2f19-8aa3-e373-685ea32ab1a9.png)

**Bind**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/d4ad6f97-53a9-bae7-c890-53efcaa1df14.png)

**Continue**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/b5694b0d-5e25-c630-7356-c0f4724c6ba9.png)

**Certificate** -> **Server Certificate**の右にある**>**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/11fc4bec-f239-0755-0e07-f0462c84f763.png)

**>**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/c974dca6-0f78-0909-cb5f-a98a51d10c9e.png)

**SSL証明書の登録**で設定した、**証明書を選択**し、**Select**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/809dda64-4de4-28b8-e811-309ae8ab8fb8.png)

**Bind**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/9d99a283-cb54-fa7e-e671-c50659d7cff3.png)

**Continue**を選択する。
![Citrix_NetScaler_VPX_-_Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/74256a66-dd42-85ae-18d1-7ff779042f79.png)

##動作確認
ここまでで、単純な負荷分散設定は完了したので、動作確認を実施する。

SSL通信の確認、TLSv1.2で動作していることを確認

```
% curl -v https://vpx.xcloudyx.com
*   Trying 128.168.98.xx...
* TCP_NODELAY set
* Connected to vpx.xcloudyx.com (128.168.98.xx) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / AES256-SHA
```

負荷分散設定、SV11とSV01で交互に分散している事を確認

```
% while true; do curl https://vpx.xcloudyx.com; done
SV11
SV01
SV11
SV01
SV11
SV01
SV11
SV01
SV11
SV01
```