IBM Cloud ICLBの動作確認(1) -初期導入編-

##目的
IBM Cloud Load Balancerを活用して、Webサーバへのロードバランスを試してみた。
今回は基本的な構成で、インターネットからICLBそしてWebサーバへの通信が通るまでの確認を目的とする。
三部に分けて記載する予定です。

* 初期導入編（**本ページ**)
* 分散方式編：[IBM Cloud ICLBの初期導入(2) -分散方式編-](https://qiita.com/khoshina/items/993959a09a51a553ebf8)
* レイヤ7編：[IBM Cloud ICLBの初期導入(3) -レイヤ7編-](https://qiita.com/khoshina/items/492c92396844e573e34d)


##環境
* ローカル端末：macOS Catalina 10.15.6 1台
* プラットフォーム:IBMCloud
    * ロードバランサ:IBM Cloud Load Balancer(ICLB) 1サービス(Public to Private)
    * DNSサービス:IBMCloud DNS 1サービス
    * 接続先サーバ:CentOS 7.7.1908(Virtual Server for Classic) 2台


###概要構成図
![スクリーンショット 2020-09-04 23.07.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/0243915c-4435-0ba0-f803-c226ec692c8b.png)


###通信経路
Client -> ICLB(HTTPSアクセス):**認証局証明書デプロイ** -> Server(HTTPアクセス):**証明書不要**

1.インターネット端末よりICLBのFQDNへアクセスする。 -> https://iclb.xcloudyx.com
2.IBMCloud DNSのCNAME情報より、ICLBのPublicIPアドレスがわかる -> kou-iclb01-1160157
3.インターネット端末とICLB間でTLS(SSL)接続を確立する。
4.ICLBの分散アルゴリズムに基づいて、Privateネットワークのサーバ２台にHTTPで分散接続する。


##ICLBのオーダ
`IBM Cloudポータルでの作業`

IBMCloudポータルへログイン後、下記の通り**ロード・バランシングを選択**します。
![IBM_Cloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/adb9e918-0c49-757b-c6b8-9a9308a71ca1.png)

**IBM Cloud Load Balancerを選択**し、**Order IBM Cloud Load Balancerを選択**します。
![IBM_Cloud____Load_Balancers-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/411ec142-eab5-9fd6-580c-947092b8aa81.png)

###オーダ詳細
* Name:ICLBの任意の名前を設定する
    * 実際のホスト名はシステムから払い出させるので指定できない
* Datacenter:ICLBを配置するDCを指定する
    * 実際は指定したデータセンタとは別のデータセンタに冗長構成で導入される。
* TOKデータセンタでは、TOK02/TOK04/TOK05から選択される。[参考IBMCloud Doc](https://cloud.ibm.com/docs/loadbalancer-service?topic=loadbalancer-service-multi-zone-region-mzr-overview/)
* Private Subnet:ICLBを配置するPrivate側のサブネットを選択
* Public IPs:Allocate from a public subnet in this accountを選択
    * アカウントが保有するサブネットを利用するように選択する。

全て入力したら、右ペインの**Createを選択**し、オーダする。
![IBM_Cloud____Local_Load_Balancer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/9a2ea3c1-d504-ce80-a8fb-69967d31579b.png)


##証明書の登録
`IBM Cloudポータルでの作業`

ILCBに導入する証明書を、IBMCloudに登録する。
IBMCloudポータルへログイン後、下記の通り**証明書を選択**します。
![IBM_Cloud-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/5e8296d8-11d5-8fd2-7128-93197650c0eb.png)

発行済の証明書もしくは、自己証明書をインポートするので、**Import SSL Certificateを選択**する。
まともな認証局から発行される証明書で検証する場合、SSL証明書を自動発行する仕組みを利用できる
Let's Encryptがオススメです。より簡単に発行できるサイトを作っている方がいます。 -> [SSLなう!](https://sslnow.ml/)

今回はICLBのFQDNで証明書を発行しておくこと。 -> **iclb.xcloudyx.com**
![IBM_Cloud____SSL_Certificates.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/440d31af-9941-5a23-0ebe-8c1816275044.png)

発行した**証明書**、**秘密鍵**および必要に応じて**中間証明書を選択**し、**Importを選択**する。
![IBM_Cloud____SSL_Certificates-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/826bca71-9129-aeb4-b524-b051a11b9434.png)

##DNS追加
`IBM Cloudポータルでの作業`

ICLBに飛ばすように設定をする
 https://iclb.xcloudyx.com - > ICLBのFQDN
はじめに、ICLBのFQDNを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/a1a5f23b-9476-2899-39e1-4e2ab4f44edc.png)

このFQDNをDNSサーバへ登録する。
今回は、IBMCloud DNSを使っている場合を想定して記載するが、どのDNSサーバでも一緒
下記の通り、**Fowarding Zones**へ移動する。

![IBM_Cloud____DNS_Edit_Zone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/5849cbb7-51f4-390f-d732-a2c956770e1b.png)

自分のドメインを選択する

![IBM_Cloud____DNS_Forward_Zones.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/5d57becf-3ead-b4c2-7c5b-35cc4e3e704d.png)

CNAMEレコードを追加する

* Resource Type:**CNAME**を選択
* Host:このホスト名に来たアクセスをICLBに飛ばす。今回の例では**iclb**
* Point to:ICLBのFQDN + . を記入する
    * 今回は「**acsj-1160157-tok04.clb.appdomain.cloud.**」
    * **<font color="Red">最後のピリオド「.」は超重要なので、忘れないこと</font>**

![スクリーンショット_2020_09_10_21_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/1b7f5c02-7f39-f04e-f3ac-08dc0d8ef466.png)




##ILCBの設定
`IBM Cloudポータルでの作業`

ICLBのオーダ画面と同じ場所から、**今回オーダしたICLBを選択**する。
![IBM_Cloud____Load_Balancers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/6241dec3-3d78-d0ab-f57a-87310cacf058.png)

###Protocol
フロントアクセスを**HTTPS443**とし、バックエンドを**HTTP80**で接続するので、下記の通り選択する。
MethodとSession Stickinessは本記事では扱わない。

* Front-end Protocol: HTTPS
    * Front-end Port:443
* Back-end Protocol:HTTP
    * Back-end Port:80
* Method:Least Connection
* Session Stickiness:今回の検証対象外
* Max Connection:今回の検証対象外
* SSL Certificate:**IBMCloud SSLサービスに登録した証明書がここに出てくるので選択**する 

最後に**Save**を**選択**する。
![IBM_Cloud____Local_Load_Balancer-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/8147970e-60c0-213d-4549-618f2a504841.png)


###Server Instance

**Add Instanceを選択**する。
![IBM_Cloud____Local_Load_Balancer-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/80552a5c-63bd-0c6a-35dc-84049184140d.png)

ICLBからの**分散対象のバックエンドサーバを選択**し、**Saveを選択**する。
![IBM_Cloud____Local_Load_Balancer-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/7346bbf5-ae9a-2ea1-7f55-1421d229ba0b.png)

###Overview

Overviewにて現在のICLBとバックエンドサーバ間のヘルスチェックを確認する。
![IBM_Cloud____Local_Load_Balancer-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/49d40f3b-1926-619d-dd13-56f6baf0e960.png)

##通信経路上のFW許可について
###Public
インターネット -> ICLB間はHTTPS(443)を許可すること
* インターネット -> 165.192.xx.xx の通信TCP443を許可
* インターネット -> 128.168.xx.xx の通信TCP443を許可
Public側のアドレスを調べると、下記の通り。

```
% dig a iclb.xcloudyx.com
kou-iclb01-1160157-tok05.clb.appdomain.cloud. 120 IN A 165.192.xx.xx
kou-iclb01-1160157-tok05.clb.appdomain.cloud. 120 IN A 128.168.xx.xx
```

また、PublicセグメントにFWがある場合は、TCPポート56501を許可する必要がある
参考：[Load Balancer の実行の基本](https://cloud.ibm.com/docs/loadbalancer-service?topic=loadbalancer-service-ibm-cloud-load-balancer-basics#considerations)

###Private

ICLBオーダ時に選択し、PrivateVLANのIPを持っている。
VLANがアサインされているSubnetを見ると、IN Useとなっている。
当たりはつくのだが、確実性がないのでキャプチャするのがベスト

今回はTOK05のVlan2219でオーダしたので、TOK05の当たりはつくのだが
自動で冗長構成になっているので、もうひとつのTOK02 or TOK04のIPは検討がつかない。
結局バックエンドサーバもしくは、経路途中の機器でキャプチャするのが簡単かつ確実。
他に簡単にわかる手段はあるのか？
![IBM_Cloud____Subnet_Details.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/b4c06406-38bf-3edc-c36a-d4f7445a5729.png)


##通信確認
`ローカル端末での作業`
ここまで実施すれば、最低限ロードバランサとして利用できる。
下記の通り、交互に分散できている。

```
% while true; do curl https://iclb.xcloudyx.com; done
server 2
server 3
server 2
server 3
server 2
server 3
server 2
```

##後編はこちら
分散方式編：[IBM Cloud ICLBの初期導入(2) -分散方式編-](https://qiita.com/khoshina/items/993959a09a51a553ebf8)