brianshumate.consul

Consul

このAnsibleロールは、Consulをインストールします。ファイルシステム構造の確立や、サーバーまたはクライアントエージェントの設定を行い、いくつかの一般的な運用機能をサポートします。

また、VagrantとVirtualBoxを使った開発または評価用の3つのサーバーエージェントからなるクラスターの起動も可能です。詳細については、README_VAGRANT.mdと関連するVagrantfileをご覧ください。

ロールの哲学

「人間の性格のもう一つの欠点は、みんなが建設したがるのに、何も維持しようとしないことです。」
― カート・ヴォネガット

このロールの元の設計目標は、Consulサーバークラスター環境の初期インストールとブートストラップに関するものであり、現在はクラスターの継続的なメンテナンスにはそれほど関与していません。

多くのユーザーは、Vagrantベースの環境がローカルのConsulサーバークラスターを簡単に立ち上げることができると表明していますので、このロールはその体験を主な目的としています。

他の方法で役立てられれば、さらに良いことです!

ロールの移行とインストール

このロールは元々ブライアン・シュメイトによって開発され、Ansible Galaxyではbrianshumate.consulとして知られていました。ブライアンはメンテナンスの負担を軽減するようコミュニティに求め、バス・マイジャーがこのロールをansible-collectionsに移しました。これにより、ボランティアチームがそれをメンテナンスできるようになります。このロールをプロジェクトにインストールするには、プロジェクトのroles/サブディレクトリに以下の内容のrequirements.ymlファイルを作成します:

---
- src: https://github.com/ansible-collections/ansible-consul.git
  name: ansible-consul
  scm: git
  version: master

このリポジトリには、バージョンを固定するために使用できるタグ付きリリースがあります。

Towerを使用する場合、このロールは自動的にインストールされ、CLIを使用してansibleを制御する場合は、次のようにインストールします。

ansible-galaxy install -p roles -r roles/requirements.yml

必要条件

このロールは、FreeBSD、Debian、またはRed Hat Enterprise Linuxディストリビューション、またはWindows Server 2012 R2が必要です。

このロールは他のOSディストリビューションやバージョンでも動作するかもしれませんが、以下のソフトウェアバージョンで良好に機能することが知られています。

  • Consul: 1.8.7
  • Ansible: 2.8.2
  • Alma Linux: 8, 9
  • Alpine Linux: 3.8
  • CentOS: 7, 8
  • Debian: 9
  • FreeBSD: 11
  • Mac OS X: 10.15 (Catalina)
  • RHEL: 7, 8
  • Rocky Linux: 8
  • OracleLinux: 7, 8
  • Ubuntu: 16.04
  • Windows: Server 2012 R2

「ローカル」インストールモード(デフォルト)では、このロールはConsulアーカイブのインスタンスを1つだけローカルでダウンロードし、解凍して、すべての目標のConsulホストに結果のバイナリをインストールします。

これを行うには、Ansible制御ホストにunzipがインストールされている必要があり、PATHにunzipがない場合、このロールは失敗します。

このロールのコレクション要件は、requirements.ymlファイルに記載されています。これらのコレクションをインストールし、ロールが正しく動作することを確認するのはあなたの責任です。通常、次のコマンドでインストールできます。

ansible-galaxy collection install -r requirements.yml

注意点

このロールは、ホストを制限するansible -lオプションを完全にはサポートしていません。これにより、必要なホスト変数の指定がうまく行かなくなります。このロールでlimitオプションを使用すると、次のようなテンプレートエラーに遭遇する可能性があります。

Undefined is not JSON serializable.

ロール変数

このロールは、次の3つの場所で定義された変数を使用します。

  • ホストインベントリファイル(例としてexamples/vagrant_hostsを参照)
  • vars/*.yml(主にOS/ディストリビューション固有の変数)
  • defaults/main.yml(他のすべて)

:warning: : このロールは、Consulサーバーのインベントリホストグループをconsul_group_nameという変数として定義することに依存しており、そうでないと正しく機能しません。もしくは、Consulサーバーをインベントリ内のデフォルトホストグループ[consul_instances]に配置できます。

多くのロール変数は、環境変数からその値を取得することもできます。これは、関連する説明に記載されています。

consul_version

  • インストールするバージョン
  • 利用可能な最新バージョンのConsulをインストールするには、値をlatestに設定
  • デフォルト値: 1.8.7

consul_architecture_map

  • _ansible_architecture_の値をGoアーキテクチャの値に変換する辞書
  • デフォルト値: dict

consul_architecture

  • {{ consul_architecture_map[ansible_architecture] }}で決定されたシステムアーキテクチャ
  • デフォルト値(実行時に決定): amd64, arm, または arm64

consul_os

  • 小文字で表現されたオペレーティングシステム名
  • デフォルト値: {{ ansible_os_family | lower }}

consul_install_dependencies

  • ロール機能に必要なpythonおよびパッケージ依存関係をインストールします。
  • デフォルト値: true

consul_zip_url

  • ConsulアーカイブファイルのダウンロードURL
  • デフォルト値: https://releases.hashicorp.com/consul/{{ consul_version }}/consul_{{ consul_version }}_{{ consul_os }}_{{ consul_architecture }}.zip

consul_checksum_file_url

  • パッケージのSHA256サマリファイルのURL
  • デフォルト値: https://releases.hashicorp.com/consul/{{ consul_version }}/{{ consul_version }}_SHA256SUMS

consul_bin_path

  • バイナリインストールパス
  • デフォルトLinux値: /usr/local/bin
  • デフォルトWindows値: C:\ProgramData\consul\bin

consul_config_path

  • 基本設定ファイルパス
  • デフォルトLinux値: /etc/consul
  • デフォルトWindows値: C:\ProgramData\consul\config

consul_configd_path

  • 追加の設定ディレクトリ
  • デフォルトLinux値: {{ consul_config_path }}/consul.d
  • デフォルトWindows値: C:\ProgramData\consul\config.d

consul_data_path

  • data_dirまたは-data-dirで定義されたデータディレクトリパス
  • デフォルトLinux値: /opt/consul
  • デフォルトWindows値: C:\ProgramData\consul\data

consul_configure_syslogd

  • Linuxでrsyslogdまたはsyslog-ngの設定を有効にします。無効にすると、Consulはconsul_syslog_enableがtrueの場合でもsyslogにログを記録しますが、syslogデーモンはConsulのログを自分のログファイルに書き込むようには設定されません。
    • 環境変数CONSUL_CONFIGURE_SYSLOGDで上書き
  • デフォルトLinux値: false

consul_log_path

  • consul_syslog_enableがfalseの場合
  • consul_syslog_enableがtrueの場合
    • Linuxでのrsyslogd設定で使用するログファイル。consul_configure_syslogdがfalseの場合は無視されます。
  • デフォルトLinux値: /var/log/consul
    • 環境変数CONSUL_LOG_PATHで上書き
  • デフォルトWindows値: C:\ProgramData\consul\log

consul_log_file

  • consul_syslog_enableがfalseの場合
  • consul_syslog_enableがtrueの場合
    • Linuxのrsyslogd設定で使用するログファイル。consul_configure_syslogdがfalseの場合は無視されます。
  • 環境変数CONSUL_LOG_FILEで上書き
  • デフォルトLinux値: consul.log

consul_log_rotate_bytes

  • log_rotate_bytesまたは-log-rotate-bytesで定義されたローテートバイト
    • 環境変数CONSUL_LOG_ROTATE_BYTESで上書き
  • consul_syslog_enableがtrueの場合は無視されます。
  • デフォルト値: 0

consul_log_rotate_duration

consul_log_rotate_max_files

consul_syslog_facility

  • syslog_facilityで定義されたsyslog施設
    • 環境変数CONSUL_SYSLOG_FACILITYで上書き
  • デフォルトLinux値: local0

syslog_user

  • Linuxでのrsyslogdプロセスの所有者。consul_log_pathの所有権はLinux上でこのユーザーに設定されます。consul_configure_syslogdがfalseの場合は無視されます。
    • 環境変数SYSLOG_USERで上書き
  • デフォルトLinux値: syslog

syslog_group

  • Linuxでrsyslogdプロセスを実行しているユーザーのグループ。consul_log_pathのグループ所有権はLinux上でこのグループに設定されます。consul_configure_syslogdがfalseの場合は無視されます。
    • 環境変数SYSLOG_GROUPで上書き
  • デフォルト値: adm

consul_run_path

  • プロセスID(PID)ファイルの実行パス
  • デフォルトLinux値: /run/consul
  • デフォルトWindows値: C:\ProgramData\consul

consul_user

  • OSユーザー
  • デフォルトLinux値: consul
  • デフォルトWindows値: LocalSystem

consul_manage_user

  • consul_userで定義されたユーザーを作成するかどうか
  • デフォルト値: true

consul_group

  • OSグループ
  • デフォルト値: bin

consul_manage_group

  • consul_groupで定義されたグループを作成するかどうか
  • デフォルト値: true

consul_group_name

  • インベントリグループ名
    • 環境変数CONSUL_GROUP_NAMEで上書き
  • デフォルト値: consul_instances

consul_retry_interval

  • LANサーバーへの再接続試行間隔
  • デフォルト値: 30s

consul_retry_interval_wan

  • WANサーバーへの再接続試行間隔
  • デフォルト値: 30s

consul_retry_join_skip_hosts

  • trueの場合、retry_joinの設定値はデフォルトのホストサーバーによって構成されません。値はconsul_joinを使用して初期化できます。
  • デフォルト値: false

consul_retry_max

  • 失敗する前のLANサーバーへの最大再接続試行回数(0 = 無限)
  • デフォルト値: 0

consul_retry_max_wan

  • 失敗する前のWANサーバーへの最大再接続試行回数(0 = 無限)
  • デフォルト値: 0

consul_join

  • このロールで管理されていないLANサーバーのリスト(IPv4 IPv6またはDNSアドレス)
  • デフォルト値: []

consul_join_wan

  • このロールで管理されていないWANサーバーのリスト(IPv4 IPv6またはDNSアドレス)
  • デフォルト値: []

consul_servers

このリストを手動で変更する必要は通常ありません。

  • サーバーノードのリスト
  • デフォルト値: consul_group_nameのすべてのノードのリスト、consul_node_roleがサーバーまたはブートストラップに設定されているもの

consul_bootstrap_expect

  • Consulサーバーの設定ファイルにbootstrap_expect値を追加するブール値
  • デフォルト値: false

consul_bootstrap_expect_value

  • リーダーを選挙するためにクラスターに参加している最低数のConsulサーバーを定義する整数値。
  • デフォルト値: ノードの数に基づいて実行時に計算される

consul_gather_server_facts

この機能により、現在プレイブックでターゲットとしていないサーバーからconsul_advertise_address(_wan)を収集することが可能になります。

これを可能にするために、delegate_factsオプションが使用されます。このオプションは問題を引き起こすことがあります。

  • 現在ターゲットターゲットではないサーバーからファクタを収集します。
  • デフォルト値: false

consul_datacenter

  • データセンターラベル
    • 環境変数CONSUL_DATACENTERで上書き
  • デフォルト値: dc1
  • デフォルト値: dc1

consul_domain

  • domainまたは-domainで定義されたConsulドメイン名
    • 環境変数CONSUL_DOMAINで上書き
  • デフォルト値: consul

consul_alt_domain

consul_node_meta

  • Consulノードメタデータ(キー値)
  • Consulバージョン0.7.3以降でサポート
  • デフォルト値: {}
  • 例:
consul_node_meta:
    node_type: "my-custom-type"
    node_meta1: "metadata1"
    node_meta2: "metadata2"

consul_log_level

consul_syslog_enable

  • enable_syslogまたは-syslogで定義されたsyslogへのログ
    • 環境変数CONSUL_SYSLOG_ENABLEで上書き
  • デフォルトLinux値: false
  • デフォルトWindows値: false

consul_iface

  • Consulネットワークインターフェース
    • 環境変数CONSUL_IFACEで上書き
  • デフォルト値: {{ ansible_default_ipv4.interface }}

consul_bind_address

  • バインドアドレス
    • 環境変数CONSUL_BIND_ADDRESSで上書き
  • デフォルト値: デフォルトのipv4アドレス、またはconsul_ifaceで設定されたインターフェースのアドレス

consul_advertise_address

  • LANの広告アドレス
  • デフォルト値: consul_bind_address

consul_advertise_address_wan

  • WANの広告アドレス
  • デフォルト値: consul_bind_address

consul_translate_wan_address

  • DNS提供時にノードの設定されたWANアドレスを優先する
  • デフォルト値: false

consul_advertise_addresses

  • 高度な広告アドレス設定
  • 個々のアドレスはconsul_advertise_addresses_*変数を使用して上書きできます
  • デフォルト値:
    consul_advertise_addresses:
      serf_lan: "{{ consul_advertise_addresses_serf_lan | default(consul_advertise_address+':'+consul_ports.serf_lan) }}"
      serf_wan: "{{ consul_advertise_addresses_serf_wan | default(consul_advertise_address_wan+':'+consul_ports.serf_wan) }}"
      rpc: "{{ consul_advertise_addresses_rpc | default(consul_bind_address+':'+consul_ports.server) }}"
    

consul_client_address

  • クライアントアドレス
  • デフォルト値: 127.0.0.1

consul_addresses

  • 高度なアドレス設定
  • 個々のアドレスはconsul_addresses_*変数を使って上書きできます
  • デフォルト値:
    consul_addresses:
      dns: "{{ consul_addresses_dns | default(consul_client_address, true) }}"
      http: "{{ consul_addresses_http | default(consul_client_address, true) }}"
      https: "{{ consul_addresses_https | default(consul_client_address, true) }}"
      rpc: "{{ consul_addresses_rpc | default(consul_client_address, true) }}"
      grpc: "{{ consul_addresses_grpc | default(consul_client_address, true) }}"
      grpc_tls: "{{ consul_addresses_grpc_tls | default(consul_client_address, true) }}"
    

consul_ports

  • 使用されるポートに関する公式ドキュメント
  • ポートマッピングは、次のキーのバインドポートを設定するためのネストされた辞書オブジェクトです。
    • dns - DNSサーバー、無効にするには-1を指定。デフォルト8600。
    • http - HTTP API、無効にするには-1を指定。デフォルト8500。
    • https - HTTPS API、無効にするには-1を指定。デフォルトは無効。
    • rpc - CLI RPCエンドポイント。デフォルト8400。これはConsul 0.8以降で廃止されています。
    • grpc - gRPCエンドポイント、無効にするには-1を指定。デフォルトは無効。
    • grpc_tls - gRPC TLSエンドポイント、無効にするには-1を指定。これはConsul 1.14.0以降で利用可能。
    • serf_lan - Serf LANポート。デフォルト8301。
    • serf_wan - Serf WANポート。デフォルト8302。
    • server - サーバーRPCアドレス。デフォルト8300。

例えば、ConsulのHTTPS APIを有効にするには、次のように変数を設定できます。

  • デフォルト値:
  consul_ports:
    dns: "{{ consul_ports_dns | default('8600', true) }}"
    http: "{{ consul_ports_http | default('8500', true) }}"
    https: "{{ consul_ports_https | default('-1', true) }}"
    rpc: "{{ consul_ports_rpc | default('8400', true) }}"
    serf_lan: "{{ consul_ports_serf_lan | default('8301', true) }}"
    serf_wan: "{{ consul_ports_serf_wan | default('8302', true) }}"
    server: "{{ consul_ports_server | default('8300', true) }}"
    grpc: "{{ consul_ports_grpc | default('-1', true) }}"
    grpc_tls: "{{ consul_ports_grpc_tls | default('-1', true) }}"

注意:辞書オブジェクトは、ドキュメントに記載された名称を正確に使用する必要があります!すべてのポートを指定する必要があります。1つまたは複数のポート上書きがconsul_ports_*変数を使用して行うことができます。

consul_node_name

  • カスタムノード名を定義します(ドットを含めないこと) node_nameを参照
    • Consulのデフォルト値はサーバーのホスト名です。
  • デフォルト値: ''

consul_recursors

  • 上流のDNSサーバーのリスト recursorsを参照
    • 環境変数CONSUL_RECURSORSで上書き
  • デフォルト値: 空のリスト

consul_iptables_enable

  • ConsulへのDNSフォワーディング用のiptablesルールを有効にするかどうか
    • 環境変数CONSUL_IPTABLES_ENABLEで上書き
  • デフォルト値: false

consul_acl_policy

  • 基本的なACL設定ファイルを追加します。
    • 環境変数CONSUL_ACL_POLICYで上書き
  • デフォルト値: false

consul_acl_enable

  • ACLを有効にします。
    • 環境変数CONSUL_ACL_ENABLEで上書き
  • デフォルト値: false

consul_acl_ttl

  • ACLのTTL。
    • 環境変数CONSUL_ACL_TTLで上書き
  • デフォルト値: 30s

consul_acl_token_persistence

  • APIを使用して設定されたトークンをディスクに永続化するかどうかを定義します。
    • 環境変数CONSUL_ACL_TOKEN_PERSISTENCEで上書き
  • デフォルト値: true

consul_acl_datacenter

  • ACLの権威あるデータセンター名
    • 環境変数CONSUL_ACL_DATACENTERで上書き
  • デフォルト値: {{ consul_datacenter }}dc1

consul_acl_down_policy

  • デフォルトのACLダウポリシー
    • 環境変数CONSUL_ACL_DOWN_POLICYで上書き
  • デフォルト値: allow

consul_acl_token

  • デフォルトのACLトークン、提供されている場合のみ設定されます。
    • 環境変数CONSUL_ACL_TOKENで上書き
  • デフォルト値: ''

consul_acl_agent_token

  • クライアントとサーバーがサービスカタログへの内部操作を実行するために使用します。acl_agent_tokenを参照
    • 環境変数CONSUL_ACL_AGENT_TOKENで上書き
  • デフォルト値: ''

consul_acl_agent_master_token

  • 各エージェントに設定されたエージェントACLポリシーの書き込み権限を持つ特別なアクセス・トークンです。
    • 環境変数CONSUL_ACL_AGENT_MASTER_TOKENで上書き
  • デフォルト値: ''

consul_acl_default_policy

  • デフォルトACLポリシー
    • 環境変数CONSUL_ACL_DEFAULT_POLICYで上書き
  • デフォルト値: allow

consul_acl_master_token

  • ACLマスタートークン
    • 環境変数CONSUL_ACL_MASTER_TOKENで上書き
  • デフォルト値: UUID

consul_acl_master_token_display

  • 生成されたACLマスタートークンを表示
    • 環境変数CONSUL_ACL_MASTER_TOKEN_DISPLAYで上書き
  • デフォルト値: false

consul_acl_replication_enable

  • トークンなしのACLレプリケーションを有効にします(APIでトークンを設定できます)。
    • 環境変数CONSUL_ACL_REPLICATION_TOKEN_ENABLEで上書き
  • デフォルト値: ''

consul_acl_replication_token

  • ACLレプリケーショントークン
    • 環境変数CONSUL_ACL_REPLICATION_TOKEN_DISPLAYで上書き
  • デフォルト値: SN4K3OILSN4K3OILSN4K3OILSN4K3OIL

consul_tls_enable

  • TLSを有効にします。
    • 環境変数CONSUL_ACL_TLS_ENABLEで上書き
  • デフォルト値: false

consul_tls_copy_keys

  • TLSファイルの管理を有効または無効にします。
    • TLSを有効にした場合(consul_tls_enable)でも、TLSファイルを自分で管理したい場合は無効にします。
  • デフォルト値: true

consul_tls_dir

  • TLSファイルのターゲットディレクトリ
    • 環境変数CONSUL_TLS_DIRで上書き
  • デフォルト値: /etc/consul/ssl

consul_tls_ca_crt

  • CA証明書ファイル名
    • 環境変数CONSUL_TLS_CA_CRTで上書き
  • デフォルト値: ca.crt

consul_tls_server_crt

  • サーバー証明書
    • 環境変数CONSUL_TLS_SERVER_CRTで上書き
  • デフォルト値: server.crt

consul_tls_server_key

  • サーバーキー
    • 環境変数CONSUL_TLS_SERVER_KEYで上書き
  • デフォルト値: server.key

consul_tls_files_remote_src

  • TLSファイルがすでにホストにある場合、リモートソースからコピーします。
  • デフォルト値: false

consul_encrypt_enable

  • Gossip暗号化を有効にします。
  • デフォルト値: true

consul_encrypt_verify_incoming

  • 受信 gossip 接続を確認します。
  • デフォルト値: true

consul_encrypt_verify_outgoing

  • 送信 gossip 接続を確認します。
  • デフォルト値: true

consul_disable_keyring_file

  • 設定されると、キーリングはファイルに永続化されません。インストールされたキーはシャットダウン時に失われ、起動時には指定された-encryptキーのみが使用可能になります。
  • デフォルト値: false

consul_raw_key

  • 暗号化キーを設定します。クラスター全体で同じである必要があります。存在しない場合、キーは生成され、ブートストラップされたサーバーから取得されます。
  • デフォルト値: ''

consul_tls_verify_incoming

  • 受信接続を確認します。
    • 環境変数CONSUL_TLS_VERIFY_INCOMINGで上書き
  • デフォルト値: false

consul_tls_verify_outgoing

  • 送信接続を確認します。
    • 環境変数CONSUL_TLS_VERIFY_OUTGOINGで上書き
  • デフォルト値: true

consul_tls_verify_incoming_rpc

  • RPCエンドポイントでの受信接続を確認します(クライアント証明書)。
    • 環境変数CONSUL_TLS_VERIFY_INCOMING_RPCで上書き
  • デフォルト値: false

consul_tls_verify_incoming_https

  • HTTPSエンドポイントでの受信接続を確認します(クライアント証明書)。
    • 環境変数CONSUL_TLS_VERIFY_INCOMING_HTTPSで上書き
  • デフォルト値: false

consul_tls_verify_server_hostname

  • サーバーホスト名を確認します。
    • 環境変数CONSUL_TLS_VERIFY_SERVER_HOSTNAMEで上書き
  • デフォルト値: false

consul_tls_min_version

  • 最小許容TLSバージョン
    • 環境変数CONSUL_TLS_MIN_VERSIONで上書きできます。
    • v<1.12.0の場合、'tls12,tls13,...'を使用します
  • デフォルト値: TLSv1_2

consul_tls_cipher_suites

consul_tls_prefer_server_cipher_suites

auto_encrypt

auto_encrypt:
  enabled: false
  • 例:
auto_encrypt:
  enabled: true
  dns_san: ["consul.com"]
  ip_san: ["127.0.0.1"]

consul_force_install

  • trueの場合、必ずConsulがインストールされます。それ以外の場合、ホストに存在しない場合、またはインストールされたバージョンがconsul_versionと異なる場合にのみ、Consulがインストールされます。
  • ロールは、サーバーのローリングアップデート後にクライアントノードのオーケストレーションを処理しません。
  • デフォルト値: false

consul_install_remotely

  • リモートホストに対してインストールのためのファイルを直接ダウンロードするかどうか。
  • これはWindowsの唯一のオプションです。WinRMはこの範囲でやや制限されています。
  • デフォルト値: false

consul_install_from_repo

  • バイナリを直接インストールするのではなく、リポジトリからConsulをインストールするかどうかのブール値。
  • サポートされているディストロ: Alma Linux、Amazon Linux、CentOS、Debian、Fedora、Ubuntu、Red Hat、Rocky。
  • デフォルト値: false

consul_ui

  • Consul UIを有効にしますか?
  • デフォルト値: true

consul_ui_legacy

  • レガシーConsul UIモードを有効にします。
  • デフォルト値: false

consul_disable_update_check

  • Consulのアップデートチェックを無効にしますか?
  • デフォルト値: false

consul_enable_script_checks

  • スクリプトベースのチェックを有効にしますか?
  • デフォルト値: false
  • consul_enable_local_script_checksの代わりにこれを使用することは推奨されません。

consul_enable_local_script_checks

  • ローカルに定義されたスクリプトチェックを有効にしますか?
  • デフォルト値: false

consul_raft_protocol

  • 使用するRaftプロトコル。
  • デフォルト値:
    • Consulバージョン<=0.7.0: 1
    • Consulバージョン>0.7.0: 3

consul_node_role

  • ノードのConsul役割、bootstrapserver、またはclientのいずれか
  • デフォルト値: client

1つのサーバーをブートストラップサーバーとして指定し、他のサーバーがこのサーバーに接続します。また、役割をclientとして指定すると、Consulはサーバーではなくクライアントエージェントとして構成されます。

クラスターをセットアップする方法は2つあり、1つはブートストラップサーバーを明示的に選択すること、もう1つはサーバーがリーダーを自分たちで選出することです。

以下は、単純な3つのサーバーのクラスターのためにどのようにホストインベントリを定義できるかの例であり、最初のサーバーがブートストラップ/リーダーとして指定されています。

[consul_instances]
consul1.consul consul_node_role=bootstrap
consul2.consul consul_node_role=server
consul3.consul consul_node_role=server
consul4.local consul_node_role=client

または、より簡単な方法で、彼らに選挙プロセスを行わせることもできます。

[consul_instances]
consul1.consul consul_node_role=server consul_bootstrap_expect=true
consul2.consul consul_node_role=server consul_bootstrap_expect=true
consul3.consul consul_node_role=server consul_bootstrap_expect=true
consul4.local consul_node_role=client

なお、2番目の形式は、単純であるため、推奨される方法です。

consul_autopilot_enable

Autopilotは、Consul 0.8に追加された新しい機能のセットで、Consulサーバーの自動的な運用管理を可能にします。死んだサーバーのクリーンアップ、Raftクラスターの状態の監視、および安定したサーバーの導入が含まれます。

https://www.consul.io/docs/guides/autopilot.html

  • Autopilotを有効にする設定(ブートストラップノードに書き込まれます)
    • 環境変数CONSUL_AUTOPILOT_ENABLEで上書き
  • デフォルト値: false

consul_autopilot_cleanup_dead_Servers

死んだサーバーは定期的にクリーンアップされ、Raftピアセットから削除されます。これにより、彼らがクォーラムサイズやリーダー選出に干渉するのを防ぎます。このクリーンアップは、新しいサーバーがクラスターに正常に追加されるたびにも行われます。

  • Autopilotの設定を有効にします(ブートストラップノードに書き込まれます)
    • 環境変数CONSUL_AUTOPILOT_CLEANUP_DEAD_SERVERSで上書き
  • デフォルト値: false

consul_autopilot_last_contact_threshold

ノードの健康を判断するためにセーフヘルスチェックで使用されます。

  • 最後の接触からの時間のしきい値を設定します。
    • 環境変数CONSUL_AUTOPILOT_LAST_CONTACT_THRESHOLDで上書き
  • デフォルト値: 200ms

consul_autopilot_max_trailing_logs

  • リーダーからのノードが最大のログエントリ数を設定するために使用されます。
    • 環境変数CONSUL_AUTOPILOT_MAX_TRAILING_LOGSで上書き
  • デフォルト値: 250

consul_autopilot_server_stabilization_time

  • 新しいノードが安定する時間
    • 環境変数CONSUL_AUTOPILOT_SERVER_STABILIZATION_TIMEで上書き
  • デフォルト値: 10s

consul_autopilot_redundancy_zone_tag

Consulエンタープライズ専用(CONSUL_ENTERPRISEがtrueに設定されている必要があります)

  • 環境変数CONSUL_AUTOPILOT_REDUNDANCY_ZONE_TAGで上書き
  • デフォルト値: az

consul_autopilot_disable_upgrade_migration

Consulエンタープライズ専用(CONSUL_ENTERPRISEがtrueに設定されている必要があります)

  • 環境変数CONSUL_AUTOPILOT_DISABLE_UPGRADE_MIGRATIONで上書き
  • デフォルト値: false

consul_autopilot_upgrade_version_tag

Consulエンタープライズ専用(CONSUL_ENTERPRISEがtrueに設定されている必要があります)

  • 環境変数CONSUL_AUTOPILOT_UPGRADE_VERSION_TAGで上書き
  • デフォルト値: ''

consul_debug

  • デバッグ目的で追加の設定ファイルをConsul設定ディレクトリに生成することを有効にします。
  • デフォルト値: false

consul_config_template_path

  • デフォルトの設定テンプレートがニーズに合わない場合、自分のものに置き換えることができます。
  • デフォルト値: templates/config.json.j2

consul_rolling_restart

  • サービスの中断を避けるために、Consulノードを1つずつ再起動します(Unixプラットフォームのみ)。
  • デフォルト値: false

consul_rolling_restart_delay_sec

  • Consulの離脱とノード再起動の間に遅延を追加します(Linuxプラットフォームのみ)。
  • デフォルト値: 5

カスタム設定セクション

Consulは設定をファイルとディレクトリから字句順に読み込み、通常、以前に解析された設定ファイルの上にマージされます。consul_config_customを使用してカスタム設定を設定することができ、これにより、最初に解析されたすべての設定が読み込まれた後に、consul_config_path内のconfig_z_custom.jsonという名前のファイルに展開されます。

telemetryを有効にするための使用例:

  vars:
    consul_config_custom:
      telemetry:
        dogstatsd_addr: "localhost:8125"
        dogstatsd_tags:
          - "security"
          - "compliance"
        disable_hostname: true

Consulスナップショットエージェント

Consulスナップショットエージェントは、セットインターバルでバックアップスナップを取り、保存します。エンタープライズが必要です。

consul_snapshot

  • Bool、trueはスナップショットエージェントを設定して開始します(エンタープライズ専用)
  • デフォルト値: false

consul_snapshot_storage

  • スナップショットが保存される場所。注意:パスはsnapsで終わる必要があります。
  • デフォルト値: {{ consul_config_path }}/snaps

consul_snapshot_interval

  • デフォルト値: 1h

consul_snapshot_retain

OSおよびディストリビューション変数

consulバイナリはほとんどのLinuxプラットフォームで動作し、ディストリビューションに特有ではありません。ただし、一部のディストリビューションは異なるパッケージ名で特定のOSパッケージのインストールを必要とします。

consul_centos_pkg

  • Consulパッケージファイル名
  • デフォルト値: {{ consul_version }}_linux_amd64.zip

consul_centos_url

  • ConsulパッケージダウンロードURL
  • デフォルト値: {{ consul_zip_url }}

consul_centos_sha256

  • ConsulダウンロードSHA256サマリー
  • デフォルト値: SHA256サマリー

consul_centos_os_packages

  • インストールするOSパッケージのリスト
  • デフォルト値: list

consul_debian_pkg

  • Consulパッケージファイル名
  • デフォルト値: {{ consul_version }}_linux_amd64.zip

consul_debian_url

  • ConsulパッケージダウンロードURL
  • デフォルト値: {{ consul_zip_url }}

consul_debian_sha256

  • ConsulダウンロードSHA256サマリー
  • デフォルト値: SHA256 SUM

consul_debian_os_packages

  • インストールするOSパッケージのリスト
  • デフォルト値: list

consul_redhat_pkg

  • Consulパッケージファイル名
  • デフォルト値: {{ consul_version }}_linux_amd64.zip

consul_redhat_url

  • ConsulパッケージダウンロードURL
  • デフォルト値: {{ consul_zip_url }}

consul_redhat_sha256

  • ConsulダウンロードSHA256サマリー
  • デフォルト値: SHA256サマリー

consul_redhat_os_packages

  • インストールするOSパッケージのリスト
  • デフォルト値: list

consul_systemd_restart_sec

  • systemdユニットのRestartSecオプションの整数値
  • デフォルト値: 42

consul_systemd_limit_nofile

  • systemdユニットのLimitNOFILEオプションの整数値
  • デフォルト値: 65536

consul_systemd_restart

  • systemdユニットのRestartオプションの文字列値
  • デフォルト値: on-failure

consul_ubuntu_pkg

  • Consulパッケージファイル名
  • デフォルト値: {{ consul_version }}_linux_amd64.zip

consul_ubuntu_url

  • ConsulパッケージダウンロードURL
  • デフォルト値: {{ consul_zip_url }}

consul_ubuntu_sha256

  • ConsulダウンロードSHA256サマリー
  • デフォルト値: SHA256サマリー

consul_ubuntu_os_packages

  • インストールするOSパッケージのリスト
  • デフォルト値: list

consul_windows_pkg

  • Consulパッケージファイル名
  • デフォルト値: {{ consul_version }}_windows_amd64.zip

consul_windows_url

  • ConsulパッケージダウンロードURL
  • デフォルト値: {{ consul_zip_url }}

consul_windows_sha256

  • ConsulダウンロードSHA256サマリー
  • デフォルト値: SHA256サマリー

consul_windows_os_packages

  • インストールするOSパッケージのリスト
  • デフォルト値: list

consul_performance

  • Consulのパフォーマンステューンのリスト
  • デフォルト値: list

raft_multiplier

leave_drain_time

rpc_hold_timeout

  • RPC保持タイムアウトは、リーダー選出中にクライアントまたはサーバーが内部RPCリクエストを再試行する時間の長さです。
  • デフォルト値: 7s

leave_on_terminate

  • leave_on_terminateを有効にすると、エージェントがTERM信号を受け取ったとき、Leaveメッセージをクラスターの他のサーバーに送信し、穏やかに離脱します。この機能のデフォルト動作は、エージェントがクライアントまたはサーバーのいずれとして実行されているかに基づいて異なります。クライアントモードのエージェントでは、デフォルトでtrue、サーバーモードのエージェントではデフォルトでfalseです。

consul_limit

  • Consulノードリミット(キー値)。
  • Consulバージョン0.9.3以降でサポート。
  • デフォルト値: {}
  • 例:
consul_limits:
    http_max_conns_per_client: 250
    rpc_max_conns_per_client: 150

依存関係

AnsibleはGNU tarを必要とし、このロールは効率のためにunarchiveモジュールをローカルで使用しますので、システムにgtarunzipがインストールされていてPATHにあることを確認してください。これがない場合、このロールはリモートマシンにunzipをインストールしてZIPファイルを展開します。

macOSのように、BSD tarが異なるシステムでは、unarchiveタスク中に奇妙なエラーが発生する場合、gtarが不足している可能性があります。

WindowsでAnsibleをインストールするには、PowerShell Community Extensionsが必要です。これはWindows Server 2012 R2以降にインストールされています。Windows Server 2008以前でこのロールを試す場合は、こちらから拡張機能をインストールする必要があります。

例プレイブック

基本的なインストールは、同梱されているsite.ymlプレイブックを使用して可能です:

ansible-playbook -i hosts site.yml

ansible-playbookコマンドに--extra-varsオプションを渡して、変数を指定することもできます:

ansible-playbook -i hosts site.yml --extra-vars "consul_datacenter=maui"

クラスターについては、同梱されたsite.ymlが次のことを実行します。

  1. consulロールを実行(Consulをインストールしクラスターをブートストラップ)
  2. ブートストラップノードを再構成して、bootstrap-expect設定なしで実行
  3. ブートストラップノードを再起動

ACLサポート

基本的なACLサポートがこのロールに含まれています。環境変数CONSUL_ACL_ENABLEをtrueに設定し、実行する前に、正しい値のCONSUL_ACL_DATACENTER環境変数を設定することができます。例:

CONSUL_ACL_ENABLE=true CONSUL_ACL_DATACENTER=maui \
CONSUL_ACL_MASTER_TOKEN_DISPLAY=true ansible-playbook -i uat_hosts aloha.yml

プレイブック実行中に自動生成されたACLマスタートークンの値を標準出力に表示したい場合、環境変数CONSUL_ACL_MASTER_TOKEN_DISPLAYをtrueに設定します。

既存のトークンを使用したい場合、環境変数CONSUL_ACL_MASTER_TOKENCONSUL_ACL_REPLICATION_TOKENも設定します。例:

CONSUL_ACL_ENABLE=true CONSUL_ACL_DATACENTER=stjohn \
CONSUL_ACL_MASTER_TOKEN=0815C55B-3AD2-4C1B-BE9B-715CAAE3A4B2 \
CONSUL_ACL_REPLICATION_TOKEN=C609E56E-DD0B-4B99-A0AD-B079252354A0 \
CONSUL_ACL_MASTER_TOKEN_DISPLAY=true ansible-playbook -i uat_hosts sail.yml

初期ACLセットアップをさらに洗練するためにオーバーライドできるいくつかのAnsible ACL変数があります。すべてが現在環境変数から取得されるわけではありませんが、いくつかの妥当なデフォルトがあります。

デフォルト(つまりトークン)がどのように自動生成されるかを確認するには、defaults/main.ymlをチェックしてください。

Dnsmasq DNSフォワーディングサポート

このロールには、DNSフォワーディングのサポートが追加されました。Dnsmasqを使用しています。

次のように有効にします:

ansible-playbook -i hosts site.yml --extra-vars "consul_dnsmasq_enable=true"

その後、次のようにしてポート53で直接任意のエージェントをDNS経由でクエリできます。 例えば:

dig @consul1.consul consul3.node.consul

; <<>> DiG 9.8.3-P1 <<>> @consul1.consul consul3.node.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29196
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;consul3.node.consul.   IN  A

;; ANSWER SECTION:
consul3.node.consul.  0 IN  A 10.1.42.230

;; Query time: 42 msec
;; SERVER: 10.1.42.210#53(10.1.42.210)
;; WHEN: Sun Aug  7 18:06:32 2016
;;

consul_delegate_datacenter_dns

  • ConsulデータセンターのDNSドメインをConsulに委任するかどうか。
  • デフォルト値: false

consul_dnsmasq_enable

  • ポート53でDNS APIフォワーディングをインストールおよび構成するかどうか。
    • 環境変数CONSUL_DNSMASQ_ENABLEで上書き
  • デフォルト値: false

consul_dnsmasq_bind_interfaces

  • このオプションを_true_に設定すると、DNSmasqがデフォルトで0.0.0.0にバインドするのを防ぎ、consul_dnsmasq_listen_addressesオプションに対応する特定のネットワークインターフェースにバインドするように指示します。
  • デフォルト値: false

consul_dnsmasq_consul_address

  • DNSmasqがConsulにクエリを送信するためのアドレス
  • デフォルト値: consul_address.dns
  • ConsulのDNSがすべてのインターフェースにバインドされている場合(例:0.0.0.0)、127.0.0.1にデフォルト設定されます

consul_dnsmasq_cache

  • dnsmasqのキャッシュサイズ
  • 0未満の場合は、デフォルトのdnsmasq設定が使用されます
  • デフォルト値: -1

consul_dnsmasq_servers

  • dnsmasqが使用する上流DNSサーバー
  • デフォルト値: 8.8.8.88.8.4.4

consul_dnsmasq_revservers

  • リバースルックアップサブネット
  • デフォルト値: []

consul_dnsmasq_no_poll

  • /etc/resolv.confをポーリングしない
  • デフォルト値: false

consul_dnsmasq_no_resolv

  • /etc/resolv.confファイルを無視する
  • デフォルト値: false

consul_dnsmasq_local_service

  • ローカルサブネットからのリクエストのみを許可
  • デフォルト値: false

consul_dnsmasq_listen_addresses

  • リッスンするカスタムアドレスのリスト。
  • デフォルト値: []

consul_connect_enabled

  • Consul Connect機能を有効にしますか。
  • デフォルト値: false

consul_cleanup_ignore_files

  • クリーンアップステップ中に無視するファイルのリスト
  • デフォルト値: [{{ consul_configd_path }}/consul.env]

iptables DNSフォワーディングサポート

このロールは、DNSクエリをConsulにフォワードするためにDnsmasqの代わりにiptablesを使用することもできます。次のようにして有効にできます。

ansible-playbook -i hosts site.yml --extra-vars "consul_iptables_enable=true"

注意:iptablesフォワーディングとDnsmasqフォワーディングは同時に使用できず、そのような構成が指定された場合、ロールの実行はエラーで停止します。

TLSサポート

CA証明書、サーバー証明書、およびサーバーキーをロールのfilesディレクトリに落とすことでTLS暗号化を有効にできます。

これらの名前はデフォルトで次のようになります:

  • ca.crt({{ consul_tls_ca_crt }}で上書きできます)
  • server.crt({{ consul_tls_server_crt }}で上書きできます)
  • server.key({{ consul_tls_server_key }}で上書きできます)

次に、環境変数CONSUL_TLS_ENABLE=trueを設定するか、ロール実行時にAnsible変数consul_tls_enable=trueを使用してください。

サービス管理のサポート

Consulサービスの設定ファイルを作成できます。 consul_servicesにサービスのリストを追加します。

名称 必須 種類 デフォルト コメント
consul_services False List [] サービスオブジェクトのリスト(詳細は下記)

サービスオブジェクト:

名称 必須 種類 デフォルト コメント
name True string サービスの名前
id False string サービスのID
tags False list 文字列タグのリスト
address False string サービス専用のIPアドレス
meta False dict 64のキー/値の辞書
port False int サービスのポート
enable_tag_override False bool サービスのための抗エントロピー機能を有効/無効にします。
kind False string サービスをConnectプロキシインスタンスとして識別します
proxy False dict プロキシ設定
checks False list チェック設定リスト
connect False dict Connectオブジェクト設定
weights False dict DNS SRV応答のサービスの重み
token False string このサービスを登録するために使用するACLトークン

設定例:

consul_services:
  - name: "openshift"
    tags: ['production']
  - name: "redis"
    id: "redis"
    tags: ['primary']
    address: ""
    meta:
      meta: "for my service"
    proxy:
      destination_service_name: "redis"
      destination_service_id: "redis1"
      local_service_address: "127.0.0.1"
      local_service_port: 9090
      config: {}
      upstreams:  []
    checks:
      - args: ["/home/consul/check.sh"]
        interval: "10s"

その後、サービスが良好にカタログに追加されていることを確認できます。

> consul catalog services
consul
openshift
redis

注: このロールから追加されたサービスを削除するには、consul_servicesリストからそれを削除し、再度ロールを適用してください。

VagrantとVirtualBox

examples/README_VAGRANT.mdを参照して、開発、評価、テストなどのためのVirtualBox下での迅速なVagrantデプロイメントの詳細を参照してください。

ライセンス

BSD

著者情報

ブライアン・シュメイト

貢献者

このプロジェクトへの貢献については、CONTRIBUTORS.mdに記載されている人々に特別な感謝を申し上げます。

貢献は歓迎されます。提供され、CONTRIBUTING.mdに記載された条件に同意できる場合には特にです。

プロジェクトについて

Consul cluster role

インストール
ansible-galaxy install brianshumate.consul
ライセンス
bsd-2-clause
ダウンロード
492.4k
所有者
Art ⁂ Data ⁂ Boards ⁂ Water