Skip to content

OpenStack Cluster

The OpenStack cluster (clusters/openstack/) is the production cluster running the full OpenStack control plane via Yaook operators on baremetal nodes.

INFO

This cluster is not managed by Cluster API. It runs on baremetal nodes (lucy, makise, quinn) bootstrapped with kubeadm. See OpenStack Cluster Bootstrap for the initial setup.

Purpose

  • Hosts the OpenStack deployment (Keystone, Glance, Nova, Neutron, Cinder, Octavia, Designate, Barbican, Horizon)
  • Runs on baremetal nodes with kube-vip HA (VIP 10.0.0.5)
  • Uses Rook/Ceph for storage, Cilium for networking, kgateway for API gateway

Architecture

ComponentDetails
Kubernetesv1.35.4, kubeadm, kube-vip HA
Nodeslucy (10.0.0.2), makise (10.0.0.3), quinn (10.0.0.4)
CNICilium v1.18.6 (L2 LoadBalancer, socketLB.hostNamespaceOnly: true)
StorageRook/Ceph v19.2.3 (3 monitors, NVMe SSDs, RBD + S3)
Gatewaykgateway v2.2.2 (*.rpcu.vpn)
DNS Domainopenstack.local
Cluster Nameopenstack

For Kubernetes architecture details, see Kubernetes Architecture.

Component Stack

Flux reconciles the following from clusters/openstack/:

flux-operator → fluxcd (Flux 2.x)
├─> cilium (eBPF CNI, L2 LoadBalancer)
├─> cert-manager → cert-manager-issuer (root-rpcu CA, *.rpcu.vpn)
├─> trust-manager (distributes RPCU root CA)
├─> gateway-api → kgateway-crds → kgateway (Gateway *.rpcu.vpn)
├─> crossplane (universal control plane)
├─> external-secrets
├─> rook (Ceph storage: 3 monitors, RBD, S3-compatible object store)
└─> yaook-operator (CRDs first, then individual operators)
    └─> yaook (OpenStack service deployments)
        ├─> Keystone, Glance, Nova, Neutron, Cinder
        ├─> Horizon, Octavia, Designate, Barbican
        └─> Gateway API routes per service (*.rpcu.vpn)

Networking

Cilium

  • LoadBalancer IPs: 10.0.0.240-10.0.0.253
  • L2 Interface: eno1.4000 (Hetzner vSwitch VLAN)
  • socketLB.hostNamespaceOnly: true — prevents interference with nested KVM/QEMU VMs

Gateway API

Services are exposed via kgateway with TLS termination:

ServiceHostnameBackend
Keystonekeystone.rpcu.vpnkeystone-api:5000
Glanceglance.rpcu.vpnglance-api:9292
Novanova.rpcu.vpnnova-api:8774
Neutronneutron.rpcu.vpnneutron-server:9696
Cindercinder.rpcu.vpncinder-api:8776
Horizonhorizon.rpcu.vpnhorizon-dashboard:80
Octaviaoctavia.rpcu.vpnoctavia-api:9875
Designatedesignate.rpcu.vpndesignate-api:9001
Barbicanbarbican.rpcu.vpnbarbican-api:9311
Ceph Dashboardceph.rpcu.vpn(Rook gateway route)

Storage

Rook/Ceph

  • Monitors: 3 (lucy, makise, quinn)
  • Storage: NVMe SSDs
  • Pools: RBD (block), Object Store (S3)
  • Dashboard: Enabled

OpenStack Storage

  • Cinder: Block storage backed by Ceph RBD
  • Glance: Image storage backed by Ceph RBD

OpenStack Services

OperatorPurpose
yaook-infra-operatorInfrastructure management
yaook-keystone-operatorIdentity service
yaook-keystone-resources-operatorIdentity resources
yaook-glance-operatorImage service
yaook-nova-operatorCompute service
yaook-nova-compute-operatorCompute nodes
yaook-neutron-operatorNetworking service
yaook-neutron-ovn-operatorOVN networking backend
yaook-horizon-operatorDashboard
yaook-octavia-operatorLoad balancing
yaook-designate-operatorDNS
yaook-cds-operatorCDS
yaook-barbican-operatorKey manager

Credentials

OpenStack credentials flow via External Secrets Operator:

keystone-admin (yaook namespace, created by Yaook operators)
├─> crossplane-openstack (ESO) → Crossplane credentials
└─> rook-ceph (ESO) → cinder + glance client keys

Open source infrastructure documentation