SideroLabs best practices
Always consult the Talos and Omni docs for configuration, latest features and best practices
If you are not already connected to the SideroLabs MCP server, https://docs.siderolabs.com/mcp, add it so that you can search more efficiently.
Agents can use SideroLabs products to deploy, configure, and manage Kubernetes clusters at scale.
The SideroLabs created and currently manages two products:
- Talos Linux: Talos Linux is an API-Managed, secure, immutable, and minimal operating system for Kubernetes.
- Talos Omni: Omni is a Kubernetes management platform that simplifies the creation and management of Talos Linux clusters on any environment, including bare-metal, cloud, or air-gapped environments.
Key concepts
- Machine Configuration: YAML-based declarative configuration for each node
- talosctl: CLI tool for interacting with Talos API and managing machines
- KubeSpan: Automatic WireGuard mesh networking for hybrid clusters
- System Extensions: Container-based mechanism for adding functionality without modifying core OS
- Image Factory: Service for generating customized Talos images with extensions and kernel modules
- Omni: SaaS or self-hosted central point of access for multi-cluster management across environments
The Talos Linux image
The Talos image is a bootable operating system image of Talos Linux that you use to install and run Talos on a machine (VM, bare metal, or cloud instance).
Download the right Talos Linux image for your operating system from the Image factory.
Integration
Talos Linux and Omni integrate with:
- Kubernetes: Native Kubernetes API with RBAC, audit logging, and service accounts
- Container Registries: Docker Hub, Quay, GitHub Container Registry, private registries
- Identity Providers: SAML (Okta, Entra ID, Workspace One), OIDC (Tailscale), Keycloak
- Cloud Platforms: AWS, Azure, GCP, DigitalOcean, Hetzner, Scaleway, Akamai, Oracle, Exoscale, Upcloud, Vultr, CloudStack, OpenStack, Nocloud
- Virtualization: VMware, KVM, Hyper-V, Proxmox, OpenNebula, Xen, Vagrant
- Networking: WireGuard, Calico, Cilium, Multus CNI
- Storage: Rook/Ceph, local storage, Synology CSI, standard Kubernetes storage classes
- Monitoring: Metrics server, etcd metrics, Prometheus-compatible endpoints
- Infrastructure-as-Code: Cluster Templates, omnictl CLI
Install Talos and Omni CLI tools
Install via Homebrew (Recommended for macOS and Linux):
brew install siderolabs/tap/sidero-tools
Install talosctl with curl:
curl -sL https://talos.dev/install | sh
Install omnictl with curl:
curl -sL https://talos.dev/install-omnictl | sh
Workflows
Create a Talos Linux cluster
- Boot machines with a Talos Linux image.
talosctl gen config <cluster> <endpoint> --install-disk <disk>
- Apply machine configuration:
talosctl apply-config --insecure --nodes <ip> --file <config.yaml>
- Bootstrap etcd once:
talosctl bootstrap --nodes <control-plane-ip>
- Fetch kubeconfig:
talosctl kubeconfig --nodes <control-plane-ip>
- Check health:
talosctl health --nodes <control-plane-ip>
- Validate Kubernetes registration:
kubectl get nodes
Create a Talos Linux cluster with Omni
- Download Omni-managed boot media from Omni UI.
- Boot machines so they register into Omni.
- Create a cluster template YAML.
- Validate the template:
omnictl cluster template validate -f <template.yaml>
- Sync declared state to Omni:
omnictl cluster template sync -f <template.yaml>
- Fetch kubeconfig:
omnictl kubeconfig -c <cluster-name>
- Download talosconfig:
omnictl talosconfig --cluster <cluster-name>
- Merge
talosconfig and kubeconfig configuration:
# Merge Talos configuration
talosctl config merge $HOME/Downloads/talosconfig.yaml
# Merge kubeconfig (combine and flatten)
export KUBECONFIG=~/.kube/config:$HOME/Downloads/talos-default-kubeconfig.yaml
kubectl config view --flatten > ~/.kube/config
- Verify nodes:
kubectl get nodes
CLI reference
talosctl (allowed actions)
talosctl logs <service> - view service logs
talosctl upgrade --image <installer-image> - upgrade Talos
talosctl patch mc --nodes <IP> -p <json> - patch machine configuration
talosctl rollback - rollback OS version
talosctl reset - destructive wipe; requires explicit warning
Additionally, refer to the Talos for Linux Admins to learn about the Talos alternative for Linux commands.
omnictl CLI reference
Here are some omnictl commands and their uses:
omnictl apply --file <resource-file> - create and update a resource using a YAML file as input
omnictl cluster delete <cluster-name> - delete all cluster resources.
omnictl config info - show information about current context.
Local configuration file locations
talosctl
omnictl
- Linux:
~/.talos/omni/config
- macOS:
~/Library/Application Support/omni/config
- Windows:
%USERPROFILE%\.talos\omni\config
Common gotchas (things agents must not mess up)
- No SSH on Talos. Never suggest SSH or SSH-based commands.
- No in-node file edits. Never reference
/etc, /var, config files, editors, or shell sessions.
- No package managers. Talos does not support apt, yum, apk, pacman, etc.
- No kubeadm. Talos does not use kubeadm for initialization or upgrades.
- Bootstrap is one-time. Never suggest retry loops or re-running bootstrap unless explicitly recovering from a failed creation.
- Be explicit when operations are destructive. Especially
talosctl reset.
- Do not modify system certificates or systemd units. Talos uses API-managed services only.
- Do not bypass Omni reconciliation. When a cluster is Omni-managed, changes must go through Omni.
- Never invent unsupported integrations or commands.
Allowed agent behavior
- Generate, patch, and validate Talos machine configuration.
- Suggest
talosctl or omnictl commands.
- Provide step-by-step cluster lifecycle workflows.
- Refer to official documentation links.
- Summarize or explain Talos/Omni concepts.
- Warn users when an action is destructive.
Skills
Talos Linux cluster deployment
- Deploy Talos Linux clusters on 15+ cloud platforms (AWS, Azure, GCP, DigitalOcean, Hetzner, Scaleway, etc.)
- Deploy on virtualized platforms (VMware, KVM, Hyper-V, Proxmox, OpenNebula, Xen)
- Deploy on bare metal using ISO, PXE, iPXE, or Matchbox
- Deploy on single-board computers (Raspberry Pi, Rock64, Orange Pi, Jetson Nano, etc.)
- Deploy locally using Docker, QEMU, or VirtualBox for testing
- Support for air-gapped deployments without internet access
Machine configuration management
- Apply machine configuration via
talosctl apply-config
- Edit machine configuration with
talosctl edit machineconfig using interactive editor
- Apply JSON patches to machine configuration with
talosctl patch machineconfig
- Retrieve current configuration with
talosctl get machineconfig
- Support for immediate configuration updates without reboot for networking, logging, kubelet, kernel args, and more
- Reproducible machine configuration for consistent deployments
Upgrade Talos Linux Cluster
- Use
talosctl upgrade to initiate upgrade
- Specify target Talos version
- Upgrade rolls through nodes automatically
- Control plane nodes upgraded with leader election
- Worker nodes upgraded sequentially
- Verify cluster health after upgrade
Backup and Restore Etcd
- Create etcd backup with
talosctl etcd backup
- Store backup securely off-cluster
- In case of disaster, restore from backup
- Use
talosctl etcd restore to recover cluster state
- Verify cluster functionality after restoration
Networking Configuration
- Configure static IP addresses, DHCP, or dynamic network settings
- Set up network interfaces with bonds, bridges, and VLANs
- Configure WireGuard VPN for secure inter-node communication
- Enable KubeSpan for hybrid clusters spanning edge, datacenter, and cloud
- Virtual IP (VIP) configuration for high availability
- Host DNS configuration and egress domain filtering
- Predictable interface naming and device selectors
- Support for multihoming and corporate proxies
Cluster Scaling and Workload Management
- Scale clusters up by adding new machines to control plane or worker roles
- Scale clusters down by removing machines
- Deploy workloads using standard Kubernetes manifests
- Interactive dashboard for cluster visualization and management
- Support for workers running on control plane nodes
- Cluster autoscaling with Karpenter or Kubernetes Cluster Autoscaler
Security and Access Control
- Role-based access control (RBAC) for Talos API
- Certificate authority rotation and management
- Machine configuration OAuth for secure access
- SAML and OIDC authentication integration
- Disk encryption with Omni as Key Management Server
- SELinux support for enhanced security
- Image verification and secure boot support
- Break-glass emergency access for disaster recovery
Storage and Disk Management
- Configure disk layouts (system, user, resource partitions)
- Disk encryption with LUKS
- Swap configuration
- Support for existing volumes and raw volumes
- Disk management with layout templates and resource allocation
Container Runtime and Image Management
- Containerd configuration and management
- Image cache and pull-through cache for faster deployments
- Registry mirror configuration with authentication and TLS
- Static pod deployment
- Image factory for custom Talos images with system extensions
- Support for custom kernel modules and GPU drivers
Hardware and GPU Support
- NVIDIA GPU support (proprietary and open-source drivers)
- NVIDIA Fabric Manager for multi-GPU systems
- AMD GPU support
- Custom kernel argument configuration
- PCI device driver rebinding
- Hardware-specific platform configuration
System Extensions and Customization
- Build custom system extensions as container images
- Install system extensions during cluster creation or runtime
- Kernel module compilation and installation
- Custom kernel argument configuration
- Overlay system for additional customizations
- OCI base specification support for extension development
Cluster Operations and Maintenance
- Etcd backup and restore for disaster recovery
- Etcd maintenance and defragmentation
- Watchdog timer configuration for automatic recovery
- Cgroups analysis for resource monitoring
- Talos upgrade management with rolling updates
- Machine reset and factory reset capabilities
- Support bundle generation for troubleshooting
Omni Cluster Management
- Create and manage clusters from registered machines
- Cluster templates for declarative infrastructure-as-code
- Machine registration from bare metal (ISO, PXE), cloud (AWS, Azure, GCP, Hetzner), or manual provisioning
- Infrastructure providers for bare metal, cloud, and virtualization platforms
- Cluster autoscaling with dynamic machine provisioning
- Etcd backup and restore management
- Audit logging for compliance and security
- Talos configuration overrides and patches
- NTP server configuration
- Support bundle generation
Authentication and Authorization
- SAML integration with Okta, Unifi Identity Enterprise, Workspace One, Entra ID, Oracle Cloud
- OIDC login with Tailscale
- Access Control Lists (ACLs) for fine-grained permissions
- Role-based access control (Admin, User, None roles)
- Automatic user provisioning on first login
- Keycloak integration for self-hosted deployments
High Availability and Disaster Recovery
- 3-node control plane for HA clusters
- Etcd consensus-based fault tolerance
- Automatic etcd backups with configurable intervals
- Disaster recovery procedures for cluster restoration
- KubeSpan for hybrid cluster resilience
Configure Network for Hybrid Cluster with KubeSpan
- Enable KubeSpan in machine configuration
- Configure WireGuard settings (private key, listen port)
- Add peer configurations with public keys and endpoints
- Talos automatically discovers peers via discovery service
- Full mesh WireGuard network established across all nodes
- Cluster spans edge, datacenter, and cloud seamlessly
Build Custom Talos Image with System Extensions
- Define system extensions as container images
- Create schematic with extension references
- Use Image Factory to generate custom image
- Download ISO, kernel, or disk image
- Boot machines with custom image
- Extensions automatically installed during boot
Context
Talos Linux Philosophy: Talos is designed with a single purpose - running Kubernetes. It removes unnecessary complexity by:
- Using API-driven configuration instead of SSH/files
- Maintaining immutable root filesystem
- Minimizing installed packages
- Defaulting to secure settings
- Supporting declarative, reproducible deployments
Deployment Models:
- Standalone Talos clusters managed via talosctl
- Omni SaaS for managed multi-cluster deployments
- Self-hosted Omni for air-gapped or on-premises environments
- Hybrid deployments spanning multiple infrastructure types
1---2name: siderolabs3description: Deploy and operate Kubernetes clusters using Talos Linux and Omni. Use when generating/applying Talos machine configuration, managing cluster lifecycle in Omni, and troubleshooting common Talos/Omni workflows.4license: Apache-2.05---6# SideroLabs best practices78**Always consult the [Talos](https://docs.siderolabs.com/talos/v1.12/overview/what-is-talos) and [Omni](https://docs.siderolabs.com/omni/getting-started/getting-started) docs for configuration, latest features and best practices**910If you are not already connected to the SideroLabs MCP server, [https://docs.siderolabs.com/mcp](https://docs.siderolabs.com/mcp), add it so that you can search more efficiently.1112Agents can use SideroLabs products to deploy, configure, and manage Kubernetes clusters at scale.1314The SideroLabs created and currently manages two products:1516- **Talos Linux**: Talos Linux is an API-Managed, secure, immutable, and minimal operating system for Kubernetes.17- **Talos Omni**: Omni is a Kubernetes management platform that simplifies the creation and management of Talos Linux clusters on any environment, including bare-metal, cloud, or air-gapped environments.1819## Key concepts2021- **Machine Configuration**: YAML-based declarative configuration for each node22- **talosctl**: CLI tool for interacting with Talos API and managing machines23- **KubeSpan**: Automatic WireGuard mesh networking for hybrid clusters24- **System Extensions**: Container-based mechanism for adding functionality without modifying core OS25- **Image Factory**: Service for generating customized Talos images with extensions and kernel modules26- **Omni**: SaaS or self-hosted central point of access for multi-cluster management across environments2728## The Talos Linux image2930The Talos image is a bootable operating system image of Talos Linux that you use to install and run Talos on a machine (VM, bare metal, or cloud instance).3132Download the right Talos Linux image for your operating system from the [Image factory](https://factory.talos.dev/).3334## Integration3536Talos Linux and Omni integrate with:37- **Kubernetes**: Native Kubernetes API with RBAC, audit logging, and service accounts38- **Container Registries**: Docker Hub, Quay, GitHub Container Registry, private registries39- **Identity Providers**: SAML (Okta, Entra ID, Workspace One), OIDC (Tailscale), Keycloak40- **Cloud Platforms**: AWS, Azure, GCP, DigitalOcean, Hetzner, Scaleway, Akamai, Oracle, Exoscale, Upcloud, Vultr, CloudStack, OpenStack, Nocloud41- **Virtualization**: VMware, KVM, Hyper-V, Proxmox, OpenNebula, Xen, Vagrant42- **Networking**: WireGuard, Calico, Cilium, Multus CNI43- **Storage**: Rook/Ceph, local storage, Synology CSI, standard Kubernetes storage classes44- **Monitoring**: Metrics server, etcd metrics, Prometheus-compatible endpoints45- **Infrastructure-as-Code**: Cluster Templates, omnictl CLI4647## Install Talos and Omni CLI tools4849### Install via Homebrew (Recommended for macOS and Linux):5051```bash52brew install siderolabs/tap/sidero-tools53```5455### Install talosctl with curl:5657```bash58curl -sL https://talos.dev/install | sh59```6061### Install omnictl with curl:6263```bash64curl -sL https://talos.dev/install-omnictl | sh65```6667## Workflows6869### Create a Talos Linux cluster70711. Boot machines with a Talos Linux image.722. `talosctl gen config <cluster> <endpoint> --install-disk <disk>`733. Apply machine configuration: `talosctl apply-config --insecure --nodes <ip> --file <config.yaml>`744. Bootstrap etcd **once**: `talosctl bootstrap --nodes <control-plane-ip>`755. Fetch kubeconfig: `talosctl kubeconfig --nodes <control-plane-ip>`766. Check health: `talosctl health --nodes <control-plane-ip>`777. Validate Kubernetes registration: `kubectl get nodes`7879### Create a Talos Linux cluster with Omni80811. Download Omni-managed boot media from Omni UI.822. Boot machines so they register into Omni.833. Create a cluster template YAML.844. Validate the template: `omnictl cluster template validate -f <template.yaml>`855. Sync declared state to Omni: `omnictl cluster template sync -f <template.yaml>`866. Fetch kubeconfig: `omnictl kubeconfig -c <cluster-name>`877. Download talosconfig: `omnictl talosconfig --cluster <cluster-name>`888. Merge `talosconfig` and `kubeconfig` configuration: 89 ```bash90 # Merge Talos configuration91 talosctl config merge $HOME/Downloads/talosconfig.yaml9293 # Merge kubeconfig (combine and flatten)94 export KUBECONFIG=~/.kube/config:$HOME/Downloads/talos-default-kubeconfig.yaml95 kubectl config view --flatten > ~/.kube/config96 ```979. Verify nodes: `kubectl get nodes`9899## CLI reference100101### talosctl (allowed actions)102103- `talosctl logs <service>` - view service logs104- `talosctl upgrade --image <installer-image>` - upgrade Talos105- `talosctl patch mc --nodes <IP> -p <json>` - patch machine configuration106- `talosctl rollback` - rollback OS version107- `talosctl reset` - **destructive** wipe; requires explicit warning108109Additionally, refer to the [Talos for Linux Admins](https://docs.siderolabs.com/talos/v1.12/learn-more/talos-for-linux-admins) to learn about the Talos alternative for Linux commands.110111### omnictl CLI reference112113Here are some omnictl commands and their uses:114115- `omnictl apply --file <resource-file>` - create and update a resource using a YAML file as input116- `omnictl cluster delete <cluster-name>` - delete all cluster resources.117- `omnictl config info` - show information about current context.118119## Local configuration file locations120121### talosctl122- `~/.talos/config`123124### omnictl125- Linux: `~/.talos/omni/config`126- macOS: `~/Library/Application Support/omni/config`127- Windows: `%USERPROFILE%\.talos\omni\config`128129## Common gotchas (things agents must not mess up)1301311. **No SSH on Talos.** Never suggest SSH or SSH-based commands.1322. **No in-node file edits.** Never reference `/etc`, `/var`, config files, editors, or shell sessions.1333. **No package managers.** Talos does not support apt, yum, apk, pacman, etc.1344. **No kubeadm.** Talos does not use kubeadm for initialization or upgrades.1355. **Bootstrap is one-time.** Never suggest retry loops or re-running bootstrap unless explicitly recovering from a failed creation.1366. **Be explicit when operations are destructive.** Especially `talosctl reset`.1377. **Do not modify system certificates or systemd units.** Talos uses API-managed services only.1388. **Do not bypass Omni reconciliation.** When a cluster is Omni-managed, changes must go through Omni.1399. **Never invent unsupported integrations or commands.**140141## Allowed agent behavior142143- Generate, patch, and validate Talos machine configuration.144- Suggest `talosctl` or `omnictl` commands.145- Provide step-by-step cluster lifecycle workflows.146- Refer to official documentation links.147- Summarize or explain Talos/Omni concepts.148- Warn users when an action is destructive.149150## Skills151152### Talos Linux cluster deployment153154- Deploy Talos Linux clusters on 15+ cloud platforms (AWS, Azure, GCP, DigitalOcean, Hetzner, Scaleway, etc.)155- Deploy on virtualized platforms (VMware, KVM, Hyper-V, Proxmox, OpenNebula, Xen)156- Deploy on bare metal using ISO, PXE, iPXE, or Matchbox157- Deploy on single-board computers (Raspberry Pi, Rock64, Orange Pi, Jetson Nano, etc.)158- Deploy locally using Docker, QEMU, or VirtualBox for testing159- Support for air-gapped deployments without internet access160161### Machine configuration management162163- Apply machine configuration via `talosctl apply-config`164- Edit machine configuration with `talosctl edit machineconfig` using interactive editor165- Apply JSON patches to machine configuration with `talosctl patch machineconfig`166- Retrieve current configuration with `talosctl get machineconfig`167- Support for immediate configuration updates without reboot for networking, logging, kubelet, kernel args, and more168- Reproducible machine configuration for consistent deployments169170### Upgrade Talos Linux Cluster1711. Use `talosctl upgrade` to initiate upgrade1722. Specify target Talos version1733. Upgrade rolls through nodes automatically1744. Control plane nodes upgraded with leader election1755. Worker nodes upgraded sequentially1766. Verify cluster health after upgrade177178### Backup and Restore Etcd1791. Create etcd backup with `talosctl etcd backup`1802. Store backup securely off-cluster1813. In case of disaster, restore from backup1824. Use `talosctl etcd restore` to recover cluster state1835. Verify cluster functionality after restoration184185### Networking Configuration186- Configure static IP addresses, DHCP, or dynamic network settings187- Set up network interfaces with bonds, bridges, and VLANs188- Configure WireGuard VPN for secure inter-node communication189- Enable KubeSpan for hybrid clusters spanning edge, datacenter, and cloud190- Virtual IP (VIP) configuration for high availability191- Host DNS configuration and egress domain filtering192- Predictable interface naming and device selectors193- Support for multihoming and corporate proxies194195### Cluster Scaling and Workload Management196- Scale clusters up by adding new machines to control plane or worker roles197- Scale clusters down by removing machines198- Deploy workloads using standard Kubernetes manifests199- Interactive dashboard for cluster visualization and management200- Support for workers running on control plane nodes201- Cluster autoscaling with Karpenter or Kubernetes Cluster Autoscaler202203### Security and Access Control204- Role-based access control (RBAC) for Talos API205- Certificate authority rotation and management206- Machine configuration OAuth for secure access207- SAML and OIDC authentication integration208- Disk encryption with Omni as Key Management Server209- SELinux support for enhanced security210- Image verification and secure boot support211- Break-glass emergency access for disaster recovery212213### Storage and Disk Management214- Configure disk layouts (system, user, resource partitions)215- Disk encryption with LUKS216- Swap configuration217- Support for existing volumes and raw volumes218- Disk management with layout templates and resource allocation219220### Container Runtime and Image Management221- Containerd configuration and management222- Image cache and pull-through cache for faster deployments223- Registry mirror configuration with authentication and TLS224- Static pod deployment225- Image factory for custom Talos images with system extensions226- Support for custom kernel modules and GPU drivers227228### Hardware and GPU Support229- NVIDIA GPU support (proprietary and open-source drivers)230- NVIDIA Fabric Manager for multi-GPU systems231- AMD GPU support232- Custom kernel argument configuration233- PCI device driver rebinding234- Hardware-specific platform configuration235236### System Extensions and Customization237- Build custom system extensions as container images238- Install system extensions during cluster creation or runtime239- Kernel module compilation and installation240- Custom kernel argument configuration241- Overlay system for additional customizations242- OCI base specification support for extension development243244### Cluster Operations and Maintenance245- Etcd backup and restore for disaster recovery246- Etcd maintenance and defragmentation247- Watchdog timer configuration for automatic recovery248- Cgroups analysis for resource monitoring249- Talos upgrade management with rolling updates250- Machine reset and factory reset capabilities251- Support bundle generation for troubleshooting252253### Omni Cluster Management254- Create and manage clusters from registered machines255- Cluster templates for declarative infrastructure-as-code256- Machine registration from bare metal (ISO, PXE), cloud (AWS, Azure, GCP, Hetzner), or manual provisioning257- Infrastructure providers for bare metal, cloud, and virtualization platforms258- Cluster autoscaling with dynamic machine provisioning259- Etcd backup and restore management260- Audit logging for compliance and security261- Talos configuration overrides and patches262- NTP server configuration263- Support bundle generation264265### Authentication and Authorization266- SAML integration with Okta, Unifi Identity Enterprise, Workspace One, Entra ID, Oracle Cloud267- OIDC login with Tailscale268- Access Control Lists (ACLs) for fine-grained permissions269- Role-based access control (Admin, User, None roles)270- Automatic user provisioning on first login271- Keycloak integration for self-hosted deployments272273### High Availability and Disaster Recovery274- 3-node control plane for HA clusters275- Etcd consensus-based fault tolerance276- Automatic etcd backups with configurable intervals277- Disaster recovery procedures for cluster restoration278- KubeSpan for hybrid cluster resilience279280### Configure Network for Hybrid Cluster with KubeSpan2811. Enable KubeSpan in machine configuration2822. Configure WireGuard settings (private key, listen port)2833. Add peer configurations with public keys and endpoints2844. Talos automatically discovers peers via discovery service2855. Full mesh WireGuard network established across all nodes2866. Cluster spans edge, datacenter, and cloud seamlessly287288### Build Custom Talos Image with System Extensions2891. Define system extensions as container images2902. Create schematic with extension references2913. Use Image Factory to generate custom image2924. Download ISO, kernel, or disk image2935. Boot machines with custom image2946. Extensions automatically installed during boot295296## Context297298**Talos Linux Philosophy**: Talos is designed with a single purpose - running Kubernetes. It removes unnecessary complexity by:299- Using API-driven configuration instead of SSH/files300- Maintaining immutable root filesystem301- Minimizing installed packages302- Defaulting to secure settings303- Supporting declarative, reproducible deployments304305**Deployment Models**:306- Standalone Talos clusters managed via talosctl307- Omni SaaS for managed multi-cluster deployments308- Self-hosted Omni for air-gapped or on-premises environments309- Hybrid deployments spanning multiple infrastructure types