brianshumate.consul

Consul

这个 Ansible 角色安装 Consul,包括建立文件系统结构和配置服务器或客户端代理,并支持一些常见的操作功能。

它还可以在基于 Vagrant 和 VirtualBox 的环境中启动一个 3 个服务器代理的开发或评估集群。有关更多详细信息,请参见 README_VAGRANT.md 和相关的 Vagrantfile

角色理念

“人类性格的另一个缺陷是每个人都想建造,而没人想做维护。”
― 科特·冯内古特,Hocus Pocus

请注意,该角色的初始设计目标更关注于 Consul 服务器集群环境的初始安装和引导,因此目前不太关注集群的持续维护。

许多用户表示,基于 Vagrant 的环境使得启动一个本地 Consul 服务器集群变得简单,因此该角色将把这种体验作为存在的主要动机。

如果您以其他方式受益,那更好!

角色迁移和安装

该角色最初由 Brian Shumate 开发,并在 Ansible Galaxy 上以 brianshumate.consul 出名。Brian 请求社区减轻维护负担,因此 Bas Meijer 将该角色转移到 ansible-collections 以便志愿团队进行维护。要将此角色安装到项目中,您应在项目的 roles/ 子目录中创建一个名为 requirements.yml 的文件,内容如下:

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

此代码库有标记的发布版本,您可以使用它来固定版本。

如果您使用 CLI 控制 Ansible,Tower 将自动安装该角色,则可使用以下命令安装:

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

要求

该角色需要 FreeBSD、Debian、Red Hat 企业 Linux 发行版或 Windows Server 2012 R2。

该角色可能在其他操作系统发行版和版本中有效,但已知可与以下软件版本良好兼容:

  • 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 存档,解压并在所有所需的 Consul 主机上安装生成的二进制文件。

这样做要求 Ansible 控制主机上必须可用 unzip,如果没有在 PATH 中检测到 unzip,则角色将失败。

此角色的集合要求在 requirements.yml 文件中列出。确保安装这些集合以确保角色正常运行通常可以通过以下方式完成:

ansible-galaxy collection install -r requirements.yml

注意事项

该角色不完全支持限制选项(ansible -l)来限制主机,因为这将破坏所需的主机变量填充。如果您使用该角色使用限制选项,则可能会遇到类似于以下内容的模板错误:

未定义的值无法序列化为 JSON

角色变量

角色使用在以下 3 个地方定义的变量:

  • 主机清单文件(请参见 examples/vagrant_hosts 获取示例)
  • vars/*.yml(主要是针对操作系统/发行版的特定变量)
  • defaults/main.yml(其他所有内容)

:warning: 注意:该角色依赖于清单主机组将 Consul 服务器定义为变量 consul_group_name,否则将无法正常工作。或者,Consul 服务器可以放置在清单的默认主机组 [consul_instances] 中,如下面的示例所示。

许多角色变量的值也可以来自环境变量;在适当的位置会在说明中指出。

consul_version

  • 要安装的版本
  • 将值设置为 latest 以获取最新版本的 Consul
  • 默认值: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 or -data-dir 中定义
  • 默认 Linux 值:/opt/consul
  • 默认 Windows 值:C:\ProgramData\consul\data

consul_configure_syslogd

  • 启用 rsyslogd 或 syslog-ng 的配置。如果禁用,Consul 仍将记录到 syslog 中(如果 consul_syslog_enable 为 true),但 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 or -log-rotate-bytes 中定义
    • 可用环境变量 CONSUL_LOG_ROTATE_BYTES 进行覆盖
  • 如果 consul_syslog_enable 为 true 则被忽略
  • 默认值:0

consul_log_rotate_duration

  • 日志旋转的持续时间,如在 log_rotate_duration or -log-rotate-duration 中定义
    • 可用环境变量 CONSUL_LOG_ROTATE_DURATION 进行覆盖
  • 如果 consul_syslog_enable 为 true 则被忽略
  • 默认值:24h

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

  • 进程标识符 (PID) 文件的运行路径
  • 默认 Linux 值:/run/consul
  • 默认 Windows 值:C:\ProgramData\consul

consul_user

  • 操作系统用户
  • 默认 Linux 值:consul
  • 默认 Windows 值:LocalSystem

consul_manage_user

  • 是否创建由 consul_user 定义的用户
  • 默认值:true

consul_group

  • 操作系统组
  • 默认值: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 设置为 server 或 bootstrap

consul_bootstrap_expect

  • 布尔值,向 Consul 服务器的配置文件添加 bootstrap_expect 值
  • 默认值:false

consul_bootstrap_expect_value

  • 整数,定义加入集群的最小 Consul 服务器数,以便选举领导。
  • 默认值:根据节点数量在运行时计算

consul_gather_server_facts

此功能使得可以从当前未被 playbook 目标锁定的服务器收集 consul_advertise_address(_wan)

为此使用了 delegate_facts 选项;请注意,此选项可能会有问题。

  • 从当前未被目标锁定的服务器收集数据
  • 默认值:false

consul_datacenter

  • 数据中心标签
    • 可用环境变量 CONSUL_DATACENTER 进行覆盖
  • 默认值:dc1
  • 默认值:dc1

consul_domain

  • Consul 域名,在 domain or -domain 中定义
    • 可用环境变量 CONSUL_DOMAIN 进行覆盖
  • 默认值:consul

consul_alt_domain

  • Consul 域名,在 alt_domain or -alt-domain 中定义
    • 可用环境变量 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

  • 日志级别,根据 log_level or -log-level 中定义
    • 可用环境变量 CONSUL_LOG_LEVEL 进行覆盖
  • 默认值:INFO

consul_syslog_enable

  • 根据 enable_syslog or -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

  • 优先使用节点配置的 WAN 地址来提供 DNS
  • 默认值: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

  • 官方文档中的 端口使用情况
  • 端口映射是嵌套 dict 对象,允许设置以下键的绑定端口:
    • dns - DNS 服务器,-1 禁用。默认 8600。
    • http - HTTP API,-1 禁用。默认 8500。
    • https - HTTPS API,-1 禁用。默认 -1(禁用)。
    • rpc - CLI RPC 端点。默认 8400。在 Consul 0.8 及更高版本中已弃用。
    • grpc - gRPC 端点,-1 禁用。默认 -1(禁用)。
    • grpc_tls - gRPC TLS 端点,-1 禁用。默认 -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) }}"

请注意,字典对象必须严格使用文档中说明的名称!所有端口必须被指定。可以使用 consul_ports_* 变量覆盖一个或多个端口。

consul_node_name

  • 定义自定义节点名称(不应包含点) 请参见 node_name
    • Consul 的默认值是服务器的主机名。
  • 默认值:''

consul_recursors

  • 上游 DNS 服务器列表 请参见 recursors
    • 可用环境变量 CONSUL_RECURSORS 进行覆盖
  • 默认值:空列表

consul_iptables_enable

  • 是否为 DNS 转发到 Consul 启用 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_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 进行覆盖
    • 对于版本 < 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

  • 是否直接在远程主机上下载安装文件
  • 由于 WinRM 在此方面的限制,这也是 Windows 上唯一的选项
  • 默认值: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 角色,其值为:bootstrapserverclient
  • 默认值:client

应指定一台服务器作为引导服务器,其他服务器将连接到该服务器。您还可以将角色指定为 client,而将 Consul 配置为客户端代理而不是服务器。

设置集群有两种方法,第一种是明确选择引导服务器,第二种是让服务器在彼此之间选举一个领导者。

以下是如何为简单的 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

请注意,这第二种形式是首选形式,因为它更简单。

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

用于在 serf 健康检查中确定节点健康状态。

  • 设置上次联系的时间阈值
    • 可用环境变量 CONSUL_AUTOPILOT_LAST_CONTACT_THRESHOLD 进行覆盖
  • 默认值:200ms

consul_autopilot_max_trailing_logs

  • 在 serf 健康检查中设置节点可以滞后于领导者的最大日志条目数
    • 可用环境变量 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 节点,以避免对现有集群的服务中断(仅 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

  • 布尔值,true 将设置并启动快照代理(仅限企业版)
  • 默认值:false

consul_snapshot_storage

  • 快照将存储的位置。注意:路径必须以 snaps 结尾
  • 默认值:{{ consul_config_path }}/snaps

consul_snapshot_interval

  • 默认值:1h

consul_snapshot_retain

操作系统和发行版变量

consul 二进制文件适用于大多数 Linux 平台,并不专属于某个发行版。然而,一些发行版要求安装特定的操作系统软件包,而它们可能具有不同的软件包名称。

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

  • 要安装的操作系统软件包列表
  • 默认值:列表

consul_debian_pkg

  • Consul 软件包文件名
  • 默认值:{{ consul_version }}_linux_amd64.zip

consul_debian_url

  • Consul 软件包下载 URL
  • 默认值:{{ consul_zip_url }}

consul_debian_sha256

  • Consul 下载的 SHA256 摘要
  • 默认值:SHA256 摘要

consul_debian_os_packages

  • 要安装的操作系统软件包列表
  • 默认值:列表

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

  • 要安装的操作系统软件包列表
  • 默认值:列表

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

  • 要安装的操作系统软件包列表
  • 默认值:列表

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

  • 要安装的操作系统软件包列表
  • 默认值:列表

consul_performance

  • Consul 性能调优项的列表
  • 默认值:列表

raft_multiplier

  • Raft 乘数 使关键 Raft 定时参数成比例放大
  • 默认值:1

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 文件。

在具有不同(即 BSD)tar 的系统上,比如 macOS,并且在解压缩任务期间出现奇怪错误,您可能缺少 gtar

在 Windows 上安装 Ansible 需要 PowerShell Community Extensions。这在 Windows Server 2012 R2 及更高版本上已经安装。如果您在 Windows Server 2008 或更早版本上尝试此角色,您需要在 这里 安装扩展。

示例 Playbook

可以使用包含的 site.yml playbook 进行基本安装:

ansible-playbook -i hosts site.yml

您还可以使用 --extra-vars 选项在 ansible-playbook 命令中传递变量:

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

请注意,针对集群的 included site.yml 进行以下操作:

  1. 执行 consul 角色(安装 Consul 并引导集群)
  2. 重新配置引导节点以在没有 bootstrap-expect 设置的情况下运行
  3. 重启引导节点

ACL 支持

该角色包含对 ACL 的基本支持。您可以将环境变量 CONSUL_ACL_ENABLE 设置为 true,同时在执行 playbook 之前设置正确的值,例如:

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

您可以覆盖许多 Ansible ACL 变量,以进一步细化初始的 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

  • 是否使用 DNSMasq 在端口 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 转发支持

该角色还可以使用 iptables 而不是 Dnsmasq 将 DNS 查询转发到 Consul。您可以像这样启用它:

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

有关在 VirtualBox 中快速部署 Vagrant 以进行开发、评估、测试等的详细信息,请参见 examples/README_VAGRANT.md

许可证

BSD

作者信息

Brian Shumate

贡献者

特别感谢在 CONTRIBUTORS.md 中列出的人的贡献。

欢迎贡献,前提是您能同意 CONTRIBUTING.md 中概述的条款。

安装
ansible-galaxy install brianshumate.consul
许可证
bsd-2-clause
下载
492.4k
拥有者
Art ⁂ Data ⁂ Boards ⁂ Water