複数のノードで構成された elasticsearch クラスターを保護するために、Search Guard プラグインを使用しています。これが私の Dockerfile です:
#!/bin/sh
FROM docker.elastic.co/elasticsearch/elasticsearch:5.6.3
USER root
# Install search guard
RUN bin/elasticsearch-plugin install --batch com.floragunn:search-guard-5:5.6.3-16 \
&& chmod +x \
plugins/search-guard-5/tools/hash.sh \
plugins/search-guard-5/tools/sgadmin.sh \
bin/init_sg.sh \
&& chown -R elasticsearch:elasticsearch /usr/share/elasticsearch
USER elasticsearch
SearchGuard を初期化します (内部ユーザーを作成し、ロールを割り当てます)。コンテナの起動後にスクリプトを実行する必要がありますinit_sg.sh
。問題は次のとおりです: elasticsearch が実行されていない限り、スクリプトはセキュリティ インデックスを初期化しません。
スクリプトの内容は次のとおりです。
sleep 10
plugins/search-guard-5/tools/sgadmin.sh -cd config/ -ts config/truststore.jks -ks config/kirk-keystore.jks -nhnv -icl
現在、コンテナの起動後にスクリプトを手動で実行していますが、Kubernetes 上で実行しているため、何らかの理由でポッドが強制終了または失敗し、自動的に再作成される可能性があります。この場合、コンテナの起動後にプラグインを自動的に初期化する必要があります。
では、これをどうやって実現するのでしょうか? どのような助言やヒントでもいただければ幸いです。
ベストアンサー1
イメージ自体には、ENTRYPOINT ["/run/entrypoint.sh"]
Dockerfile で指定されたエントリポイントがあります。これを独自のスクリプトに置き換えることができます。たとえば、新しいスクリプトを作成し、マウントして最初に呼び出し/run/entrypoint.sh
、elasticsearch の起動を待ってから を実行しますinit_sg.sh
。