IBM Cloud Load Balancer(ICLB): session persitanceで設定されるCookie情報の確認

# 1. はじめに

IBM Cloud Load Balancer(ICLB)では、Cookieを使ったSession Persistance機能が利用可能である。このCookieは、`IBMCLB-{Pool UUID}={Backend Server UUID}`となる。
本記事では、これが本当にそうなっているのかをAPIを使って実際に確認する。
<img width="1279" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/394392ac-0b7b-a202-4276-ec06bd4647ec.png">

また、Cookie情報から分かるように、クライアントからのアクセスに対してどのサーバーに割り振るかというだけを識別するための必要最低限な情報しか含まれていないことがわかる。


（参考: [IBM Cloud docs](https://cloud.ibm.com/docs/infrastructure/loadbalancer-service?topic=loadbalancer-service-advanced-traffic-management-with-ibm-cloud-load-balancer#session-persistence)では`IBMCLB+{Backend Server UUID}`と本記事執筆時点では説明されているが、これは間違い。実際は`{Poold UUID}`が入る。

# 2. UUIDの取得

```shell-session:ICLBのIDを取得
# slcli loadbal list
:............................................................................................................................................:
:                                                           IBM Cloud LoadBalancer                                                           :
:........:..........:...............................................:.............:........:...........................:.........:...........:
:   Id   : Location : Address                                       : Description : Public :        Create Date        : Members : Listeners :
:........:..........:...............................................:.............:........:...........................:.........:...........:
: 921608 : Tokyo 2  : xxxxxxxxxxx-1756623-tok02.clb.appdomain.cloud : None        :  Yes   : 2020-03-19T03:01:06-06:00 :    2    :     2     :
:........:..........:...............................................:.............:........:...........................:.........:...........:
```
```shell-session:Backendサーバーの取得
# slcli call-api Network_LBaaS_LoadBalancer getMembers --id=921608 --mask=id,address,uuid,weight
:..............:.........:......................................:........:
:   address    :    id   :                 uuid                 : weight :
:..............:.........:......................................:........:
: xx.xx.xx.xx  : 1083570 : 608830ba-b6d6-49ad-8875-74a9ae3a3bed :   50   :
: xx.xx.xx.xx  : 1083572 : 9773ac1f-81ae-4907-8063-be8a31442616 :   50   :
:..............:.........:......................................:........:
```
```shell-session:リスナーの取得
# slcli call-api Network_LBaaS_LoadBalancer getListeners --id=921608 --mask=id,protocol,protocolPort,uuid
:........:..........:..............:......................................:
:   id   : protocol : protocolPort :                 uuid                 :
:........:..........:..............:......................................:
: 944832 :   HTTP   :      80      : b37b5840-1d92-43e0-8e0e-b58614b371fe :
: 945310 :  HTTPS   :     443      : a64414db-8e7f-4de2-94a5-017492bc20a7 :
:........:..........:..............:......................................:
```
```shell-session:該当リスナーのデフォルトプールを取得
# slcli call-api Network_LBaaS_Listener getDefaultPool --id=944832
:........................:......................................:
:                   name : value                                :
:........................:......................................:
:             createDate : 2020-03-19T03:01:06-06:00            :
: loadBalancingAlgorithm : ROUNDROBIN                           :
:             modifyDate : 2020-03-19T03:04:52-06:00            :
:               protocol : HTTP                                 :
:           protocolPort : 80                                   :
:     provisioningStatus : ACTIVE                               :
:                   uuid : d837d4e5-68ce-4a1a-b4e9-cae277f60f1e :
:........................:......................................:
```

# 3. Cookie情報の取得

確かに、`IBMCLB-{Pool UUID}={Backend Server UUID}`となっている。

```
# while true; do curl -s -I http://xxxxxxxxxxx-1756623-tok02.clb.appdomain.cloud|grep "Set-Cookie"; sleep 1; done
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=9773ac1f-81ae-4907-8063-be8a31442616; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=9773ac1f-81ae-4907-8063-be8a31442616; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=9773ac1f-81ae-4907-8063-be8a31442616; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=9773ac1f-81ae-4907-8063-be8a31442616; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=9773ac1f-81ae-4907-8063-be8a31442616; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=9773ac1f-81ae-4907-8063-be8a31442616; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=9773ac1f-81ae-4907-8063-be8a31442616; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=9773ac1f-81ae-4907-8063-be8a31442616; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
Set-Cookie: IBMCLB-d837d4e5-68ce-4a1a-b4e9-cae277f60f1e=608830ba-b6d6-49ad-8875-74a9ae3a3bed; path=/
^C

```