Hashicorp Vault
HashiCorp Vault āđāļāđāļāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļąāļāļāļēāļĢāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļāļēāļĢāđāļāđāļēāļāļķāļāļāđāļāļĄāļđāļĨāļŠāļģāļāļąāļāđāļāļĢāļ°āļāļāđāļāļāļĩ āļĄāļąāļāļāļđāļāļāļāļāđāļāļāļĄāļēāđāļāļ·āđāļāļāļąāļāđāļāđāļ āļāļąāļāļāļēāļĢ āđāļĨāļ°āļāļ§āļāļāļļāļĄāļāļēāļĢāđāļāđāļēāļāļķāļāļāđāļāļĄāļđāļĨāļĨāļąāļāļāđāļēāļ āđ āđāļāđāļ āļĢāļŦāļąāļŠāļāđāļēāļ āļāļĩāļĒāđ API āđāļĨāļ°āļāđāļāļĄāļđāļĨāļāļĩāđāđāļāđāļāļāļ§āļēāļĄāļĨāļąāļāļāļ·āđāļ āđ āđāļāļĒāļĄāļĩāļāļļāļāļŠāļĄāļāļąāļāļīāļāļĩāđāļŠāļģāļāļąāļāļāļąāļāļāļĩāđ
āļāļēāļĢāļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāļĨāļąāļ (Secrets Management): Vault āļāđāļ§āļĒāđāļāļāļēāļĢāļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāļĨāļąāļāļāđāļēāļ āđ āđāļāļāļĩāđāđāļāļĩāļĒāļ§ āđāļĨāļ°āļāļ§āļāļāļļāļĄāļāļēāļĢāđāļāđāļēāļāļķāļāļāļĒāđāļēāļāđāļāđāļĄāļāļ§āļ āļāļđāđāđāļāđāļāļēāļāļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļāļŠāļīāļāļāļīāđāļāļēāļĢāđāļāđāļēāļāļķāļāđāļāđāļāļēāļĄāļāļāļāļēāļāļŦāļĢāļ·āļāļāļēāļĢāļāļģāļŦāļāļāļāđāļĒāļāļēāļĒāđāļāļāļēāļ°
Dynamic Secrets: Vault āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāļāđāļāļĄāļđāļĨāļĨāļąāļāđāļāļāļāļąāđāļ§āļāļĢāļēāļ§āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāđāļēāļāļķāļāļĢāļ°āļāļāļ āļēāļĒāļāļāļ āđāļāđāļ āļāļēāļāļāđāļāļĄāļđāļĨāļŦāļĢāļ·āļāļāļĢāļīāļāļēāļĢāļāļ·āđāļ āđ āļāļķāđāļāļāđāļāļĄāļđāļĨāļĨāļąāļāđāļŦāļĨāđāļēāļāļĩāđāļāļ°āļāļđāļāļŠāļĢāđāļēāļāđāļŦāļĄāđāđāļāļāļļāļāļāļĢāļąāđāļāļāļĩāđāļĄāļĩāļāļēāļĢāļĢāđāļāļāļāļ āđāļĨāļ°āļāļ°āļŦāļĄāļāļāļēāļĒāļļāđāļĄāļ·āđāļāđāļāđāļāļēāļāđāļŠāļĢāđāļāļŠāļīāđāļ
Encryption as a Service: Vault āđāļŦāđāļāļĢāļīāļāļēāļĢāļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠāļāđāļāļĄāļđāļĨāļāđāļēāļ API āđāļāļ·āđāļāđāļāđāđāļāļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠāđāļĨāļ°āļāļāļāļĢāļŦāļąāļŠāļāđāļāļĄāļđāļĨāļāđāļēāļ āđ āđāļāļĒāļāļĩāđāđāļāļāļāļĨāļīāđāļāļāļąāļāļŦāļĢāļ·āļāļĢāļ°āļāļāļāđāļēāļ āđ āđāļĄāđāļāļģāđāļāđāļāļāđāļāļāļĄāļĩāļāļēāļĢāļāļąāļāļāļēāļĢāļāļĩāļĒāđāđāļāđāļēāļĢāļŦāļąāļŠāđāļāļ
āļāļēāļĢāļāļ§āļāļāļļāļĄāļāļēāļĢāđāļāđāļēāļāļķāļāļāļĩāđāļāļĨāļāļāļ āļąāļĒ (Access Control): Vault āļĄāļĩāļĢāļ°āļāļāļāļēāļĢāļāļ§āļāļāļļāļĄāļŠāļīāļāļāļīāđāļāļēāļĢāđāļāđāļēāļāļķāļāļāļĩāđāļĨāļ°āđāļāļĩāļĒāļ āļāļđāđāđāļāđāļāļēāļāļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļēāļāļķāļāđāļāļāļēāļ°āļāđāļāļĄāļđāļĨāļāļĩāđāļāļģāđāļāđāļāļāļēāļĄāļāļĩāđāđāļāđāļĢāļąāļāļāļāļļāļāļēāļ āļāļķāđāļāļĨāļāļāļ§āļēāļĄāđāļŠāļĩāđāļĒāļāļāļēāļāļāļēāļĢāđāļāļīāļāđāļāļĒāļāđāļāļĄāļđāļĨāļāļĩāđāđāļĄāđāļāļģāđāļāđāļ
Audit Logging: Vault āļĄāļĩāļāļēāļĢāļāļąāļāļāļķāļāļāļēāļĢāđāļāđāļāļēāļāđāļāļ·āđāļāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļāļĢāļ§āļāļŠāļāļāļāļēāļĢāđāļāđāļēāļāļķāļāđāļĨāļ°āđāļāđāļāļēāļāļāđāļāļĄāļđāļĨāļĨāļąāļāļāđāļēāļ āđ āļāļģāđāļŦāđāļĄāļĩāļāļ§āļēāļĄāđāļāļĢāđāļāđāļŠāđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāļāļīāļāļāļēāļĄāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāļĒāđāļāļāļŦāļĨāļąāļāđāļāđ
Consul āļāļ·āļāļāļ°āđāļĢ
Consul āđāļāđāļāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļĩāđāđāļŦāđāļāļĢāļīāļāļēāļĢ service discovery āđāļĨāļ° distributed key-value store āļāļĩāđāđāļāđāļŠāļģāļŦāļĢāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāđāļāđāļ āļāļēāļĢāļāļģāļŦāļāļāļāđāļēāđāļĨāļ°āļāđāļāļĄāļđāļĨāļŠāļ āļēāļ§āļ°āļāļēāļĢāļāļģāļāļēāļāļāļāļāļĢāļ°āļāļāđāļāļāļāļĢāļ°āļāļēāļĒāļāļąāļ§ (distributed systems) āđāļāļĒ Consul āļĄāļĩāļāļļāļāļŠāļĄāļāļąāļāļīāļŦāļĨāļąāļ āđ āļāļąāļāļāļĩāđ
High Availability: āļŠāļēāļĄāļēāļĢāļāļāļģāļāļēāļāđāļāđāļŦāļĄāļāļāļĢāļ°āļāļēāļĒāļāļąāļ§āļāļĩāđāļĄāļĩāļŦāļĨāļēāļĒāđāļŦāļāļ (nodes) āđāļāļ·āđāļāđāļāļīāđāļĄāļāļ§āļēāļĄāļāļāļāļēāļāļāđāļāļāļēāļĢāļĨāđāļĄāđāļŦāļĨāļ§
Replication: Consul āļāļ°āļāļģāļāļēāļĢ replicates āļāđāļāļĄāļđāļĨāļĢāļ°āļŦāļ§āđāļēāļāđāļŦāļāļāļŦāļĨāļēāļĒāđāļŦāļāļ āđāļāļ·āđāļāļāļ§āļēāļĄāļāļāļāļēāļāļāđāļāļāļēāļĢāļŠāļđāļāđāļŠāļĩāļĒāļāđāļāļĄāļđāļĨ
Service Discovery: āļĄāļĩāļāļļāļāļŠāļĄāļāļąāļāļīāļāļēāļĢāļāđāļāļŦāļēāļāļĢāļīāļāļēāļĢāđāļĨāļ°āļāļēāļĢāļāļīāļāļāļēāļĄāļŠāļļāļāļ āļēāļ (health checking) āļāļāļāļāļĢāļīāļāļēāļĢāđāļāļĢāļ°āļāļ
āļāļēāļĢāđāļāđ Consul āđāļāđāļ backend āļŠāļģāļŦāļĢāļąāļ HashiCorp Vault āđāļāđāļāļāļēāļĢāļāļąāđāļāļāđāļēāļāļĩāđāļāđāļ§āļĒāđāļŦāđ Vault āļŠāļēāļĄāļēāļĢāļāļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāļāļĩāđāļŠāļģāļāļąāļāđāļĨāļ°āļĄāļĩāļāļ§āļēāļĄāļāļāļāļēāļāđāļāļāļēāļĢāļāļģāļāļēāļ āđāļāļĒ Consul āļāļģāļŦāļāđāļēāļāļĩāđāđāļāđāļ Storage Backend āļāļĩāđāļŠāļēāļĄāļēāļĢāļāļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāļāđāļēāļ āđ āļāļĩāđ Vault āļāđāļāļāļāļēāļĢāđāļāđāļ āđāļāđāļ Secret, Tokens, āđāļĨāļ°āļāđāļāļĄāļđāļĨāļāļēāļĢāļāļģāļŦāļāļāļāđāļēāļāļ·āđāļ āđ āļāļēāļĢāļāļąāđāļāļāđāļē Consul āđāļāđāļ backend āļĄāļĩāļāļĢāļ°āđāļĒāļāļāđāđāļāļāđāļēāļāļāļēāļĢāļāļąāļāđāļāđāļāļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļāļēāļĢāļāļĢāļ°āļāļēāļĒāđāļŦāļĨāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāđāļāļēāļ Vault āđāļ production environment
āļāļēāļĢāļāļīāļāļāļąāđāļ Hashicorp Vault
āļāļīāļāļāļąāđāļ Consul
āļāļēāļāļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ āļāļ°āļāļīāļāļāļąāđāļ consul āļāļ Kubernetes cluster āļāđāļēāļ Helm Chart āļāļāļ Hashicorp
Architecture
āļāļēāļĄ recommend āļāļāļ Hashicorp āļāļģāļŦāļāļāļ§āđāļē consul server āļāļ§āļĢāļĄāļĩāļāļĒāđāļēāļāļāđāļāļĒ 5 node āđāļĨāļ°āļāļĢāļ°āļāļēāļĒāļāļąāļāļāļĒāļđāđāđāļ 3 AZ āđāļāđāđāļāļĒāļŠāđāļ§āļāļĄāļēāļāļŠāļģāļŦāļĢāļąāļ small production site āđāļāđ 3 node āļāđāđāļāļĩāļĒāļāļāļ āđāļāđāļāļāļąāļ

Hardware Requirement
Small
2-4 core
8-16 GB
100+ GB
3000+ IOPS
75+ MB/s
Large
8-16 core
32-64 GB
200+ GB
7500+ IOPS
250+ MB/s
Network Latency Requirement
round trip time (RTT) āđāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļāļąāļāļĢāļ°āļŦāļ§āđāļēāļ agent āļāđāļāļāđāļĄāđāđāļāļīāļ āļāļąāļāļāļĩāđ
RTT āļāļāļāļāļļāļ traffic āđāļāļĒāđāļāļĨāļĩāđāļĒ āļāđāļāļāđāļĄāđāđāļāļīāļ 50ms
RTT āļāļĩāđ percentile 99 āļāđāļāļāđāļĄāđāđāļāļīāļ 100ms
Firewall rule
RPC
8300 / TCP
All agents (client & server)
Server agents
Used by servers to handle incoming requests from other agents.
Serf LAN
8301 / TCP & UDP
All agents (client & server)
All agents (client & server)
Used to handle gossip in the LAN. Required by all agents.
Serf WAN
8302 / TCP & UDP
Server agents
Server agents
Used by server agents to gossip over the WAN to other server agents. Only used in multi-cluster environments.
HTTP/HTTPS
8500 & 8501 TCP
Localhost of client or server agent
Localhost of client or server agent
Used by clients to talk to the HTTP API. HTTPS is disabled by default.
DNS
8600 TCP & UDP
Localhost of client or server agent
Localhost of client or server agent
Used to resolve DNS queries.
gRPC (Optional)
8502 TCP
Envoy proxy
Client agent or server agent that manages the sidecar proxies service registration
Used to expose the xDS API to Envoy proxies. Disabled by default.
Sidecar Proxy (Optional)
21000 - 21255 TCP
All agents (client & server)
Client agent or server agent that manages the sidecar proxies service registration
Port range used for automatically assigned sidecar service registrations.
āļāļąāļ§āļāļĒāđāļēāļ value file
āļŠāļĢāđāļēāļāđāļāļĨāđ consul.values.yaml
global:
name: consul
datacenter: dc1
gossipEncryption:
autoGenerate: true
server:
replicas: 3
storage: 10Gi
resources:
requests:
memory: '1Gi'
cpu: '1'
limits:
memory: '1Gi'
cpu: null # override existing cpu limit value
topologySpreadConstraints: |
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: {{ template "consul.name" . }}
release: "{{ .Release.Name }}"
component: server
client:
enabled: true
resources:
requests:
memory: '512Mi'
cpu: '500m'
limits:
memory: '512Mi'
cpu: null # override existing cpu limit value
ui:
enabled: true
service:
type: ClusterIP
āļāļīāļāļāļąāđāļāļāđāļ§āļĒāļāļģāļŠāļąāđāļāļāļąāļāļāļĩāđ
helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update
helm upgrade --install consul hashicorp/consul --values consul.values.yaml --create-namespace --namespace vault
āļāļīāļāļāļąāđāļ Vault
āđāļāļĢāļĩāļĒāļĄ YAML file āļāļ·āđāļ vault.values.yaml
āļāļąāļāļāļĩāđ
server:
ha:
enabled: true
replicas: 3
auditStorage:
enabled: true
size: 10Gi
resources:
requests:
memory: "1Gi"
cpu: "250m"
limits:
memory: "1Gi"
topologySpreadConstraints: |
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/name: {{ include "vault.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
component: server
ui:
enabled: true
āļāļīāļāļāļąāđāļāļāđāļ§āļĒāļāļģāļŠāļąāđāļāļāļąāļāļāļĩāđ
helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update
helm upgrade --install vault hashicorp/vault --values vault.values.yaml --create-namespace --namespace vault
āļŦāļĨāļąāļāļāļēāļāļāļīāļāļāļąāđāļāđāļŠāļĢāđāļ āļāļĢāļ§āļāļŠāļāļāļŠāļāļēāļāļ° vault
kubectl exec vault-0 -n vault -- vault status
āļāļ°āļāļķāđāļāļāļĨāļĨāļąāļāļāđāļ§āđāļēāļāļđāļ seal āđāļ§āđāļāļĒāļđāđ
Key Value
--- -----
Seal Type shamir
Initialized false
Sealed true
Total Shares 0
Threshold 0
Unseal Progress 0/0
Unseal Nonce n/a
Version 1.17.2
Build Date 2024-07-05T15:19:12Z
Storage Type consul
HA Enabled true
āđāļāđ command āļāļąāļāļāļĩāđāđāļāļ·āđāļ generate root key āđāļāđāđāļāļāļēāļĢ bootstrap cluster āļāļĢāļąāđāļāđāļĢāļāđāļāđāļēāļāļąāđāļ
kubectl exec vault-0 -n vault -- vault operator init -key-shares=1 -key-threshold=1 -format=json > cluster-keys.json
āļāļēāļāļāļąāļ§āļāļĒāđāļēāļāļāļēāļāļāļģāļŦāļāļ key 1 āļāļąāļ§āđāļāđāļēāļāļąāđāļ āđāļāļ·āđāļāļāļ§āļēāļĄāļāđāļēāļĒ
āđāļ enterprise āļāļēāļāļāļ°āđāļĄāđāļāļ§āļĢāđāļŠāđ -key-shares=1 -key-threshold=1
āļāļģāļāļēāļĢ unseal vault server
VAULT_UNSEAL_KEY=$(cat cluster-keys.json | jq -r ".unseal_keys_b64[]")
kubectl exec vault-0 -n vault -- vault operator unseal $VAULT_UNSEAL_KEY
āļāļ°āđāļāđāļāļĨāļĨāļąāļāļāđāļāļąāļāļāļĩāđ
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.17.2
Build Date 2024-07-05T15:19:12Z
Storage Type consul
Cluster Name vault-cluster-7e64d0dc
Cluster ID 05f0b39c-2def-5ce6-5597-71863db4864e
HA Enabled true
HA Cluster https://vault-0.vault-internal:8201
HA Mode active
Active Since 2024-10-11T10:15:00.540042962Z
āļāļģ port-forward āđāļāļ·āđāļāļāļāļŠāļāļāđāļāđāļāļēāļ Vault
kubectl port-forward svc/vault-ui -n vault 8200:8200
āđāļāđāļē web browser āļāđāļēāļ http://localhost:8200
āļāļāļŠāļāļ login āļāđāļēāļ UI āļāđāļ§āļĒ token āļāļāļ root
Last updated
Was this helpful?