はじめに
インターナルのLoad Balancer の代わりにHaproxyを導入したい、だけれども仮想マシンのメンテナンスしたくないので他に方法はないのかということでAzure Container Instancesを利用した方法を紹介します。
前回は同様な方法でAzure Web Appsに導入しました。
-
リバースプロキシとしてAzure Web AppsにHaproxyを導入してみる - 技術的な何か。
はじめに Haproxyでリバースプロキシを導入したいけど、仮想マシンのメンテナンスしたくないので他に方法はないのかということでWeb Appsを利用した方法を紹介します。 導入方法はいたって簡単です
level69.net
ただし、これでは外部からのアクセスを分散させることはできますが、内部だけで完結させることができません。
App Service Environmentで構築した場合はできますが、コスパが非常に悪いです。その場合はインターナルのLoad Balanserを配置した方がよいです。
そこで、もっと簡単に安く上げる方法としてContainer Instancesを利用していきたいと思います。
前提条件
- 仮想マシン x3(Backend x2、Frontend x1)
- Backendにはnginxをインストールしてアクセスされていることが分かるようにします。
- プライベートIPアドレスをメモしておく
- Dockerの事前知識
Haproxyを準備する
設定は例になるため読み替えてください。
バックエンドのIPアドレスにはメモしておいたプライベートIPアドレスを指定します。
haproxy.cfg
defaults mode http timeout client 10s timeout connect 5s timeout server 10s timeout http-request 10s frontend myfrontend bind *:80 default_backend myservers backend myservers server server1 10.1.0.4:80 server server2 10.1.0.5:80
Dockerfileを準備します。
FROM haproxy:2.3 COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
ビルドします
docker build -t haproxysample1 .
Docker HubにPushするためにtagを付けます。
docker tag 1e4e1ba01103 jkudo/haproxysample1
Psuh(public)します。事前にdocker login
します。
docker push jkudo/haproxysample1
これでContainer Instancesにデプロイする準備は完了です。
Container Instancesを起動
事前にContainer instances用のサブネットを作成します。
作成時に、サブネットをサービスに委任します。
Microsoft,ContainerInstance/containerGroups
を指定します。
Container InstancesをVNet内に配置する場合はポータルから作成できません。
CloudShellからAzure CLIで導入します(任意)。
コマンドは以下です。
az container create --resource-group [リソースグループ名] --name [名前] --image [DockerHubイメージ名] --vnet [VNet] --subnet [サブネット名]
例
az container create --resource-group demo --name haproxy-container --image jkudo/haproxysample1 --vnet demo-vnet --subnet subnet2
作成された後は、IPアドレスを確認するとプライベートIPアドレスが表示されます。
以上で作成は完了です。
疎通確認
Frontendにログインします。
azureuser@client1:~$ curl 10.1.1.4 backend1 azureuser@client1:~$ curl 10.1.1.4 backend2
それぞれに分散されていることが分かります。
まとめ
Web Appsに導入した場合と同様の方法でHaproxyをインターナルに立ち上げることができます。Container instancesもマネージドサービスなので管理が楽になるかと思います。
また、インターナルのLoad Balancerよりはコスパは良いと思います。また柔軟な設定が行えると思います。