我有一个在 Consul 注册的测试服务,其服务定义如下:
{
"name": "web",
"tags": ["web1"],
"address": "example.com",
"meta": {
"meta": "cluster",
"acl": "host_test",
"cluster": "test_cluster"
},
"port": 8000
}
Run Code Online (Sandbox Code Playgroud)
我想使用 consul-template 将该信息加载到 HAProxy 配置中。我可以按照文档中的说明获取地址和端口:
{{ range service "web" }}{{if in .Tags "web1"}}
server {{.Node}} {{ .Address }}:{{.Port}} cookie A check
{{ end }}{{end}}
Run Code Online (Sandbox Code Playgroud)
但我似乎无法获得元信息。我想我可以在服务范围内使用这样的东西来访问它:
{{range .Meta}}
{{.}}{{end}}
Run Code Online (Sandbox Code Playgroud)
知道如何从元中获取 acl 或集群吗?
我在 json 中有应用程序配置,每个应用程序最多有 80 个键/值对,这些键/值对将存储在 Consul KV Store 中。一般来说,它们是java键值属性,我有一个简单的shell脚本,它对值进行编码并将其转换为与consul import命令兼容的导入。我正在尝试为船上的新应用程序(开始使用 consul 进行 KV 存储的应用程序)自动执行 consul KV 导入。到目前为止,我们正在手动运行consul kv import @app_config.json,但是,我想调用 HTTP api,而不是通过 consul KV import 进行导入。请问有什么建议吗?
json 格式的应用程序配置示例。
[
{
"key": "asia",
"flags": 0,
"value": "NDQzNg=="
},
{
"key": "asia/india",
"flags": 0,
"value": "MTMyNA=="
},
{
"key": "europe",
"flags": 0,
"value": "NzQzLjE="
},
{
"key": "europe/france",
"flags": 0,
"value": "NjYuOQ=="
},
{
"key": "europe/germany",
"flags": 0,
"value": "ODIuNjc="
}
]
Run Code Online (Sandbox Code Playgroud) 我在 consul-template 中使用以下模板:
{{ range services }}
{{ $server_name := .Name | replaceAll "_" "." }}
{{ range .Tags }}
{{ if . | regexMatch "server_name=" }}
# found matching server_name in {{ . }}
{{ $server_name := . | regexReplaceAll ".*=" "" }}
{{ end }}
{{ end }}
# server_name = {{ $server_name }}
acl host_{{ .Name }} hdr(host) -i {{ $server_name }}
use_backend {{ .Name }}_backend if host_{{ .Name }}
{{ end }}
Run Code Online (Sandbox Code Playgroud)
产生
# found matching …Run Code Online (Sandbox Code Playgroud) 假设 Consul 和 Nomad 已配置为在资源池上运行。您将如何仅出于生成 Nginx 'default.conf' 文件的目的而呈现模板文件。
以下面的模板节配置为例;Nomad 无法生成 default.conf '文件';而是创建了一个 default.conf '目录'。
template {
source = "/path/to/tmp.ctmpl"
destination = "folder/default.conf"
change_mode = "restart"
change_signal = "SIGINT"
}
Run Code Online (Sandbox Code Playgroud)
我要么错过了一个技巧,要么误解了“模板节”的功能。
模板生成目录而不是文件的问题之一是,您无法将目录挂载到配置文件路径。因此,运行使用 Nomad docker 驱动程序和示例“docker”卷配置的任务会导致错误。
volumes = ["/path/to/job/folder/default.conf:/etc/nginx/conf.d/default.conf" ]
Run Code Online (Sandbox Code Playgroud)
还是不可能让模板节生成配置文件?
*Ps 使用 Nomad 构建 0.5.5 **
我刚刚继承了一个 Nginx 代理/应用程序服务器设置,它使用 Consul 和 Consul Template 进行服务发现和注册。Nginx 代理有一个配置文件,其中包含如下条目,用于注册下游应用程序服务器:
<snip>
upstream appservers {
{{ range service "my-app-servers" }}
server {{ .Address }}.{{ .Port }};
{{ end }}
}
<snip>
Run Code Online (Sandbox Code Playgroud)
我consul-template在后台运行以捕获任何更新my-app-servers,适当更新nginx.conf文件,然后重新加载 nginx 配置。这一切都很有效,我们可以根据需要在组合中添加和删除应用程序服务器。也就是说,如果存在没有可用应用程序服务器的情况,我们最终会得到一个空upstream块,从而导致 nginx 重新加载失败。
consul-template 有没有办法拥有"if service my-app-servers exists, then..."逻辑"if not, then..."?我希望能够让我的nginx.conf文件具有针对上游服务器存在的情况的一种配置,以及另一种在上游服务器不存在时显示错误页面的应急设置。我仍在了解 consul-template 的最新进展,并且还没有看到任何显示此类逻辑语法的示例。有什么帮助吗?
我有领事在Mesos上运行的Consul v0.5.2版本和服务上运行.服务从1台服务器转移到另一台服务器.
是否有办法取消注册处于"失败"状态的领事服务?我可以使用此卷曲获取处于失败状态的服务列表
curl http://localhost:8500/v1/health/state/critical
Run Code Online (Sandbox Code Playgroud)
我们看到的问题是在consul UI中的一段时间内我们有过时的数据并使整个UI无法使用
我有以下领事模板。
{{ range service "mysql_slave.mysql" "any" }}
host_name {{.Node}}
command check_nrpe!check_procs_1
{{end}}
Run Code Online (Sandbox Code Playgroud)
我想添加如果我的主机名匹配“database-1”然后命令“check_procs_1”和其他命令“check_procs_2”
输出
host_name node_server
command check_nrpe!check_procs_2
host_name database-1
command check_nrpe!check_procs_1
host_name webserver
command check_nrpe!check_procs_2
Run Code Online (Sandbox Code Playgroud) 我们的应用程序有多个环境,我尝试使用通用 consul 模板和环境变量来为不同环境创建 haproxy 配置。这就是我正在尝试做的事情:
{{$environment := "yellow" }} .... 平衡leastconn {{range service "myservice-{{$env}}"}} ....
我似乎找不到在这个范围内使用这个变量的方法。有办法让它发挥作用吗?
谢谢!
给定 Consul 密钥:
flyway/tweedle/server: postgres
flyway/beetle/server: postgres
flyway/battle/server: mysql
service/tweedle/repo: fox/tweedle.git
service/beetle/repo: fox/beetle.git
service/battle/repo: fox/battle.git
Run Code Online (Sandbox Code Playgroud)
我试图循环遍历顶部集合,使用键查找底部集合中的值,使用以下代码(不起作用):
{
{{ range $key, $pairs :=tree "flyway/" | explode }}
$key: {{ key "service/{{$key}}/repo" }}
{{ end }}
}
Run Code Online (Sandbox Code Playgroud)
要得到:
tweedle: fox/tweedle.git
beetle: fox/beetle.git
battle: fox/battle.git
Run Code Online (Sandbox Code Playgroud)