First, we need a number of Kubernetes clusters to be setup already. In this case we'll create a few in Digital Ocean using the doctl
tool but you could use any K8S solution available:
brew install doctldoctl kubernetes cluster create nats-k8s-sfo2 --count 3 --region sfo2doctl kubernetes cluster create nats-k8s-ams3 --count 3 --region ams3
Next, get your NGS credentials with leafnodes enabled. For this follow these instructions and choose the Developer
plan which is free and will allow you to create leafnode connections for a couple of clusters. Once you got the credentials, upload them as a secret to your K8S clusters:
for ctx in do-ams3-nats-k8s-ams3 do-sfo2-nats-k8s-sfo2; dokubectl --context $ctx create secret generic ngs-creds --from-file $HOME/.nkeys/creds/synadia/NGS/NGS.credsdone
Install Helm3 and add the NATS helm chart repo:
brew install helmhelm repo add nats https://nats-io.github.io/k8s/helm/charts/helm repo update
Create the config that adds the leafnode connection to NGS:
# nats.yamlleafnodes:enabled: trueremotes:- url: tls://connect.ngs.global:7422credentials:secret:name: ngs-credskey: NGS.credsnatsbox:enabled: true
Deploy it to your K8S regions:
for ctx in do-ams3-nats-k8s-ams3 do-sfo2-nats-k8s-sfo2; dohelm --kube-context $ctx install nats nats/nats -f nats.yamldone
To test the multi-region connectivity by using the nats-box
container that got deployed in each cluster:
kubectl --context do-ams3-nats-k8s-ams3 exec -it nats-box -- nats-sub -s nats helloListening on [hello]​while true; dokubectl --context do-sfo2-nats-k8s-sfo2 exec -it nats-box -- nats-pub -s nats hello 'Hello World!'done
Results from the subscribe session:
[#1] Received on [hello]: 'Hello World!'[#2] Received on [hello]: 'Hello World!'[#3] Received on [hello]: 'Hello World!'[#4] Received on [hello]: 'Hello World!'[#5] Received on [hello]: 'Hello World!'[#6] Received on [hello]: 'Hello World!'[#7] Received on [hello]: 'Hello World!'[#8] Received on [hello]: 'Hello World!'[#9] Received on [hello]: 'Hello World!'