Consul Basic Setup: различия между версиями
Материал из noname.com.ua
Перейти к навигацииПерейти к поискуSirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показано 10 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
[[Категория:Hashicorp_Vault]] |
[[Категория:Hashicorp_Vault]] |
||
+ | [[Категория:Hashicorp_Consul]] |
||
[[Категория:Vault]] |
[[Категория:Vault]] |
||
+ | [[Категория:Consul]] |
||
[[Категория:Linux]] |
[[Категория:Linux]] |
||
Строка 7: | Строка 9: | ||
* Очень базовая однонодовая конфигурация |
* Очень базовая однонодовая конфигурация |
||
− | + | =Установка= |
|
<PRE> |
<PRE> |
||
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - |
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - |
||
Строка 13: | Строка 15: | ||
sudo apt-get update && sudo apt-get install consul |
sudo apt-get update && sudo apt-get install consul |
||
</PRE> |
</PRE> |
||
− | |||
=Базовая настройка= |
=Базовая настройка= |
||
Строка 43: | Строка 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