LoginSignup
2
1

More than 5 years have passed since last update.

KubernetesでPodからそのホスト専用のDatadog Agentにアクセスする

Last updated at Posted at 2017-11-09

TL;DR;

iptablesでMagic IP Addressを特定のPodにDNATするか、podのspec.nodeIP+Downward APIを使う

iptablesを使う場合

ノードローカルなdnsmasq + Daemonset kube-dnsの事例と同じようなことをDatadog Agentでもやる。

iptablesの設定

MAGIC_IP=169.254.123.123
HOST_INTERFACE=cni0
POD_IP=10.2.91.68

curl http://$POD_IP:9411
echo $MAGIC_IP

# dd-agent (statsd)
sudo iptables -t nat -I PREROUTING --dest $MAGIC_IP -p udp --dport 8125 -j DNAT --to-dest $POD_IP:9411 -i $HOST_INTERFACE

# dd-agent (trace)
sudo iptables -t nat -I PREROUTING --dest $MAGIC_IP -p udp --dport 8126 -j DNAT --to-dest $POD_IP:8126 -i $HOST_INTERFACE

# dd-zipkin-proxy (dd-agent内包)
sudo iptables -t nat -I PREROUTING --dest $MAGIC_IP -p tcp --dport 9411 -j DNAT --to-dest $POD_IP:9411 -i $HOST_INTERFACE

dd-agentやdd-zipkin-proxyはDaemonSetでデプロイする

dd-agentやdd-zipkin-proxyはそれぞれDaemonSetとしてデプロイし、hostNetwork: trueにする。hostPort: ...でもいいのでは?と思うかもしれないが、そうするとdd-agentがPod名をホスト名と誤認してしまい、Datadogにhostname=pod名のメトリクスやトレースが溜まってしまう。結果的にホスト名でメトリクスやトレースを検索することができなくなってしまうので、避けたほうがいい。

spec.nodeIPを使う場合

ここで案内されているように、Downward APIを使えばコンテナの環境変数にNodeのIPアドレスをセットできる。

アプリ側で送信先IPアドレスを環境変数で設定できるようにする。

まとめ

Dockerコンテナからの$MAGIC_IP宛のパケットがホストの同ポートに転送される状態になる。$MAGIC_IPはアクセス元のコンテナがいるノードに読み替えられるので、Podからホスト専用のdd-agentにアクセスできることになる。

おまけ: Kubernetesのサポートはないの?

  • Node Localサービスの提案が出されています。2017/12/2現在はまだマージされてないので、興味のある方はぜひ応援してください。

参考

2
1
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
1