This document explains the tenant GitOps and namespace onboarding model in this repo.
Keep the boundary simple:
- Terraform owns Azure infrastructure, the ARO cluster, identities, and GitOps bootstrap.
- GitOps owns namespace setup, shared tenant Argo CD, and approved in-cluster access.
Admin-owned:
- central GitOps bootstrap
- all apps under
gitops/apps/platform/ - all apps under
gitops/apps/workloads/ - cluster-wide policy and platform configuration
- onboarding approval
- tenant repo approval
- tenant namespace approval
Tenant-owned after approval:
- Argo CD
Applicationobjects in the shared tenant Argo CD instance - optional
ApplicationSetobjects when the admin enables them for that tenant - app-of-apps patterns inside the tenant's approved repositories
- Kubernetes namespace access granted through approved
RoleBindingobjects
This repo uses two Argo CD layers:
-
Central admin Argo CD
- bootstrapped by Terraform
- admin-only
- targets this platform repo
-
Shared tenant Argo CD
- created by
namespace-onboardingonly when enabled - shared by many teams
- one
AppProjectper tenant - each tenant is limited to approved namespaces and approved repos
- created by
- Admin reviews the tenant request.
- Admin adds tenant namespaces and optional guardrails in
namespace-onboarding. - Admin enables shared tenant Argo CD if needed.
- Admin adds the tenant definition with approved repos, namespaces, groups, and optional
ApplicationSetaccess. - Admin merges the change.
- Tenant users can then use the shared tenant Argo CD instance.
Guardrails are optional and can be set per namespace:
ResourceQuotaLimitRange- baseline
NetworkPolicy - feature intent labels and annotations
- feature-specific namespace
RoleBindingobjects
They are not forced on unless the admin adds them.
namespace-onboarding can also record namespace-level opt-in for shared platform capabilities.
Current supported feature intent:
serviceMeshopenshiftAIcp4baaap
Important rule:
- feature flags do not create tenant operator subscriptions
- the shared platform or workload module must already be installed by admins
- feature flags are used to record approved namespace participation and access bindings
Tenant repo credentials live in the shared tenant Argo CD namespace.
Rules:
- use
ExternalSecret - do not store plaintext credentials in Git
- use Azure Key Vault as the default pattern
- every repo credential must match an approved repo URL for that tenant
ApplicationSet is disabled by default for tenants.
Allow it only when:
- the tenant needs generator-based app management
- the tenant repo and namespace boundaries are already approved
- the platform team accepts the extra governance risk