Creating a NATS Super Cluster in Digital Ocean with Helm
Next, open up the firewall across the 3 regions to be able to access the client, leafnode and gateways ports:
doctl compute firewall add-rules $firewall --inbound-rules protocol:tcp,ports:4222,address:0.0.0.0/0
doctl compute firewall add-rules $firewall --inbound-rules protocol:tcp,ports:7422,address:0.0.0.0/0
doctl compute firewall add-rules $firewall --inbound-rules protocol:tcp,ports:7522,address:0.0.0.0/0
done
The Helm definition would look as follows for the 3 clusters:
# super-cluster.yaml
nats:
externalAccess: true
logging:
debug: false
trace: false
cluster:
enabled: true
gateway:
enabled: true
# NOTE: defined via --set gateway.name="$ctx"
# name: $ctx
gateways:
- name: do-ams3-nats-k8s-ams3
urls:
- nats://142.93.251.181:7522
- nats://161.35.12.245:7522
- nats://161.35.2.153:7522
- name: do-nyc1-nats-k8s-nyc1
urls:
- nats://142.93.251.181:7522
- nats://161.35.12.245:7522
- nats://161.35.2.153:7522
- nats://142.93.251.181:7522
- nats://161.35.12.245:7522
- nats://161.35.2.153:7522
natsbox:
enabled: true
That’s it! It should now be possible to send some messages across regions:
# Start subscription in Amsterdam
nats-box:~# kubectl --context do-ams3-nats-k8s-ams3 exec -it nats-box -- /bin/sh -l
nats-box:~# nats-sub -s nats hello
# Send messages from San Francisco region
nats-box:~# kubectl --context do-sfo2-nats-k8s-sfo2 exec -it nats-box -- /bin/sh -l
nats-box:~# nats-pub -s nats hello 'Hello World!'
# From outside of k8s can use the external IPs
$ nats-pub -s 161.35.2.153 hello 'Hello World!'