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

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 9 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
[[Категория:Hashicorp_Vault]]
 
[[Категория:Hashicorp_Vault]]
  +
[[Категория:Hashicorp_Consul]]
 
[[Категория:Vault]]
 
[[Категория:Vault]]
  +
[[Категория:Consul]]
 
[[Категория:Linux]]
 
[[Категория:Linux]]
   
Строка 42: Строка 44:
 
[Install]
 
[Install]
 
WantedBy=multi-user.target
 
WantedBy=multi-user.target
  +
</PRE>
  +
  +
  +
=Конфигурационные файлы=
  +
  +
===consul-server.json===
  +
<PRE>
  +
cat /etc/consul.d/consul-server.json
  +
</PRE>
  +
  +
<PRE>
  +
{
  +
"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
  +
}
  +
}
  +
</PRE>
  +
  +
  +
==/etc/consul.d/agent-network.json==
  +
<PRE>
  +
cat /etc/consul.d/agent-network.json
  +
</PRE>
  +
<PRE>
  +
{
  +
"advertise_addr": "10.14.15.201",
  +
"bind_addr": "0.0.0.0",
  +
"client_addr": "0.0.0.0",
  +
"bootstrap_expect": 1,
  +
"datacenter": "kilda-fred"
  +
}
  +
</PRE>
  +
  +
  +
==/etc/consul.d/agent-security.json==
  +
* Мастер токен - для примера ("333293a8-de42-11eb-bb8c-fffb98445924")
  +
* По сути это просто "секретная строка"
  +
* uuidgen
  +
  +
<PRE>
  +
cat /etc/consul.d/agent-security.json
  +
</PRE>
  +
<PRE>
  +
{
  +
"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
  +
}
  +
</PRE>
  +
  +
=Создание токенов=
  +
  +
Для того что бы не польззоваться корневвым токеном (который зашит в конфиге и который нельзя отозвать) требуется создать отдельный токен с такими же правами
  +
<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>
  +
  +
  +
==Older versions of Consul==
  +
Пример скрипта создания токена для более старых версий Consul
  +
* '''/usr/local/consul/etc/consul/consul.d/agent-security.json''' - путь к конфигурационному файлу
  +
<PRE>
  +
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
 
</PRE>
 
</PRE>

Текущая версия на 10:10, 9 октября 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


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