Consul Basic Setup: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 118: Строка 118:
   
 
=Создание токенов=
 
=Создание токенов=
  +
  +
Для того что бы не польззоваться корневвым токеном (который зашит в конфиге и который нельзя отозвать) требуется создать отдельный токен с такими же правами
  +
<BR>
  +
Начиная с версии consul 1.11 механизм ACL изменен
  +
  +
==management token==
  +
Для доступа в качестве токена выступает `SecretID`
  +
<PRE>
  +
#!/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
  +
</PRE>

Версия 15:41, 4 февраля 2022


Базовая настройка 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