Я пытаюсь настроить Consul с Vault для управления секретами Postgres с помощью Docker. Вот моя конфигурация
Dokcerfile:
FROM python:3.6-slim
ENV VAULT_VERSION 0.11.1
ENV CONSUL_VERSION 1.2.3
RUN apt-get update \
&& apt-get install -y \
build-essential \
git \
curl \
wget \
vim \
net-tools \
iputils-ping \
dnsutils \
zip \
unzip \
&& wget -O /tmp/vault.zip "https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip" \
&& unzip -d /bin /tmp/vault.zip \
&& chmod 755 /bin/vault \
&& rm /tmp/vault.zip \
&& wget -O /tmp/consul.zip "https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip" \
&& unzip -d /bin /tmp/consul.zip \
&& chmod 755 /bin/consul \
&& rm /tmp/consul.zip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
docker-compose.yml:
version: '3.6'
services:
consul:
container_name: consul.server
command: agent -server -bind 0.0.0.0 -client 0.0.0.0 -bootstrap-expect=1
image: consul:latest
volumes:
- ./config/consul/config:/consul/config
ports:
- "9300:9300"
- "9500:9500"
- "9600:9600/udp"
networks:
- consul_network
vault:
container_name: vault.server
image: vault
ports:
- "9200:8200"
cap_add:
- IPC_LOCK
depends_on:
- consul
environment:
- VAULT_LOCAL_CONFIG={"backend":{"consul":{"address":"${LOCAL_IP}:9500","advertise_addr":"http://${LOCAL_IP}", "path":"vault/"}},"listener":{"tcp":{"address":"0.0.0.0:8200","tls_disable":1}}}
command: server
networks:
- consul_network
db:
image: postgres:10.5-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- CONSUL_HTTP_ADDR=${LOCAL_IP}:9500
- VAULT_ADDR=http://${LOCAL_IP}:9200
networks:
- consul_network
- database_network
networks:
consul_network:
driver: bridge
database_network:
driver: bridge
volumes:
postgres_data:
А также я сохраняю LOCAL_IP в файле .env:
LOCAL_IP=10.0.2.15
(Я разрабатываю на машине Vagrant, отсюда и адрес). Я следил за этим руководство и я предполагаю, что контейнер db должен иметь доступ как к consle.server, так и к vault.server, но это не так. (?)
Во-вторых, я подключился к vault.server и попытался получить статус хранилища, который ответил
Error checking seal status: Get https://127.0.0.1:8200/v1/sys/seal-status: http: server gave HTTP response to HTTPS client
Я только начал изучать Docker и, честно говоря, даже не знаю, с чего начать поиск ответов, поэтому, если бы кто-нибудь мог дать мне направление, я был бы более чем благодарен.
Ура.
В VAULT_ADDR
переменная среды должна быть установлена на http://127.0.0.1:8200
При обычном запуске vault
server вы увидите это в выводе при работе с отключенным TLS:
You may need to set the following environment variable:
$ export VAULT_ADDR='http://127.0.0.1:8200'