[Oracle Cloud]OCIのFLB(フレキシブルロードバランサ)で指定のプライベートIPアドレスを設定する

# はじめに
OCIのFLBは、プライベート・ロードバランサとしてインスタンスを作成する際、プライベートIPアドレスを指定することができません。
所属するサブネットのCIDRからランダムでプライベートIPアドレスが割当られます。
しかし、現行システムからLBのIPアドレスを変えられないといった要件等で、IPアドレスを指定の値にしたい場合があります。

今回は、そんな場合に指定のIPアドレスを設定する方法をご紹介します。

# 概要
FLBで割当られるIPアドレスは以下2つです

- Floating IP for VIP private-vip on LB（サービス提供IPアドレス）
- VNIC for LB

:::note info
以前は3つのIPアドレスが割当られていましたが、2022年8月以降に作成されたFLBは仕様が変わり2つになりました。
:::

方法としてはスマートなやり方があるわけではなく、けっこうな力技です。
以下の流れになります。

1. FLBのサブネットを作成する
1. 適当なComputeにVNICを追加し、LBサブネットに所属させる
1. 追加したVNICにセカンダリ・プライベートIPを追加し、LBサブネットを対象IPアドレスともう一つ任意のIPアドレス以外埋める
1. FLBを作成する
1. FLBが希望のIPアドレスであれば完了。違う場合はFLBを削除して再作成する
1. 3.でサブネットを埋めたセカンダリ・プライベートIPを外す

# 1. LBのサブネットを作成する
FLB作成時に所属させるサブネットを作成します。要件次第だと思いますが、可能な限り小さい範囲で作成します。（大きくなると大変です）

今回は10.0.10.0/29として、IPアドレス8つの範囲作成します。
なお、各サブネットで3つのIPアドレスが以下のように予約されているので、実際に使えるのは5つになります。
- 1つ目：10.0.10.0：ネットワークアドレス
- 2つ目：10.0.10.1：デフォルトゲートウェイ
- 最後：10.0.10.7：ブロードキャストアドレス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/3a5154c8-34ee-6cb8-b085-e2d9352c853d.png)

# 2. 適当なComputeにセカンダリVNICを追加し、LBサブネットに所属させる
適当なComnputeの画面の左下から`アタッチされたVNIC`を選択し、`VNICの作成`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/c62df652-0e02-0bc9-c00d-8d4e280080d6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/0b3bf373-1273-3459-fb71-7f90e7fd6d39.png)

追加のVNICを作成します。
ここで指定するサブネットは1.で作成したものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/7646a340-cbd4-2598-0374-c98b079854f1.png)


# 3. 追加したVNICにセカンダリ・プライベートIPを追加し、LBサブネットを対象IPアドレスともう一つ任意のIPアドレス以外埋める

作成したVNICをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/fa2d7738-ff36-3865-138d-1aa30812e9b3.png)


VNICの画面の左下の`IPv4 アドレス`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/b6d21cf0-da66-2a14-6cda-c9766bdc56ef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/f1cbb0d3-d79c-e751-6bef-8bf8d5ec1c41.png)

`セカンダリ・プライベートIPアドレスの割当て`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/1faf8d57-d171-7d42-7fb9-3ef2fde9632b.png)

LBに設定したいIPアドレスと、もう一つ任意のIPアドレスを除き、サブネットのCIDR範囲となるIPアドレスを設定していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/d9d501fb-971b-bb64-64b5-8dae38ab9f69.png)

1つ設定できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/2290e744-fc43-9527-d913-55ba7ec48e9e.png)


今回は10.0.10.5をFLBのIPアドレスとすることとし、もう一つを10.0.10.4としてそれ以外のIPアドレスは埋める形とします。

先述の通り、3つのアドレスは最初から予約されているので使えないので、埋めるとこうなります。
- 10.0.10.0：ネットワークアドレス
- 10.0.10.1：デフォルトゲートウェイ
- 10.0.10.2：セカンダリ・プライベートIP
- 10.0.10.3：セカンダリ・プライベートIP
- 10.0.10.4：空き (FLBのNIC for LB用)
- 10.0.10.5：空き (FLBのFloating IP用)　★これをFLBのIPアドレスにしたい
- 10.0.10.6：セカンダリ・プライベートIP
- 10.0.10.7：ブロードキャストアドレス

VNICのIPアドレス割当としてはこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/dc6732d2-513e-94a7-4e95-2d52df58f313.png)

もしFLBのサブネットのCIDRが大きくなってしまい、IPアドレスを埋めるのが大変という場合はOCI CLIを使ってコマンド実行に変えたり、簡単なスクリプトにすることで作業負荷は軽減できると思います。
また、IPアドレスがたくさんある場合は1つのVNICでは足りないので、複数のVNICを使ってCIDRのIPアドレスを埋めるようにしてください。

# 4. FLBを作成する
FLBを作成します。FLBの画面から`ロード・バランサの作成`をクリックし、任意の内容で作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/213513e9-7beb-648f-6be1-89c6796ce340.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/918f675c-ac39-ae11-5095-80ebd2a503e6.png)

サブネットはFLB用のサブネットを指定して作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/cd3c2092-d2eb-ba48-dffc-c2a8afbce8eb.png)

リクエスト送信後、作成中となります。この時点ではIPアドレスがまだ決まっていないので`使用不可`となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/ce8defe2-c4f4-d2cd-a1aa-0fd391726d7d.png)

# 5. FLBが希望のIPアドレスであれば完了。違う場合はFLBを削除して再作成する
作成後の画面を確認すると、10.0.10.4でした。ここのIPアドレス割り当てはランダムなのですが、希望のIPアドレスではないので右側の赤い`削除`ボタンをクリックしてリトライします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/2c1b0593-802c-c872-3d39-70b55ea8810b.png)

削除されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/06d1bbe6-ffe6-a38e-2c48-7f66f923afb2.png)

改めて作成します。ここからは、4. の手順と同じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/b74575c9-8453-0687-e769-c8c3707bad54.png)

希望のIPアドレスでFLBを作成することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/7dfd29ed-0615-45b8-c4b5-95314fa47a23.png)

割当られたIPアドレスは、OCI CLIを使用することで詳細に確認が可能です。
コマンドは以下です。
```oci network private-ip list --subnet-id <サブネットのOCID>```

また、OCI CLIを利用できる環境が無い場合は、Cloud Shellからも実行が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/345ffffc-a0f4-b5a7-8960-1dd3e87570f1.png)

Cloud ShellにOCI CLIのコマンドを打ち込んで実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/7e7555a0-37ae-fe8b-3145-6978575e5494.png)




一部分のみの抜粋ですが、結果としては以下のように表示されます。
```

    {

      "display-name": "VNIC for LB 
      "ip-address": "10.0.10.4",

    },
    {

      "display-name": "Floating IP for VIP private-vip on LB 
      "ip-address": "10.0.10.5",

    },
```

# 6．サブネットを埋めたセカンダリ・プライベートIPを外す
忘れずに実施してください。
個別にIPアドレスを削除していっても良いですが、不要であればVNIC毎削除で良いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991017/f6fabe21-9b50-9230-4fd7-40d4d067d8de.png)


# 最後に
いつかプライベートIPアドレスを指定する機能がFLBにできるまでの暫定的な方法として、ご活用いただけると幸いです。