Consul Basic Setup
Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Базовая настройка Hashicorp Consul
- Для использования в качестве бекенда для Hashicorp Vault)
- Очень базовая однонодовая конфигурация
Установка
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" sudo apt-get update && sudo apt-get install consul
Базовая настройка
Unit немного исправлен
# systemctl cat consul.service
[Unit] Description="HashiCorp Consul - A service mesh solution" Documentation=https://www.consul.io/ Requires=network-online.target After=network-online.target ConditionFileNotEmpty=/etc/consul.d/consul-server.json [Service] EnvironmentFile=-/etc/consul.d/consul.env User=consul Group=consul ExecStart=/usr/bin/consul agent -config-dir=/etc/consul.d/ ExecReload=/bin/kill --signal HUP $MAINPID KillMode=process KillSignal=SIGTERM Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target
Конфигурационные файлы
consul-server.json
cat /etc/consul.d/consul-server.json
{
"node_name": "consul",
"disable_remote_exec": true,
"disable_update_check": true,
"leave_on_terminate": false,
"enable_script_checks": true,
"data_dir": "/opt/consul",
"server": true,
"performance": {
"raft_multiplier": 1
},
"ports": {
"dns": 8600,
"http": 8500,
"https": -1,
"server": 8300
},
"log_level": "DEBUG",
"ui_config": {
"enabled": true
}
}
/etc/consul.d/agent-network.json
cat /etc/consul.d/agent-network.json
{
"advertise_addr": "10.14.15.201",
"bind_addr": "0.0.0.0",
"client_addr": "0.0.0.0",
"bootstrap_expect": 1,
"datacenter": "kilda-fred"
}
/etc/consul.d/agent-security.json
- Мастер токен - для примера ("333293a8-de42-11eb-bb8c-fffb98445924")
- По сути это просто "секретная строка"
- uuidgen
cat /etc/consul.d/agent-security.json
{
"primary_datacenter": "kilda-fred",
"acl": {
"enabled": true,
"default_policy": "deny",
"tokens": {
"master": "333293a8-de42-11eb-bb8c-fffb98445924"
}
},
"encrypt": "dNEwk144P3GugO3fhEIAKl4gjyS8gLpggM41lmm+zug=",
"acl_enforce_version_8": true,
"raft_protocol": 3
}
Создание токенов
Для того что бы не польззоваться корневвым токеном (который зашит в конфиге и который нельзя отозвать) требуется создать отдельный токен с такими же правами
Начиная с версии consul 1.11 механизм ACL изменен
management token
Для доступа в качестве токена выступает SecretID
#!/bin/bash
set -eu${DEBUG:+x}
CONSUL_URL="http://127.0.0.1:8500"
# get Consul Master token and create managemet base on it.
# It will have same permissions but can be revoked if needed
CONSUL_CONFIG_DIR=/etc/consul.d/
CONSUL_HTTP_TOKEN=$(cat \
${CONSUL_CONFIG_DIR}/* \
| jq -r .acl.tokens.master \
| sed 's/null//g'
)
CONSUL_HTTP_TOKEN=$(echo ${CONSUL_HTTP_TOKEN})
#exit
TOKEN=$(curl -v \
-H "X-Consul-Token: ${CONSUL_HTTP_TOKEN}" \
-X PUT \
-d \
'
{
"Description": "Management token",
"Policies": [
{
"ID": "00000000-0000-0000-0000-000000000001"
},
{
"Name": "global-management"
}
],
"Local": false
}
' \
${CONSUL_URL}/v1/acl/token)
echo $TOKEN
echo ${TOKEN} >> ./managemet_token_all
echo ${TOKEN} | jq -re '.AccessorID' > AccessorID
echo ${TOKEN} | jq .SecretID -re > SecretID
Older versions of Consul
Пример скрипта создания токена для более старых версий Consul
- /usr/local/consul/etc/consul/consul.d/agent-security.json - путь к конфигурационному файлу
CONSUL_HTTP_TOKEN=$(cat \
/usr/local/consul/etc/consul/consul.d/agent-security.json \
| jq -r .acl.tokens.master
)
TOKEN=$(curl \
-kfsS \
-H "X-Consul-Token: ${CONSUL_HTTP_TOKEN}" \
-X PUT \
-d \
'{
"Name": "managemet-token",
"Type": "management"}
' \
${CONSUL_URL}/v1/acl/create | jq -re '.ID')
echo ${TOKEN} >> ./managemet_token