LoginSignup
2
2

More than 5 years have passed since last update.

Tech-circle #4 Consul勉強会 -Extra stage-

Last updated at Posted at 2015-03-25

Tech-circle #4 Consul勉強会 -Extra stage-

おさらい

前回consulクライアント起動時、/opt/consul/scripts/consul-client-start.shを実行するようになっていました。
このスクリプトは、初期起動時にnginxの初期設定を行いconsul agentを起動するというものです。

/opt/consul/scripts/consul-client-start.sh
#!/bin/bash

CONSUL_SV=$1

/bin/cp -rp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.org
/bin/sed -i -e "s/nginx!/$HOSTNAME/g" /usr/share/nginx/html/index.html

/usr/sbin/service nginx start

/usr/local/bin/consul agent \
-node=$HOSTNAME \
-data-dir=/opt/consul/dat \
-config-file=/opt/consul/conf \
-ui-dir=/opt/consul/webui/dist \
-client="0.0.0.0" \
-join=$CONSUL_SV

この中で、[-config-file=/opt/consul/conf]というオプションがあり
定期監視し状態を送信する為のjsonファイルがディレクトリに配置されています。

$ sudo docker exec consul-cl1 ls /opt/consul/conf/
nginx.json

※注意:下記httpチェックは旧来(consul version 0.3以前)のやり方となっております。今現在、動作的に問題があるわけではありませんがイケてはいないです。

{
  "service": {
    "name": "http",
    "tags": [ "nginx" ],
    "port": 80,
    "check": {
      "script": "curl -LI localhost:80 -o /dev/null -w '%{http_code}\n' -s",
      "interval": "10s"
    }
  }
}

HTTP APIを使用してサービス監視を増やす

新たにチェック対象を増やしたい場合は、上記のようなjsonファイルを[-config-file(-config-dir)]で指定する事で行えます。
※ファイルを追加した場合は、[consul reload]コマンドで再読み込みが必要です。

ですが、100台・200台と追加していった場合にchef等の構成管理ツールを使わなければ配布は非常に面倒ですよね。
そういう時は、HTTP APIを使用し外から登録という手もあります。
試しに、consul-sv1のシステムディスク使用量をチェックしてみましょう。
※下記curlのIPアドレスは適宜読み替えてください。

$ curl -s -X PUT http://172.17.0.2:8500/v1/agent/service/register -d '
{
  "ID": "system",
  "Name": "df",
  "Tags": [
    "system",
    "disk"
  ],
  "Address": "127.0.0.1",
  "Check": {
    "Script": "LANG=C;df -h",
    "Interval": "10s" 
  }             
}
'

再びconsulのweb-uiを見ると、consul-sv1のservice checkに'df'checkが追加されました。

Screenshot 2015-03-24 11:44:02.png

DNSでも参照できます。

$ dig @172.17.0.2 -p 8600 df.service.consul SRV

; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> @172.17.0.2 -p 8600 df.service.consul SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42964
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;df.service.consul.     IN  SRV

;; ANSWER SECTION:
df.service.consul.  0   IN  SRV 1 1 0 consul-sv.node.dc1.consul.
df.service.consul.  0   IN  SRV 1 1 0 01412ac451a2.node.dc1.consul.

;; ADDITIONAL SECTION:
consul-sv.node.dc1.consul. 0    IN  A   127.0.0.1
01412ac451a2.node.dc1.consul. 0 IN  A   127.0.0.1

;; Query time: 2 msec
;; SERVER: 172.17.0.2#8600(172.17.0.2)
;; WHEN: Tue Mar 24 11:47:53 JST 2015
;; MSG SIZE  rcvd: 247

まとめ

HTTP APIを利用する事でほぼ全ての事が行えます。
裏を返せば悪用も簡単にされます。

今回のセミナーでは簡単にポートを開放し、簡単に使って頂いてますが
簡単であるが故のリスクを忘れないようにして下さい。

リスクに対する参照先

IPA 情報セキュリティ対策
http://www.ipa.go.jp/security/measures/


おまけ

hashicorpのドキュメントが見づらいと思われるかたも良くいらっしゃいますが
サンプルも多くあったりします。
この手順も下記を参考にしながら行う事が出来ますので、皆さんで応用し実践してみてください。
https://www.consul.io/docs/agent/http/agent.html#agent_services

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2