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- 用于 log_file or -log-file 的日志路径
- 如果
consul_syslog_enable
为 true- 用于在 Linux 上的 rsyslogd 配置的日志路径。如果
consul_configure_syslogd
为 false,则被忽略。
- 用于在 Linux 上的 rsyslogd 配置的日志路径。如果
- 默认 Linux 值:
/var/log/consul
- 可用环境变量
CONSUL_LOG_PATH
进行覆盖
- 可用环境变量
- 默认 Windows 值:
C:\ProgramData\consul\log
consul_log_file
- 如果
consul_syslog_enable
为 false- 用于 log_file or -log-file的日志文件
- 如果
consul_syslog_enable
为 true- 用于在 Linux 上的 rsyslogd 配置的日志文件。如果
consul_configure_syslogd
为 false,则被忽略。
- 用于在 Linux 上的 rsyslogd 配置的日志文件。如果
- 可用环境变量
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
- 日志旋转的最大文件数,如在 log_rotate_max_files or -log-rotate-max-files 中定义
- 可用环境变量
CONSUL_LOG_ROTATE_MAX_FILES
进行覆盖
- 可用环境变量
- 如果
consul_syslog_enable
为 true 则被忽略 - 默认值:0
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 文件,请禁用此选项
- 如果启用 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
- 优先使用服务器的加密套件而不是客户端的加密套件
- 可用环境变量
CONSUL_TLS_PREFER_SERVER_CIPHER_SUITES
进行覆盖
- 可用环境变量
- 默认值:false
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 角色,其值为:bootstrap、server 或 client
- 默认值: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
- 节点离开排水时间 是服务器在优雅离开期间尊重请求的停留时间
- 默认值:5s
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 模块以提高效率,因此请确保您的系统已安装 gtar
和 unzip
并在 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
进行以下操作:
- 执行 consul 角色(安装 Consul 并引导集群)
- 重新配置引导节点以在没有 bootstrap-expect 设置的情况下运行
- 重启引导节点
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_TOKEN
和 CONSUL_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.8 和 8.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
作者信息
贡献者
特别感谢在 CONTRIBUTORS.md 中列出的人的贡献。
欢迎贡献,前提是您能同意 CONTRIBUTING.md 中概述的条款。
ansible-galaxy install brianshumate.consul