3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

fargate1.4にしたらコンテナのローカルIPが取れなくなった時の対応

Posted at

備忘としてメモ

需要はあまりないと思いますが、fargateのプライベートIPを取得して使っているとかのケースで
問題が出る場合がありそうなので掲載します

概要

fargate1.4、VPCエンドポイントでの制御が追加になって便利になりましたね。
ものは試しということで1.4にあげてみたところどうやらNICが変わっているようで影響が出ました。

現象

keycloakをfargateにのっけて、HA構成で展開しているサービスがあります。
これをfargate1.3 → 1.4にしたところ、クラスタリングがうまくいかず同期されていないような挙動が発生。

具体的には片方でログインしたのに、もう片方のコンテナでセッションが見つからない等のような動きをし始めました。

原因と対応

fargate1.4からコンテナにアタッチされるNICに変更があるようです。

fargate1.3までは

1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
3: ecs-eth0 inet 169.254.172.42/22 scope global ecs-eth0\ valid_lft forever preferred_lft forever
4: eth0 inet 10.1.100.187/24 scope global eth0\ valid_lft forever preferred_lft forever

のように eth0 にVPCのローカルIPが割り振られています

これがfargate1.4になると

1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
3: eth0 inet 169.254.172.2/22 scope global eth0\ valid_lft forever preferred_lft forever
4: eth1 inet 10.1.200.45/24 scope global eth1\ valid_lft forever preferred_lft forever

というように eth1 が増えてそこにローカルIPが割り振られるようになっています。
ecs-eth0 はなくなっていますね。

私の場合、keycloakを立ち上げる時に、クラスタリングの為にfargateインスタンスのローカルIPを取得して
keycloakに食わせています

以下のようなエントリーポイントのシェルで起動していました

export EXTERNAL_ADDR=`ip -f inet -o addr show eth0 | cut -d" " -f 7 | cut -d/ -f 1`
if [ "$EXTERNAL_ADDR" = "" ]; then
    EXTERNAL_ADDR=127.0.0.1
fi

echo "Use $EXTERNAL_ADDR for clustering."

sh /opt/jboss/tools/docker-entrypoint.sh $@ -Djgroups.bind_addr=$EXTERNAL_ADDR

eth0 を取っているので fargate1.3ではローカルIPを取得できましたが、
fargate1.4ではpublic ipが取れるようになってしまい、コンテナ間のjgroupspingが通らなくなったと思われます。

なので今回は単純にfargate1.4にした状態で eth0eth1 に変更したところ解決しました。


# fargate1.4からはローカルIPはeth1から取得
export EXTERNAL_ADDR=`ip -f inet -o addr show eth1 | cut -d" " -f 7 | cut -d/ -f 1`
if [ "$EXTERNAL_ADDR" = "" ]; then
    EXTERNAL_ADDR=127.0.0.1
fi

echo "Use $EXTERNAL_ADDR for clustering."

sh /opt/jboss/tools/docker-entrypoint.sh $@ -Djgroups.bind_addr=$EXTERNAL_ADDR

物理的なNICを指定している時点でどうなの、というのはごもっともではありますが。
fargate等のコンテナでIPを固定しない状態において、クラスタリングする時にIP欲しくなるケースがあったりなかったり。
なにかのお役に立てると幸いです

3
2
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?