Skip to main content

OpenStack Deployed Cluster Logical Diagram

Purpose: For platform engineers, shows the logical layout of a fully deployed openCenter Kubernetes cluster on OpenStack — namespaces, service placement, and inter-component communication.

Simplified Overview

Namespace Layout

NamespaceServicesPurpose
flux-systemSource, Kustomize, Helm, Notification controllersGitOps reconciliation engine
olmOperator Lifecycle Manager, OLM CatalogInstalls and manages operators (Kafka, Keycloak, etc.)
cert-managercert-manager, ClusterIssuersAutomated TLS certificate lifecycle
kyvernoKyverno engine, admission webhookPolicy enforcement (17 baseline policies)
keycloakKeycloak, PostgreSQLIdentity and access management via OIDC
rbac-managerRBAC ManagerDeclarative RBAC from Keycloak group claims
metallb-systemMetalLB speakers, controllerBare-metal load balancer (L2/BGP)
kube-systemkube-vip, OpenStack Cloud Controller ManagerControl-plane HA VIP and cloud-provider integration
gateway-systemGateway API controller, HTTPRoutesL7 traffic routing
observabilityPrometheus, Grafana, Alertmanager, Loki, Promtail, Tempo, OTel Collector, KafkaMetrics, logs, traces, event streaming, and alerting
cinder-csiCinder CSI driver, external-snapshotterBlock volume provisioning via OpenStack Cinder
harborHarbor Core, Registry, TrivyPrivate container registry with vulnerability scanning
headlampHeadlamp UI, branding pluginKubernetes web dashboard with OIDC authentication
veleroVelero serverCluster backup and disaster recovery
customer-appsCustomer deploymentsApplication workloads routed via Gateway API

Data Flow Summary

  • Ingress path: External traffic → MetalLB → Gateway API → HTTPRoute → Application Service → Pod
  • Control-plane HA path: kube-vip elects leader on control-plane nodes → advertises virtual IP → all clients/nodes reach Kubernetes API via stable VIP
  • GitOps path: Git push → FluxCD Source Controller → Kustomize/Helm Controller → Kubernetes API → Resources deployed
  • Secrets path: SOPS-encrypted YAML in Git → FluxCD decrypts with Age key → Kubernetes Secret created
  • Observability path: Pods emit metrics/logs/traces → OpenTelemetry Collector → Kafka → Prometheus + Loki + Tempo → Grafana dashboards
  • Policy path: Resource admission → Kyverno webhook → validate against 17 ClusterPolicies → admit or reject
  • Auth path: User login → Keycloak OIDC → JWT with group claims → RBAC Manager → RoleBindings → API Server authorization
  • Headlamp path: Operator browser → MetalLB → Gateway API → Headlamp UI → Keycloak OIDC login → Kubernetes API (scoped by RBAC)
  • OLM path: FluxCD deploys OLM → OLM installs operators from catalog → operators provision Prometheus, Keycloak, and other stateful services
  • Storage path: PVC created → Cinder CSI driver → OpenStack Cinder API → block volume provisioned → attached to Nova instance
  • Cloud controller path: OpenStack CCM → syncs node metadata, manages Neutron LBaaS, handles node lifecycle events

OpenStack-Specific Differences

ConcernGeneric ClusterOpenStack Cluster
Storage backendLonghorn (distributed block storage)Cinder CSI (OpenStack block storage)
Storage namespacelonghorn-systemcinder-csi
Volume provisionerdriver.longhorn.iocinder.csi.openstack.org
Cloud Controller ManagerNoneOpenStack CCM (node lifecycle, LB integration)
Infrastructure provisioningManual / pre-provisionedTerraform/OpenTofu (Nova instances, Neutron networks)
External dependencyNone (self-contained)OpenStack API (Keystone, Nova, Cinder, Neutron)
API call serializationN/AEnabled by default to prevent LB race conditions