Azure

リバースプロキシとしてAzure Container InstancesにHaproxyを導入してみる

はじめに

インターナルのLoad Balancer の代わりにHaproxyを導入したい、だけれども仮想マシンのメンテナンスしたくないので他に方法はないのかということでAzure Container Instancesを利用した方法を紹介します。

前回は同様な方法でAzure Web Appsに導入しました。

リバースプロキシとしてAzure Web AppsにHaproxyを導入してみる - 技術的な何か。
リバースプロキシとして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よりはコスパは良いと思います。また柔軟な設定が行えると思います。

-Azure
-