Integration with k8gb, a Kubernetes global service load balancer

This page is republished from k8gb's documentation (MIT license).

Combination of k8gb and admiralty.io provides powerful global multi-cluster capabilities.

Admiralty will globally schedule. And k8gb will globally balance.

This tutorial covers local end-to-end integration quick start of two projects.

Deploy Admiralty

Just follow https://admiralty.io/docs/quick_start

Deploy k8gb to Target clusters

helm repo add k8gb https://www.k8gb.io
kubectl --context kind-eu create ns k8gb
helm --kube-context kind-eu --namespace k8gb upgrade --install k8gb k8gb/k8gb --set k8gb.clusterGeoTag=eu --set k8gb.extGslbClustersGeoTags=us
kubectl --context kind-us create ns k8gb
helm --kube-context kind-us --namespace k8gb upgrade --install k8gb k8gb/k8gb --set k8gb.clusterGeoTag=us --set k8gb.extGslbClustersGeoTags=eu

It will install k8gb instances to both Target clusters.

Notice the GeoTag configuration.

Create sample workloads on the source cluster

helm --kube-context kind-cd upgrade --install podinfo podinfo/podinfo --set replicaCount=2 --set ingress.enabled=true

Add pod annotations to enable multi-cluster scheduling

Edit podinfo Deployment to add Admiralty multicluster.admiralty.io/elect scheduling Annotation to Pod spec template

kubectl edit deploy podinfo

The Pod template spec part should look similar to

---
template:
metadata:
annotations:
prometheus.io/port: "9898"
prometheus.io/scrape: "true"
multicluster.admiralty.io/elect: ""
creationTimestamp: null

Observe that pods were scheduled to Target cluster the application of Annotation patch.

kubectl --context kind-us get pod
NAME READY STATUS RESTARTS AGE
podinfo-557c458ddb-9qpjf-l29w6 1/1 Running 0 11s
kubectl --context kind-eu get pod
NAME READY STATUS RESTARTS AGE
podinfo-557c458ddb-9nkmx-p7z9r 1/1 Running 0 15s

Observe that associated Ingress has also followed the Pods to the Target clusters

kubectl --context kind-eu get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
podinfo <none> * 80 10m
kubectl --context kind-eu get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
podinfo <none> * 80 10m

Add k8gb annotations to Ingress object to enable global load balancing

Observer that there are no Gslb resources in the Target clusters

kubectl --context kind-eu get gslb
No resources found in default namespace.
kubectl --context kind-us get gslb
No resources found in default namespace.

Add k8gb strategy annotation to the Ingress object in the Source cluster

kubectl annotate ing podinfo k8gb.io/strategy=roundRobin

Observe that Gslb resources were properly created

kubectl --context kind-eu get gslb
NAME AGE
podinfo 102s
kubectl --context kind-us get gslb
NAME AGE
podinfo 69s

Note: it's not a real working k8gb setup but just a way to demonstrate multi-cluster Gslb CR propagation with Admiralty.

Please refer to https://www.k8gb.io/ documentation to create fully working real-life Gslb setup.