概要
さくらのクラウドのロードバランサとそれに付帯するVIPを使って
Docker swarm上にデプロイしたコンテナへの可用性高め(たぶん)の
アクセス経路を作る。
経緯
DockerSwarmでデプロイしたコンテナを自動的にtraefikに登録する で
traefikを使ったものの、vipの設定やソーリーサーバの設定やそれらの管理が
面倒くさいなぁって思ったので。
前提
- docker swarmとswarm上でtraefikが動く環境は出来ている
- docker swarmを構成するホストのOSはubuntu 20.04 LTS
ubuntu@swarm-manager001:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
ubuntu@swarm-manager001:~$
さくらのクラウドのロードバランサを作る
公式のマニュアルに沿ってGUIからポチポチして作る。
公式のマニュアルは https://manual.sakura.ad.jp/cloud/network/load-balancer.html です。
- 今回はVIPを "192.168.1.201" とする
- ソーリーサーバは今回は省く
- ポート番号は80で待ち受ける
- 実サーバにはmanagerのnodeを登録しておく
実サーバ側の設定を行う
公式マニュアルの https://manual.sakura.ad.jp/cloud/network/load-balancer.html#id15 に書いている事をする。
補足しつつ書き出すと以下のようになる。
カーネルパラメータの設定
/etc/sysctl.conf の最後に
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
を追加して、 $ sudo sysctl -p
で反映させる。
ネットワークの設定
/etc/netplan/01-netcfg.yaml (他のファイル名の場合は適宜読み替える)に
以下の感じで追記する。
lo:
match:
name: lo
addresses:
- ロードバランサのVIP
e.g.
network:
ethernets:
eth0:
addresses:
- 192.168.1.20/24
dhcp4: 'no'
dhcp6: 'no'
gateway4: 192.168.1.254
nameservers:
addresses:
- 133.242.0.3
- 133.242.0.4
search:
- localdomain
lo:
match:
name: lo
addresses:
- 192.168.1.201/32 #ロードバランサのVIP
renderer: networkd
version: 2
iptables の設定
以下を実行する。
sudo iptables -t nat -A PREROUTING -d ロードバランサのVIP -j REDIRECT
e.g.
sudo iptables -t nat -A PREROUTING -d 192.168.1.201 -j REDIRECT
ロードバランサのVIPにアクセスしてみる!
httpかつtraefikのルールに合致したアクセスしてバランシングされてたら出来上がり!
その他
自分のドメインを持っていたら、さくらのクラウドのDNSアプライアンスを使って、
*.lb.自分の.ドメイン A ロードバランサのVIP
みたいなAレコードを
DNSアプライアンスに設定すると名前解決出来るようになって楽しくなる。