This repo provides a multitenant capable GitOps workflow structure that can be forked and used to demonstrate the deployment and configuration of a multi-cluster mesh demo as code using the Argo CD app-of-apps pattern.
- prod:
- gloo mesh 2.1.0-beta28
- istio 1.13.4
- revision: 1-13
- dev:
- gloo mesh 2.1.0-rc1
- istio 1.15.0
- revision: 1-15
- 1 Kubernetes Cluster
- This demo has been tested on 1x
n2-standard-4
(gke),m5.xlarge
(aws), orStandard_DS3_v2
(azure) instance formgmt
cluster
- This demo has been tested on 1x
Run:
./deploy.sh $LICENSE_KEY $cluster_context # deploys on mgmt cluster by default if no input
The script will prompt you for a Gloo Mesh Enterprise license key if not provided as an input parameter
Note:
- By default, the script will deploy into a cluster context named
mgmt
if not passed in - Context parameters can be changed from defaults by passing in variables in the
deploy.sh
A check is done to ensure that the defined contexts exist before proceeding with the installation. Note that the character_
is an invalid value if you are replacing default contexts - Although you may change the contexts where apps are deployed as describe above, the Gloo Mesh and Istio cluster names will remain stable references (i.e.
mgmt
,cluster1
, andcluster2
)
The app-of-apps pattern uses a generic Argo Application to sync all manifests in a particular Git directory, rather than directly point to a Kustomize, YAML, or Helm configuration. Anything pushed into the environment/<overlay>/active
directory is deployed by it's corresponding app-of-app
environment
├── wave-1-clusterconfig
│ ├── base
│ │ └── active
│ │ ├── argocd-ns.yaml
│ │ ├── bookinfo-backends-ns.yaml
│ │ ├── bookinfo-frontends-ns.yaml
│ │ ├── cert-manager-cacerts.yaml
│ │ ├── cert-manager-ns.yaml
│ │ ├── gloo-mesh-addons-ns.yaml
│ │ ├── gloo-mesh-ns.yaml
│ │ ├── gloo-mesh-relay-identity-token-secret.yaml
│ │ ├── gloo-mesh-relay-root-ca.yaml
│ │ ├── httpbin-ns.yaml
│ │ ├── istio-gateways-ns.yaml
│ │ ├── istio-system-ns.yaml
│ │ └── kustomization.yaml
│ ├── dev
│ │ └── active
│ │ └── kustomization.yaml
│ ├── init.sh
│ ├── prod
│ │ └── active
│ │ └── kustomization.yaml
│ ├── qa
│ │ └── active
│ │ └── kustomization.yaml
│ └── test.sh
├── wave-2-certmanager
│ ├── base
│ │ └── active
│ │ ├── cert-manager.yaml
│ │ └── kustomization.yaml
│ ├── dev
│ │ └── active
│ │ └── kustomization.yaml
│ ├── init.sh
│ ├── prod
│ │ └── active
│ │ └── kustomization.yaml
│ ├── qa
│ │ └── active
│ │ └── kustomization.yaml
│ └── test.sh
├── wave-3-istio
│ ├── base
│ │ └── active
│ │ ├── gateway-cert.yaml
│ │ ├── grafana.yaml
│ │ ├── istio-base.yaml
│ │ ├── istio-ingressgateway.yaml
│ │ ├── istiod.yaml
│ │ ├── kiali.yaml
│ │ ├── kustomization.yaml
│ │ └── prometheus.yaml
│ ├── dev
│ │ └── active
│ │ ├── kustomization.yaml
│ │ └── patches
│ │ ├── grafana-1.14.3.yaml
│ │ ├── istio-base-1.14.3.yaml
│ │ ├── istio-ingressgateway-1.14.3.yaml
│ │ └── istiod-1.14.3.yaml
│ ├── init.sh
│ ├── prod
│ │ └── active
│ │ └── kustomization.yaml
│ ├── qa
│ │ └── active
│ │ ├── kustomization.yaml
│ │ └── patches
│ │ ├── grafana-1.14.3.yaml
│ │ ├── istio-base-1.14.3.yaml
│ │ ├── istio-ingressgateway-1.14.3.yaml
│ │ └── istiod-1.14.3.yaml
│ └── test.sh
├── wave-4-gloo-mesh
│ ├── base
│ │ └── active
│ │ ├── cert-manager-clusterissuer.yaml
│ │ ├── cert-manager-issuer.yaml
│ │ ├── gloo-mesh-addons.yaml
│ │ ├── gloo-mesh-agent-cert.yaml
│ │ ├── gloo-mesh-agent.yaml
│ │ ├── gloo-mesh-cert.yaml
│ │ ├── gloo-mesh-crds.yaml
│ │ ├── gloo-mesh-ee-helm-disableca.yaml
│ │ ├── gloo-mesh-relay-tls-signing-cert.yaml
│ │ └── kustomization.yaml
│ ├── dev
│ │ └── active
│ │ ├── kustomization.yaml
│ │ └── patches
│ │ ├── gloo-mesh-addons.yaml
│ │ ├── gloo-mesh-agent.yaml
│ │ ├── gloo-mesh-crds.yaml
│ │ └── gloo-mesh-ee-helm-disableca.yaml
│ ├── init.sh
│ ├── prod
│ │ └── active
│ │ └── kustomization.yaml
│ ├── qa
│ │ └── active
│ │ ├── kustomization.yaml
│ │ └── patches
│ │ ├── gloo-mesh-addons.yaml
│ │ ├── gloo-mesh-agent.yaml
│ │ ├── gloo-mesh-crds.yaml
│ │ └── gloo-mesh-ee-helm-disableca.yaml
│ └── test.sh
└── wave-5-gloo-mesh-config
├── base
│ └── active
│ ├── argocd-mgmt-rt-80.yaml
│ ├── gloo-mesh-admin-workspace.yaml
│ ├── gloo-mesh-admin-workspacesettings.yaml
│ ├── gloo-mesh-gateways-workspace.yaml
│ ├── gloo-mesh-gateways-workspacesettings.yaml
│ ├── gloo-mesh-global-workspacesettings.yaml
│ ├── gloo-mesh-mgmt-kubernetescluster.yaml
│ ├── gloo-mesh-mgmt-virtualgateway-443.yaml
│ ├── gloo-mesh-mgmt-virtualgateway-80.yaml
│ ├── gloo-mesh-ui-rt-443.yaml
│ ├── grafana-rt-443.yaml
│ └── kustomization.yaml
├── dev
│ └── active
│ └── kustomization.yaml
├── init.sh
├── prod
│ └── active
│ └── kustomization.yaml
├── qa
│ └── active
│ └── kustomization.yaml
└── test.sh
Fork this repo and modify the variables in the tools/configure-wave.sh
script to point to your own github username, repo name, and branch
wave_name=${1:-""}
environment_overlay=${2:-prod} # prod, qa, dev, base
cluster_context=${3:-mgmt}
github_username=${4:-ably77}
repo_name=${5:-gloo-mesh-aoa}
target_branch=${6:-HEAD}
Now you can should be able to deploy and sync the corresponding environment
waves in your fork and push new changes to it