The tutorial referenced in the initial post is describing the setup of:
- One single-node Vault cluster
- Another three-node Vault cluster using the previous cluster as a transit auto-unseal device
It sounds like you’ve both overlooked that part - the 4 nodes mentioned are not all part of one Vault cluster. The tutorial is poorly written, though - numbering all 4 nodes sequentially is unnecessarily confusing.
It’s up to you whether you adopt such a setup. I wouldn’t. It’s only meant as a “toy” setup for illustrating transit auto-unseal. It’s another way the tutorial is poorly written, focussing on demonstration, unsuitable for production configurations - though it does contain a warning box saying:
Demonstration only
The cluster created by these terraform files is solely for demonstration and should not be run in production.
Anyway … on to the next question:
You can’t just ask “is it safe”, because the answer is just going to be “maybe, it depends on other factors”.
You need to ask yourself whether you are concerned about traffic interception between nginx and Vault in your particular environment and configuration. Maybe you deem that to be over a sufficiently isolated network that it is unnecessary to encrypt - or maybe not.
Only with knowledge of your deployment environment and security goals, can you determine whether it is acceptable to terminate encryption at the loadbalancer.
You should not be setting any of these options unless you intend for clients to authenticate to Vault using client certificates. It does not sound like you are doing this.
Those guides are wrong.
cluster_addr
is the address each nodes provides to the other nodes in the Vault cluster, for them to connect to that specific node. You absolutely must not point it to a load balancer - it should be the individual server addresses. Be aware that whatever you set here gets baked into the Raft configuration when you initially join the nodes to the cluster, and will not update properly if you subsequently change it (without removing and re-joining nodes to the Raft cluster), so use of DNS names rather than raw IP addresses is vital if IP addresses might change during cluster operation.
api_addr
is mostly useless in modern Vault. It only really comes into play when a request arrives at a standby node, which for some reason fails to internally forward the request to the active node, or the client is for some mad reason sending a header to disable this behaviour. In such a scenario, the standby Vault node will issue a HTTP redirect to the api_addr
of the node it thinks is active.
There is some further discussion of this topic at High Availability | Vault | HashiCorp Developer