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