consul
traefik

Traefik と consul を使って web サービスをお気軽にぶら下げる

More than 1 year has passed since last update.


Traefik とは

Træfɪk is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease.

Traefik は、GO で書かれたマイクロサービス用のリバースプロキシです。

https://traefik.io/


consul の KV から設定を読むようにして起動する

consul も一緒に入れたコンテナ作るべきか小一時間悩みましたが、同じサーバに consul のコンテナが居るので、そちらへつなぐようにしました。

# traefik.toml.base

traefikLogsFile = "/data/log/traefik.log"
accessLogsFile = "/data/log/access.log"
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]

[web]
address = ":8080"

[consul]
# 手元のバージョンだと --consul.endpoint が効かなかったので、toml で指定
# sed で書き換えてるよ
endpoint = "172.17.0.1:8500"
watch = true
prefix = "traefik"

#!/bin/sh

consulip=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' consul-client)
cat traefik.toml.base | sed -e "/^endpoint/s,endpoint.*,endpoint = \"$consulip:8500\"," > traefik.toml

docker run -itd --name=traefik -p 80:80 \
-v /data/traefik:/data \
-v $PWD/traefik.toml:/etc/traefik/traefik.toml \
traefik


ぶら下げるコンテナ

hmm.example.com へのアクセスが来たら、hmm コンテナの 3000 番につなぐ。

#!/bin/sh

consulip=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' consul-client)

# 3000 番で何か起動してるコンテナ
docker run -itd --name=hmm woremacx/hmm
hmm=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' hmm)

# backend 1
curl -i -H "Accept: application/json" -X PUT -d "http://$hmm:3000" http://$consulip:8500/v1/kv/traefik/backends/backend1/servers/server1/url
curl -i -H "Accept: application/json" -X PUT -d "10" http://$consulip:8500/v1/kv/traefik/backends/backend1/servers/server1/weight

# frontend 1
curl -i -H "Accept: application/json" -X PUT -d "backend1" http://$consulip:8500/v1/kv/traefik/frontends/frontend1/backend
curl -i -H "Accept: application/json" -X PUT -d "true" http://$consulip:8500/v1/kv/traefik/frontends/frontend1/passHostHeader
curl -i -H "Accept: application/json" -X PUT -d "http" http://$consulip:8500/v1/kv/traefik/frontends/frontend1/entrypoints
curl -i -H "Accept: application/json" -X PUT -d "Host:hmm.example.com" http://$consulip:8500/v1/kv/traefik/frontends/frontend1/routes/hmm.example.com/rule


おしまい

consul の KV に設定をぶっ込むだけで設定が反映されて非常に簡単でした。