Configuration
The gateway
configuration block is similar to a cluster
block:
One difference is that instead of routes
you specify gateways
. As expected self-gateway connections are ignored, so you can share gateway configurations with minimal fuss.
Starting a server:
Once all the gateways are up, these clusters of one will forward messages as expected:
On a different session...
The subscriber should print
Gateway
Configuration Block
Gateway
Configuration Blockname
Name for this cluster, all gateways belonging to the same cluster, should specify the same name.
reject_unknown_cluster
If true
, gateway will reject connections from cluster that are not configured in gateways
. It does so by checking if the cluster name, provided by the incomming connection, exists as named gateway. This effectively disables gossiping of new cluster. It does not restrict a configured gateway, thus cluster, from dynamically growing.
gateways
List of Gateway entries - see below.
host
Interface where the gateway will listen for incoming gateway connections.
port
Port where the gateway will listen for incoming gateway connections.
listen
Combines host
and port
as <host>:<port>
tls
A tls
configuration map for securing gateway connections. verify
is always enabled. Unless otherwise specified in a gateway
, cert_file
will be the default client certificate. Certificate pitfalls.
advertise
Hostport <host>:<port>
to advertise how this server can be contacted by other gateway members. This is useful in setups with NAT, or in the cloud when exposed by a Network Load Balancer.
connect_retries
After how many failed connect attempts to give up establishing a connection to a discovered gateway. Default is 0
, do not retry. When enabled, attempts will be made once a second. This, does not apply to explicitly configured gateways.
authorization
Authorization map for gateways. When a single username
/password
is used, it defines the authentication mechanism this server expects, and how this server will authenticate itself when establishing a connection to a discovered gateway. This will not be used for gateways explicitly listed in gateways
and therefore have to be provided as part of the URL. With this authentication mode, either use the same credentials throughout the system or list every gateway explicitly on every server. If the tls
configuration map specifies verify_and_map
only provide the expected username
. Here different certificates can be used, but they do have to map to the same username
. The authorization map also allows for timeout
which is honored but users
and token
configuration are not supported and will prevent the server from starting. The permissions
block is ignored.
Gateway
Entry
Gateway
EntryThe gateways
configuration block is a list of gateway entries with the following properties:
name
Gateway name.
url
Hostport <host>:<port>
describing where the remote gateway can be reached. If multiple IPs are returned, one is randomly selected.
urls
A list of url
strings.
tls
A tls
configuration map for creating a secure gateway connection. If the top-level gateway{}
tls block contains certificates that have both client and server purposes, it is possible to omit this one and the server will use the certificates from the gateway{tls{}}
section. See additional advice below in TLS Entry.
By using urls
and an array, you can specify a list of endpoints that form part of a cluster as below. A NATS Server will pick one of those addresses randomly and only establish a single outbound gateway connection to one of the members from another cluster:
TLS Entry
In addition to the normal TLS configuration advice, bear in mind that TLS keys and certificates for multiple clusters, or servers in different locations, rarely rotate at the exact same time and that Certificate Authorities do roll between multiple Intermediate certificates.
If using a certificate bundle which accompanied the issuance of a certificate then the CA in that bundle will typically be for just that certificate. Using only that CA as the CA for gateway authentication is ill-advised. You should ensure that you allow for rolling between Certificate Authorities, even if only between multiple CAs from the same organization entity, and use a separate certificate bundle for verification of peers. This way when DC-B rolls before DC-A, it will not be cut off from your supercluster.
Gateway behind Load Balancer
When running in a private network ( such as VPC in the cloud ), you'd probably want to setup a Load Balancer to expose the gateway port. In this case, it's important to set the advertise
value of each NATS server to the Load Balancer hostname and port serving them. Otherwise, they will advertise their own private IP and port, and can generate failures and downtime if any reconnection is required.
Last updated