問題タブ [consul-template]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
templates - consul-template のループで変数をオーバーライドする
consul-template で次のテンプレートを使用しています。
生産する
どこ.Name
にgeoserver_dev_hello_org
あり、server_name=geoserver.hello.org
タグがあります。.Tags
範囲ループの終わりまでに、$server_name
値は になるはずですgeoserver.hello.org
が、元の値はまだ ですgeoserver.dev.hello.org
。
ループがオーバーライドされるようにするにはどうすればよい$server_name
ですか (値が見つかったときにループを終了します)。
docker - Docker コンテナー検出の Consul: Consul-Template で最新のコンテナーを取得する方法は?
実行中のコンテナーをダウンタイムなしでアップグレードしたい Docker ホストを構築しています。ここでは、1 つのコンテナーのみを実行しているとします。
新しいイメージを作成し、そこからコンテナーを起動してdocker run -P ...
、ランダムなホスト ポートが割り当てられるようにします。次に、Registratorのようなものを使用して、Consul のサービスを自動的に更新できます。現在、Consul には、イメージ名に対応するサービスの 2 つの登録 (古いコンテナーと新しいコンテナー) があります。
Consul-Templateを使用して新しいコンテナーのポートを指すように nginx リバース プロキシ構成を更新したいと思います(ここで説明) 。Consul-Template で最新のコンテナの詳細のみを取得するにはどうすればよいですか?
私が検討した2つの解決策は次のとおりです。
- を使用して
CreateIndex
、このサービスの最新の登録を検索します。ただし、Consul-Template を CreateIndex でソートする方法がわかりません。 - サービスタグの使用。問題は、以前のコンテナ/Consul サービス登録からタグを削除する方法がわからないことです。それが可能であれば、特定のタグを新しいコンテナーに割り当てて、 Consul-Template で選択するだけで済みます。これは、複数のコンテナーのダウンタイムなしのアップグレードを実行するように拡張されます。
更新:タグを更新/クリアする方法に関するドキュメントを見つけました: 1、2、3。これは、新しいコンテナーがタグで開始される前に実行されている古いコンテナーで実行できます。
これは、この問題を解決する最善の方法ですか?
nginx - docker swarm にアプリケーションをデプロイし、その IP アドレスを A レコードに公開する方法
nginx を使用して docker swarm クラスターを正常にセットアップしました。私のec2インスタンスで。このチュートリアルを使用して
https://botleg.com/stories/load-balancing-with-docker-swarm/
私はこのように使用しています
マネージャー 1
ノード 1
ノード 2
サービス検出のために登録者と一緒にコンソールを使用しています。
Consul Machine docker run --restart=unless-stopped -d -p 8500:8500 -h consul progrium/consul -server -bootstrap
Swarm Manager docker run --restart=unless-stopped -d -p 3375:2375 swarm manage --replication --advertise=mangerip:3375 consul://consulip:8500/
docker run --restart=unless-stopped -d --name=registrator -h=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://consulip: 8500
Node1 docker run --restart=unless-stopped -d swarm join --advertise=node1ip:2375 consul://consulip:8500/
docker run --restart=unless-stopped -d --name=registrator -h=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://consulip: 8500
Node2 docker run --restart=unless-stopped -d swarm join --advertise=node2:2375 consul://consulip:8500/
docker run --restart=unless-stopped -d --name=registrator -h=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://consulip: 8500
私の Dockerfile
start.sh
デフォルト.ctmpl
docker-compose.yml
これに関する問題は、Docker がノードを自動的に選択するため、A レコードを指す必要がある IP アドレスです。
これを初めて実行すると、最初のノードが選択される場合があります。これを削除してすべての手順をやり直すと、別のノードと別の IP が選択されます。そのときは A レコードを変更する必要があります。この問題をどのように解決するか、
私はそれをグーグルで検索し、waglを見つけました。これにより、DNS ベースのサービス検出が可能になりました。これは素晴らしいことです。しかし、それは非常に基本的なものだったと思います。それが本番環境にあったかどうかはわかりません。
AからZまでの流れ、つまり、展開からAレコードへのIPアドレスの設定までを行う方法を誰か教えてください。または、リンクを教えてください。
docker - 起動時にキーと値のペアをリーダーに追加しようとする前に、領事がリーダーを選出するのを待つようにスクリプトに指示するにはどうすればよいですか?
私の開発環境は、1 つのコンテナー内のローカル consul サーバーと、別のコンテナー内のアプリケーション (consul-template が実行されている) で構成され、すべて docker-compose にリンクされています。すべてがシームレスに起動し、開発に手動で介入する必要がない (セキュリティは問題ではありません) ため、特定のファイルをマウントすることにより、起動時にプログラムでデフォルトのキーと値のペアを consul に追加したいと考えています。
API を使用して起動時に k/v ペアを consul に追加しようとすると、常にエラーで失敗するというこの問題に遭遇し続けます2016/06/03 21:10:15 [ERR] http: Request PUT /v1/kv/app/secret_key, error: No cluster leader from=[::1]:58888
。領事にリーダーを選出するのに十分な時間を与えて、事前にスリープコマンドを追加すると、機能します。しかし、これを同期的に行うためのより良い方法があるはずですよね? 特に、クラスタ内にノードが 1 つしかない場合はなおさらです。
これは私がこれまでに持っているものです。
Dockerfile
entrypoint.sh
consul.json
consul が稼働していることを確認するまで、一括アップロードを一時停止できる方法が必要です。
ansible - Consul の Key-Value ストアの具体的なユースケースは何ですか?
Consul のキーと値のストアを使用して、構成管理ツール (現時点では Ansible) を強化することを検討しています。これを使用して、関連する 2 つの問題を解決したいと考えています。
- 分散の防止: 一部のアイテム (パスワード、証明書など) は、構成ファイル全体に分散されています。それらを更新するには、面倒な手動の検索と置換が必要です。
- 更新の容易さ: 構成の変更を編集して git にコミットするのではなく、Consul を使用して頻繁に変更される項目を保存できます。
動的構成のために Consul (または同様のツール) を使用/統合する方法に関する一連の推奨事項を探しています。当然のことながら、答えは 1 つではありませんが、ここには一連の便利なプラクティスがあります。私の回答ではいくつかのアプローチを提供しますが、追加のアイデアを聞きたいです。
docker - Dockerコンテナ内でconsulクライアントエージェントを作成する際にパラメータを渡す方法は?
Docker コンテナー内で Consul クライアント エージェントを実行しています。以下のように docker-compose ファイルを作成しました。
docker-compose で以下のオプションを渡す方法を教えてください。
consul - 複数の consul スタックを安全にリモート コントロールする概念
序章
私は複数を実行しています。私はそれらを領事スタックと呼んでいます。- 1 つの領事サーバー - 9 つの領事ノード
各ノードはいくつかのサービスを提供します - 従来の Web スタックなどです (この質問には興味がありません)。ゴシップは、サーバーが任意のノードによって照会されるのを防ぎ、データを公開するために使用されます。複数の consul-template/tiller の「ウォッチャー」が、KV の変更時にノード/サービスを動的に構成するために待機しています
ゴール
これらのスタックが 10 個あり (数値は動的です)、特定のロジックを使用して各スタックの consul-KV を制御する Web アプリを構築したいとします。
私が今持っているもの
特定の KV エントリを作成するために必要なロジックをラップする thor+diplomat ツールを作成しました。スタック内の「コントローラー」コンテナーで実行しながら実装し、localhost:8500 と通信しました。これにより、ゴシップで認証され、サーバーに書き込まれます。
質問
このツールをリモート (consul-stack の一部ではない) サーバーに移動し、各 consul-stacks KV に書き込むことができるようにするために、どのような概念を使用しますか。
確かに、diplomat を使用して stack1.tld:8500 に接続できますが、これは HTTP ポートを開き、何らかの方法でセキュリティを確保する必要があることを意味します (ゴシップによって保護されていませんか? どうにかして、RPC のみですか?) および /ui も保護します。
- これらの各スタックに接続するためのより良い方法はありますか?
- アクセスを保護するために、8500 の前に基本認証を持つ nginx プロキシ サーバーを使用しますか?
- また、このポートでssl-interceptionを使用し、引き続き8500を使用するか、構成されたhttpsポートを使用します(consul HTTPS APIで)
- ACL を使用してアクセスを保護しますか? (スタックメンバーのアクセスを許可するための多くのセットアップ - TLS が必要ですか?)
一般に、TLS (クライアントがセットアップするために多くの作業が必要です) を使用しない場合、スタックサーバーと通信して KV に安全に書き込む必要があるこの必要性に適合する概念は何ですか。
私が何かを逃した場合は、あなたが求めるものを追加してください