The purpose of this demo is to simulate a simple e-commerce event-driven microsercie architecture.
flowchart LR
APIGW --> Product --> RabbitMQ
APIGW --> Inventory
APIGW --> Review
RabbitMQ --> Inventory
subgraph Services
MongoDB[(Database)] <--> Product
MongoDB <--> Inventory
MongoDB <--> Review
end
subgraph EventBus
Product --> RabbitMQ
RabbitMQ --> Inventory
end
If you don't already have kind installed, follow the link
kind create cluster --config=kind-cluster.yaml
kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
{ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.8.0" | kubectl apply -f -; }
curl -L https://istio.io/downloadIstio | sh -
# export the istio path
istioctl install --set profile=demo -y
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml
-
Setup address pool for LB
docker network inspect -f '{{ (index .IPAM.Config 0).Gateway }}' kind
then configure
metallb-conf.yaml
accordingly and runk apply
kubectl apply -f "https://github.com/rabbitmq/cluster-operator/releases/latest/download/cluster-operator.yml"
k exec -it rabbitmq-server-0 -- bash
rabbitmqctl add_user admin admin
rabbitmqctl set_permissions --vhost / admin '.*' '.*' '.*'
rabbitmqctl set_user_tags admin administrator
Or get the default password from cli
# Get Username
kubectl get secret rabbitmq-default-user -o jsonpath="{.data.username}" | base64 --decode
# Get Password
kubectl get secret rabbitmq-default-user -o jsonpath="{.data.password}" | base64 --decode
k apply -f -r k8s-config/mongod
- Drop to mongo shell
k exec -it mongo-0 -- mongosh
rs.initiate()
var cfg = rs.conf()
cfg.members[0].host="mongo-0.mongo.default.svc.cluster.local:27017"
rs.reconfig(cfg)
rs.add("mongo-1.mongo.default.svc.cluster.local:27017")
rs.add("mongo-2.mongo.default.svc.cluster.local:27017")
- Check the replication status
rs.status()
Update egcom/applications/templates/egcom-cm.yaml
ConfigMap values with the Grafana and RMQ creds.
k create ns egcom
k label namespace default istio-injection=enabled
helm install egcom ./applications -n egcom
~ ❯ k get gtw -n egcom
NAME CLASS ADDRESS PROGRAMMED AGE
apigw-gateway istio 172.18.0.103 True 31h
inventory-gateway istio 172.18.0.104 True 31h
product-gateway istio 172.18.0.102 True 31h
review-gateway istio 172.18.0.101 True 31h
baseURL
is the address of the apigw-gateway