Welcome to the Omni user guide! This guide shows you everything from getting started to more advanced deployments with Omni.
What is Omni?
Omni is a Kubernetes management platform that simplifies the creation and management of Kubernetes clusters on any environment to provide a simple, secure, and resilient platform. It automates cluster creation, management and upgrades, and integrates Kubernetes and Omni access into enterprise identity providers. While Omni does provide a powerful UI, tight integration with Talos Linux means the platform is 100% API-driven from Linux to Kubernetes to Omni.
Simple
Omni automatically creates a highly available Kubernetes API endpoint, transparently provides secure encryption, and automates Kubernetes and OS upgrades. Omni is perfectly suited for managing edge clusters or single node clusters, and in large data centers.
Omni is also available for license for on-premises installations.
Secure
Omni creates clusters with both Kubernetes and the OS configured for best-practices security. All traffic to Omni is wireguard-encrypted. Optionally, traffic between the cluster nodes can be encrypted, allowing clusters to span insecure networks. Integration with enterprise identity providers ensures that even admin-level kubeconfig is validated against current user access-lists.
Is Omni for me?
Omni is excellent for managing clusters in just about any environment you have. Machines in the cloud, on-premise, edge, home - they all can be managed with Omni. Unique to Omni you can even create hybrid clusters consisting of machines in disparate locations around the world.
Some common use cases are:
On-premise bare metal clusters that can be scaled up with machines in the cloud
Edge clusters that are supported by machines in the data center and/or cloud
Mixed cloud
Single node edge clusters
Ready to get started?
Sign Up to start your free 2 week trial and start exploring today!
Status
For the real-time status of Omni and other Sidero Labs services, see https://status.siderolabs.com/ You can subscribe to updates by clicking the Bell icon in the top right corner.
Security notifications
If you have a security question, concern or issue with Omni, please email security@siderolabs.com
1 - Omni support Matrix
The Sidero Labs managed version of Omni is updated regularly by our Operations team.
For a list of the most recent updates, bug fixes and changes, please see and subscribe to the GitHub Release notes.
If you are running a self-hosted version of Omni licensed under the BSL, please regularly update to the latest release - we suggest at least monthly.
Bug fixes will not be backported to older versions of Omni, so support that involves a bug fix will require an update.
Talos Linux Versions Supported
Each version of Omni will support versions of Talos Linux where the first stable release of the relevant minor version of Talos Linux was within 18 months of the Omni release date.
For example, because Talos Linux 1.3.0 was released on 2022-12-15, the Omni version released on Jun 30th, 2024 will not support any version of 1.3.x, even though patch releases of 1.3 were made within the prior 18 months.
However, all versions of Talos Linux Talos 1.4 and later (which was released on 2023-04-18) are supported.
Current minimum Talos Linux support within Omni
Talos Linux 1.3
Note: SecureBoot with Omni is only supported for Talos Linux versions of 1.7.0 or greater.
If you neglect to update Talos Linux to a version where the initial minor version was released within the prior 18 months, your cluster will be out of support, and you must upgrade in order to receive support.
Clusters that are running unsupported versions of Talos Linux or Kubernetes may have limited ability to manage their clusters within Omni - clusters may not be able to have new nodes provisioned to scale up the cluster, for example.
We encourage all users to take advantage of the ease of Talos Linux and Kubernetes upgrades within Omni to ensure they are always running the latest security and bug fixes.
2 - Tutorials
2.1 - Getting Started with Omni
A short guide on setting up a Talos Linux cluster with Omni.
In this Getting Started guide we will create a high availability Kubernetes cluster running on Talos Linux, in Omni.
This guide will use UTM/QEMU, but the same process will work with bare metal machines, cloud instances, and edge devices.
Prerequisites
Network access
If your machines have outgoing access, you are all set.
At a minimum all machines should have outgoing access to the Wireguard endpoint shown on the Omni Home panel, which lists the IP address and UDP port that machines should be able to reach.
Machines need to be able to reach that address both on the UDP port specified, and on TCP port 443.
Some virtual or physical machines
The simplest way to experience Omni is to be able to fire up virtual machines.
We suggest any virtualization platform that can boot off an ISO (UTM, ProxMox, Fusion, etc) although any cloud platform can also be used with minor adjustments.
Bare metal can also be used, of course, but is often slower to boot and not everyone has spare physical servers around.
talosctl
talosctl is the command line tool for issuing API calls and operating system commands to machines in an Omni cluster.
It is not required - cluster management is done via the Omni UI or omnictl, but talosctl can be useful to investigate the state of the nodes and explore functionality.
Download talosctl:
curl -sL https://talos.dev/install | sh
You can also download talosctl from within Omni, by selecting the “Download talosctl” button on the right hand side of the Home screen, then selecting the version and platform of talosctl desired.
You should rename the downloaded file to talosctl, make it executable, and copy it to a location on your PATH.
Please note that because Omni manages the state of the Talos nodes, and protects the security of the Kubernetes and Talos credentials.
Because of this, some talosctl commands (such as talosctl reset) will return PermissionDenied on Omni managed clusters - such operations must be done through the Omni UI or API calls.
kubectl
The Kubernetes command-line tool, kubectl, allows you to run commands against Kubernetes clusters.
You use kubectl to deploy applications, inspect and manage cluster resources, view logs, etc.
Download kubectl via one of methods outlined in the documentation.
Omni validates all operations (for Omni itself, Kubernetes, and Talos Linux) against the authentication configured for Omni (which may be GitHub, Google, enterprise SAML, etc.)
Thus in order to use kubectl with Omni, you need to install the oidc-login plugin per the documentation.
Note: When using HomeBrew on Macs with M1 chips, there have been reports of issues with the plugin being installed to the wrong path and not being found.
You may find it simpler to copy the file from GitHub and manually put the kubelogin binary on your path under the name kubectl-oidc_login so that the kubectl plugin mechanism can find it.
omnictl
omnictl is also an optional binary.
Almost all cluster operations can be done via the Omni Web UI, but omnictl is used for advanced operations, to integrate Omni into CI workflows, or simply if you prefer a CLI to a UI.
Download omnictl from within Omni: on the Home tab, click the “Download omnictl” button on the right hand side, select the appropriate platform, and the “Download” button.
Make sure to rename the binary, make it executable, and copy to a location on your path.
For example:
Omni is a BYO Machine platform - the only thing you need to do is boot your machines off an Omni image.
The Omni image will have the necessary credentials and endpoints built in to it, that you can use to boot all your machines.
To download the installation media, go to the Home screen in Omni, and select “Download Installation Media” from the right hand side.
Select the appropriate media and platform type - e.g. I will select ISO (arm64) as I am going to boot a virtual machine within UTM on an apple M1.
Images exist for many platforms, but you will have to follow the specific installation instructions for that platform (which often involve copying the image to S3 type storage, creating a machine image from it, etc.)
Boot machines off the downloaded image
Create at least 1 virtual machine with 2GB of memory (4 are suggested) using your Hypervisor.
Have each virtual machine boot off the ISO image you just downloaded, and start the virtual machines.
After a few seconds, the machines should show in the Machines panel of Omni, with the available tag.
They will also have tags showing their architecture, memory, cores and other information.
Create Cluster
Click “Clusters” on the left navigation panel, then “Create Cluster” in the top right.
You can give your cluster a name, select the version of Talos Linux to install, and the version of Kubernetes.
You can also specify any Patches that should be applied in creating your cluster, but in most cases these are not needed to get started.
There are other options on this screen - encryption, backups, machine sets, etc - but we will skip those for this tutorial.
In the section headed “Available Machines”, select at least one machine to be the control plane, by clicking CP.
(Ideally, you will have 3 control plane nodes.)
Select one machine to be a worker, by clicking W0 next to the machine.
Then click Create Cluster.
Your cluster is now being created, and you will be taken to the Cluster Overview page.
From this page you can download the kubeconfig and talosconfig files for your cluster, by clicking the buttons on the right hand side.
Access Kubernetes
You can query your Kubernetes cluster using normal kubernetes operations:
kubectl --kubeconfig ./talos-default-kubeconfig.yaml get nodes
Note: you will have to change the referenced kubeconfig file depending on the name of the cluster you created.
The first time you use the kubectl command to query a cluster, a browser window will open requiring you to authenticate with your identity provider (Google or GitHub most commonly.)
If you get a message error: unknown command "oidc-login" for "kubectl" Unable to connect to the server: then you need to install the oidc-login plugin as noted above.
Access Talos commands
You can explore Talos API commands.
Again, the first time you access the Talos API, a browser window will start to authenticate your request.
The downloaded talosconfig file for the cluster includes the Omni endpoint, so you do not need to specify endpoints, just nodes.
talosctl --talosconfig ./talos-default-talosconfig.yaml --nodes 10.5.0.2 get members
You will need to change the name of the talosconfig file, if you changed the cluster name from the default; and also use the actual IP or name of the nodes you created (which are shown in Omni) in place of the node IP.
Also note that because Omni manages the state of the Talos nodes, and protects the security of the Kubernetes and Talos credentials, some talosctl commands (such as talosctl reset) will return PermissionDenied on Omni managed clusters - such operations must be done through the Omni UI or API calls.
Explore Omni
Now you have a complete cluster, with a high-availability Kubernetes API endpoint running on the Omni infrastructure, where all authentication is tied in to your enterprise identity provider.
It’s a good time to explore all that Omni can offer, including other areas of the UI such as:
etcd backup and restores
simple cluster upgrades of Kubernetes and Operating System
proxying of workload HTTP access
simple scaling up and down of clusters
the concept of Machine Sets, that let you manage your infrastructure by classes
And if you are wanting to declaratively manage your clusters and infrastructure declaratively, as code, check out Cluster Templates.
Destroy the Cluster
When you are all done, you can remove the cluster by clicking “Destroy Cluster”, in the bottom right of the Cluster Overview panel.
This will wipe the machines and return them to the Available state.
Cluster example
We have an example of a managed cluster complete with a monitoring stack and application management.
It can be found in our community contrib repo.
You will need to copy the contents of the omni directory to a git repository that can be accessed by the cluster you create.
You will need to update the ArgoCD ApplicationSet template to reference your new git repo, and regenerate the ArgoCD bootstrap patch.
With these changes made you should commit the new values and push them to the git repo.
Next you should register your machines with Omni (see guides for AWS, GCP, Azure, Hetzner, and bare metal) and create machine classes to match your hardware.
By default, the example cluster template is configured to use 3 instances of machine classes named omni-contrib-controlplane, and all instances that match a machines class called omni-contrib-workers.
You can modify these settings in the cluster-template.yaml, but keep in mind that for Rook/Ceph to work you will need to use at least 3 instances with additional block devices for storage.
Once machines are registered you can create the cluster using the cluster template in the infra directory.
This should create the cluster as described, bootstrap ArgoCD, and begin installing applications from your repo.
Depending on your infrastructure, it should take 5-10 mins for the cluster to come fully online with all applications working and healthy.
Monitoring can be viewed directly from Omni using the workload proxy feature, with links to Grafana and Hubble found on the left-hand side of the Omni UI.
2.2 - Upgrading Omni Clusters
A guide to keeping your clusters up to date with Omni.
Introduction
Omni makes keeping your cluster up-to-date easy - which is good, as it is important to stay current with Talos Linux and Kubernetes releases, to ensure you are not exposed to already fixed security issues and bugs.
Keeping your clusters up-to-date involves updating both the underlying operating system (Talos Linux) and Kubernetes.
Upgrading the Operating System
In order to update the Talos Linux version of all nodes in a cluster, navigate to the overview of the cluster you wish to update.
(For example, click the cluster name in the Clusters panel.)
If newer Talos Linux versions are available, there will be an indication in the far right, where the current cluster Talos version is listed.
Clicking that icon, or the “Update Talos” button in the lower right, will allow you to select the new version of Talos Linux that should be deployed across all nodes of the cluster.
Select the new version, and then “Upgrade” (or “Downgrade”, if you are selecting an older version than currently deployed.)
(Omni will ensure that the Kubernetes version running in the cluster is compatible with the selected version of Talos Linux.)
Note: the recommended upgrade path is to always upgrade to the latest patch release of all intermediate minor releases.
For example, if upgrading from Talos 1.5.0 to Talos 1.6.2, the recommended upgrade path would be:
upgrade from 1.5.0 to latest patch of 1.5 - to v1.5.5
upgrade from v1.5.5 to latest patch of 1.6 - to v1.6.2
Omni will then cycle through all nodes in the cluster, safely updating them to the selected version of Talos Linux.
Omni will update the control plane nodes first.
(Omni ensures the etcd cluster is healthy and will remain healthy after the node being updated leaves the etcd cluster, before allowing a control plane node to be upgraded.)
Omni will drain and cordon each node, update the OS, and then un-cordon the node.
Omni always updates nodes with the Talos Linux flag --preserve=true, keeping ephemeral data.
NOTE: If any of your workloads are sensitive to being shut down ungracefully, be sure to use the lifecycle.preStop Pod spec.
Kubernetes Upgrades
As with the Talos Linux version, Omni will notify you on the right hand side of the cluster overview if there is a new version of Kubernetes available.
You may click either the Upgrade icon next to the Kubernetes version, or the Update Kubernetes button on the lower right of the cluster overview.
Kubernetes upgrades are done non-disruptively to workloads and are run in several phases:
Images for new Kubernetes components are pre-pulled to the nodes to minimize downtime and test for image availability.
New static pod definitions are rendered on the configuration update which is picked up by the kubelet. The command waits for the change to propagate to the API server state.
The command updates the kube-proxy daemonset with the new image version.
On every node in the cluster, the kubelet version is updated.
Note: The upgrade operation never deletes any resources from the cluster: obsolete resources should be deleted manually.
Applying changed Kubernetes Manifests
Unlike the Talos Linux command talosctl upgrade-k8s, Omni does not automatically apply updates to Kubernetes bootstrap manifests on a Kubernetes upgrade.
This is to prevent Omni overwriting changes to the bootstrap manifests that you applied manually.
(Talos Linux has a --dry-run feature on the upgrade command that shows you changes before the upgrade - Omni shows you the changes after the upgrade, but before they are applied.)
Thus after each Kubernetes upgrade, it is recommended to examine the BootStrap Manifests of the cluster (as shown in the left hand navigation) and apply the changes, if they are appropriate.
Locking nodes
Omni allows you to control which nodes are upgraded during Talos or Kubernetes upgrade operations.
You can lock nodes, which prevents them from receiving configuration updates, upgrades and downgrades.
This allows you to ensure that new versions of Talos Linux or Kubernetes, or new config patches, are rolled out in a safe and controlled manner.
If you cannot do a blue/green deployment with different clusters, you can roll out a new Kubernetes or Talos Linux release, or config patch, to just some of the nodes in your cluster.
Once you have validated your applications perform correctly on the new versions, you can unlock all the nodes, and allow them to be updated also.
Note: you cannot lock control plane nodes, as it is not supported to have the Kubernetes version of a worker higher than that of the control plane nodes in a cluster - this may result in API version incompatibility.
To lock a node, simply select the Lock icon to the right of the node on the Cluster Overview screen, or use the omnictl cluster machine lock command.
Upgrade and config patch operations will apply to all other nodes in the cluster, but locked nodes will retain their configuration at the time of locking.
Unlock the nodes to allow pending cluster updates to complete.
2.3 - Installing Airgapped Omni
A tutorial on installing Omni in an airgapped environment.
Prerequisites
DNS server
NTP server
TLS certificates
Installed on machine running Omni
To keep everything organized, I am using the following directory structure to store all the dependencies and I will move them to the airgapped network all at once.
NOTE: The empty directories will be used for the persistent data volumes when we deploy these apps in Docker.
This tutorial will involve configuring all of the applications to be accessed via https with signed .pem certificates generated with certbot. There are many methods of configuring TLS certificates and this guide will not cover how to generate your own TLS certificates, but there are many resources available online to help with this subject if you do not have certificates already.
Omni Certificate
Omni uses etcd to store the data for our installation and we need to give it a private key to use for encryption of the etcd database.
First, Generate a GPG key.
gpg --quick-generate-key "Omni (Used for etcd data encryption) how-to-guide@siderolabs.com" rsa4096 cert never
This will generate a new GPG key pair with the specified properties.
What’s going on here?
quick-generate-key allows us to quickly generate a new GPG key pair.
-"Omni (Used for etcd data encryption) how-to-guide@siderolabs.com" is the user ID associated with the key which generally consists of the real name, a comment, and an email address for the user.
rsa4096 specifies the algorithm type and key size.
cert means this key can be used to certify other keys.
never specifies that this key will never expire.
Add an encryption subkey
We will use the fingerprint of this key to create an encryption subkey.
To find the fingerprint of the key we just created, run:
gpg --list-secret-keys
Next, run the following command to create the encryption subkey, replacing $FPR with your own keys fingerprint.
gpg --quick-add-key $FPR rsa4096 encr never
In this command:
$FPR is the fingerprint of the key we are adding the subkey to.
rsa4096 and encr specify that the new subkey will be an RSA encryption key with a size of 4096 bits.
never means this subkey will never expire.
Export the secret key
Lastly we’ll export this key into an ASCII formatted file so Omni can use it.
--armor is an option which creates the output in ASCII format. Without it, the output would be binary.
Save this file to the certs directory in our package.
Create the app.ini File
Gitea uses a configuration file named app.ini which we can use to pre-configure with the necessary information to run Gitea and bypass the intitial startup page. When we start the container, we will mount this file as a volume using Docker.
Create the app.ini file
vim gitea/app.ini
Replace the DOMAIN, SSH_DOMAIN, and ROOT_URL values with your own hostname:
APP_NAME=Gitea: Git with a cup of teaRUN_MODE=prodRUN_USER=gitI_AM_BEING_UNSAFE_RUNNING_AS_ROOT=false[server]CERT_FILE=cert.pemKEY_FILE=key.pemAPP_DATA_PATH=/data/giteaDOMAIN=${GITEA_HOSTNAME}SSH_DOMAIN=${GITEA_HOSTNAME}HTTP_PORT=3000ROOT_URL=https://${GITEA_HOSTNAME}:3000/HTTP_ADDR=0.0.0.0PROTOCOL=httpsLOCAL_ROOT_URL=https://localhost:3000/[database]PATH=/data/gitea/gitea.dbDB_TYPE=sqlite3HOST=localhost:3306NAME=giteaUSER=rootPASSWD=[security]INSTALL_LOCK=true # This is the value which tells Gitea not to run the intitial configuration wizard on start up
NOTE: If running this in a production environment, you will also want to configure the database settings for a production database. This configuration will use an internal sqlite database in the container.
Gathering Images
Next we will gather all the images needed installing Gitea, Keycloak, Omni, and the images Omni will need for creating and installing Talos.
I’ll be using the following images for the tutorial:
Gitea
docker.io/gitea/gitea:1.19.3
Keycloak
quay.io/keycloak/keycloak:21.1.1
Omni
ghcr.io/siderolabs/omni:v0.31.0
ghcr.io/siderolabs/imager:v1.4.5
pull this image to match the version of Talos you would like to use.
Talos
ghcr.io/siderolabs/flannel:v0.21.4
ghcr.io/siderolabs/install-cni:v1.4.0-1-g9b07505
docker.io/coredns/coredns:1.10.1
gcr.io/etcd-development/etcd:v3.5.9
registry.k8s.io/kube-apiserver:v1.27.2
registry.k8s.io/kube-controller-manager:v1.27.2
registry.k8s.io/kube-scheduler:v1.27.2
registry.k8s.io/kube-proxy:v1.27.2
ghcr.io/siderolabs/kubelet:v1.27.2
ghcr.io/siderolabs/installer:v1.4.5
registry.k8s.io/pause:3.6
NOTE: The Talos images needed may be found using the command talosctl images. If you do not have talosctl installed, you may find the instructions on how to install it here.
Package the images
Pull the images to load them locally into Docker.
Run the following command for each of the images listed above except for the Omni image which will be provided to you as an archive file already.
Now that we have all the packages necessary for the airgapped deployment of Omni, we’ll create a compressed archive file and move it to our airgapped network.
The directory structure should look like this now:
airgap
├── certs
│ ├── fullchain.pem
│ ├── omni.asc
│ └── privkey.pem
├── gitea
│ └── app.ini
├── keycloak
├── omni
└── registry
├── omni-image.tar # Provided to you by Sidero Labs └── all_images.tar
Create a compressed archive file to move to our airgap machine.
cd ../
tar czvf omni-airgap.tar.gz airgap/
Now I will use scp to move this file to my machine which does not have internet access. Use whatever method you prefer to move this file.
Lastly, I will log in to my airgapped machine and extract the compressed archive file in the home directory
cd ~/
tar xzvf omni-airgap.tar.gz
Log in Airgapped Machine
From here on out, the rest of the tutorial will take place from the airgapped machine we will be installing Omni, Keycloak, and Gitea on.
Gitea
Gitea will be used as a container registry for storing our images, but also many other functionalities including Git, Large File Storage, and the ability to store packages for many different package types. For more information on what you can use Gitea for, visit their documentation.
Install Gitea
Load the images we moved over. This will load all the images into Docker on the airgapped machine.
You may now log in at the https://${GITEA_HOSTNAME}:3000 to begin configuring Gitea to store all the images needed for Omni and Talos.
Gitea setup
This is just the bare minimum setup to run Omni. Gitea has many additional configuration options and security measures to use in accordance with your industry’s security standards. More information on the configuration of Gitea can be found here.
Create a user
Click the Register button at the top right corner. The first user created will be created as an administrator - permissions can be adjusted afterwards if you like.
Create organizations
After registering an admin user, the organizations can be created which will act as the package repositories for storing images. Create the following organizations:
siderolabs
keycloak
coredns
etcd-development
registry-k8s-io-proxy
NOTE: If you are using self-signed certs and would like to push images to your local Gitea using Docker, you will also need to configure your certs.d directory as described here.
Push Images to Gitea
Now that all of our organizations have been created, we can push the images we loaded into our Gitea for deploying Keycloak, Omni, and storing images used by Talos.
For all of the images loaded, we first need to tag them for our Gitea.
sudo docker tag original-image:tag gitea:3000/new-image:tag
For example, if I am tagging the kube-proxy image it will look like this:
NOTE: Don’t forget to tag all of the images from registry.k8s.io to go to the registry-k8s-io-proxy organization created in Gitea.
docker tag registry.k8s.io/kube-proxy:v1.27.2 ${GITEA_HOSTNAME}:3000/registry-k8s-io-proxy/kube-proxy:v1.27.2
The image used for keycloak is already loaded into Gitea and there are no files to stage before starting it so I’ll run the following command to start it. Replace KEYCLOAK_HOSTNAME and GITEA_HOSTNAME with your own hostnames.
--auth-auth0-enabled=false tells Omni not to use Auth0.
--auth-saml-enabled enables SAML authentication.
--talos-installer-registry, --talos-imager-image and --kubernetes-registry allow you to set the default images used by Omni to point to your local repository.
--auth-saml-url is the URL we saved earlier in the configuration of Keycloak.
--auth-saml-metadata may also be used if you would like to pass it as a file instead of a URL and can be used if using self-signed certificates for Keycloak.
Creating a cluster
Guides on creating a cluster on Omni can be found here:
Because we’re working in an airgapped environment we will need the following values added to our cluster configs so they know where to pull images from.
More information on the Talos MachineConfig.registries can be found here.
NOTE: In this example, cluster discovery is also disabled.
You may also configure cluster discovery on your network.
More information on the Discovery Service can be found here
With Omni, Gitea, and Keycloak set up, you are ready to start managing and installing Talos clusters on your network! The suite of applications installed in this tutorial is an example of how an airgapped environment can be set up to make the most out of the Kubernetes clusters on your network. Other container registries or authentication providers may also be used with a similar setup, but this suite was chosen to give you starting point and an example of what your environment could look like.
2.4 - Using SAML and ACLs
A tutorial on using SAML and ACLs in Omni.
Using SAML and ACLs for fine-grained access control
In this tutorial we will use SAML and ACLs to control fine-grained access to Kubernetes clusters.
Let’s assume that at our organization:
We run a Keycloak instance as the SAML identity provider.
Have our Omni instance already configured to use Keycloak as the SAML identity provider.
Our Omni instance has 2 types of clusters:
Staging clusters with the name prefix staging-: staging-1, staging-2, etc.
Production clusters with the name prefix prod-: prod-1, prod-2, etc.
We want the users with the SAML role omni-cluster-admin to have full access to all clusters.
We want the users with the SAML role omni-cluster-support to have full access to staging clusters and read-only access to production clusters.
Sign in as the initial SAML User
If our Omni instance has no users yet, the initial user who signs in via SAML will be automatically assigned to the Omni Admin role.
We sign in as the user admin@example.org and get the Omni Admin role.
Configuring the AccessPolicy
We need to configure the ACL to assign the omni-cluster-support role to the users with the SAML role omni-cluster-support and
the omni-cluster-admin role to the users with the SAML role omni-cluster-admin.
As the admin user admin@example.org, apply this ACL using omnictl:
$ omnictl apply -f acl.yaml
Accessing the Clusters
Now, in an incognito window, log in as a support engineer, cluster-support-1@example.org.
Since the user is not assigned to any Omni role yet, they cannot use Omni Web.
Download omnictl and omniconfig from the UI, and try to list the clusters by using it:
$ omnictl --omniconfig ./support-omniconfig.yaml get cluster
NAMESPACE TYPE ID VERSION
Error: rpc error: code= PermissionDenied desc= failed to validate: 1 error occurred:
* rpc error: code= PermissionDenied desc= unauthorized: access denied: insufficient role: "None"
You won’t be able to list the clusters because the user is not assigned to any Omni role.
Now try to get the cluster staging-1:
$ omnictl --omniconfig ./support-omniconfig.yaml get cluster staging-1
NAMESPACE TYPE ID VERSION
default Cluster staging-1 5
You can get the cluster staging-1 because the ACL allows the user to access the cluster.
Finally, try to delete the cluster staging-1:
$ omnictl --omniconfig ./support-omniconfig.yaml delete cluster staging-1
torn down Clusters.omni.sidero.dev staging-1
destroyed Clusters.omni.sidero.dev staging-1
The operation will succeed, because the ACL allows Operator-level access to the cluster for the user.
Try to do the same operations with the cluster prod-1:
$ omnictl --omniconfig ./support-omniconfig.yaml get cluster prod-1
NAMESPACE TYPE ID VERSION
default Cluster prod-1 5$ omnictl --omniconfig ./support-omniconfig.yaml delete cluster prod-1
Error: rpc error: code= PermissionDenied desc= failed to validate: 1 error occurred:
* rpc error: code= PermissionDenied desc= unauthorized: access denied: insufficient role: "Reader"
The user will be able to get the cluster but not delete it, because the ACL allows only Reader-level access to the cluster for the user.
If you do the same operations as the admin user, you’ll notice that you are able to both get and delete staging and production clusters.
Assigning Omni roles to Users
If you want to allow SAML users to use Omni Web, you need to assign them at least the Reader role.
As the admin, sign in to Omni Web and assign the role Reader to both cluster-support-1@example.org and cluster-admin-1@example.org.
Now, as the support engineer, you can sign out & sign in again to Omni Web and see the clusters staging-1 and prod-1 in the UI.
2.5 -
tutorials
3 - How-to guides
3.1 - Register machines with Omni
The first step to creating and managing Kubernetes clusters in Omni is to register the machines you wish to use.
The machines can run anywhere Talos Linux runs - which is almost anywhere.
These guides walk you through the specifics for different platforms.
3.1.1 - Register a Bare Metal Machine (ISO)
A guide on how to register bare metal machines with Omni using an ISO.
This guide shows you how to register a bare metal machine with Omni by booting from an ISO.
Dashboard
Upon logging in you will be presented with the Omni dashboard.
Download the ISO
First, download the ISO from the Omni portal by clicking on the “Download Installation Media” button.
Now, click on the “Options” dropdown menu and search for the “ISO” option.
Notice there are two options: one for amd64 and another for arm64.
Select the appropriate option for the machine you are registering.
Now that you have selected the ISO option for the appropriate architecture, click the “Download” button.
Write the ISO to a USB Stick
First, plug the USB drive into your local machine.
Now, find the device path for your USB drive and write the ISO to the USB drive.
diskutil list
...
/dev/disk2 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER 0: *31.9 GB disk2
...
In this example disk2 is the USB drive.
dd if=<path to ISO> of=/dev/disk2 conv=fdatasync
$ lsblk
...
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:0 0 39.1G 0 disk
...
In this example sdb is the USB drive.
dd if=<path to ISO> of=/dev/sdb conv=fdatasync
Boot the Machine
Now that we have our bootable USB drive, plug it into the machine you are registering.
Once the machine is booting you will notice logs from Talos Linux on the console stating that it is reachable over an IP address.
Warning
Machines must be able to egress to your account’s WireGuard port and port 443.
Conclusion
Navigate to the “Machines” menu in the sidebar.
You should now see a machine listed.
You now have a bare metal machine registered with Omni and ready to provision.
3.1.2 - Register a Bare Metal Machine (PXE/iPXE)
A guide on how to register a bare metal machines with Omni using PXE/iPXE.
This guide shows you how to register a bare metal machine with Omni by PXE/iPXE booting.
Copy the Required Kernel Parameters
Upon logging in you will be presented with the Omni dashboard.
Click the “Copy Kernel Parameters” button and save the value for later.
Download vmlinuz and initramfs.xz from the release of your choice (Talos Linux 1.2.6 or greater is required), and place them in /var/lib/matchbox/assets.
Create the Profile
Place the following in /var/lib/matchbox/profiles/default.json:
Once your machine is configured to PXE boot using your tool of choice, power the machine on.
Conclusion
Navigate to the “Machines” menu in the sidebar.
You should now see a machine listed.
You now have a bare metal machine registered with Omni and ready to provision.
3.1.3 - Register a GCP Instance
A guide on how to register a GCP instance with Omni.
This guide shows you how to register a GCP instance with Omni.
Dashboard
Upon logging in you will be presented with the Omni dashboard.
Download the Image
First, download the GCP image from the Omni portal by clicking on the “Download Installation Media” button.
Now, click on the “Options” dropdown menu and search for the “GCP” option.
Notice there are two options: one for amd64 and another for arm64.
Select the appropriate option for the machine you are registering.
Now that you have selected the GCP option for the appropriate architecture, click the “Download” button.
In the Google Cloud console, navigate to Buckets under the Cloud Storage menu, and create a new bucket with the default.
Click on the bucket in the Google Cloud console, click Upload Files, and select the image download from the Omni console.
In the Google Cloud console select Images under the Compute Engine menu, and then Create Image.
Name your image (e.g. Omni-talos-1.2.6), then select the Source as Cloud Storage File.
Click Browse in the Cloud Storage File field and navigate to the bucket you created.
Select the image you uploaded.
Leave the rest of the options at their default and click Create at the bottom.
In Google Cloud console select VM instances under the Compute Engine menu.
Now select Create Instance.
Name your instance, and select a region and zone.
Under “Machine Configuration”, ensure your instance has at least 4GB of memory.
In the Boot Disk section, select Change and then select Custom Images.
Select the image created in the previous steps.
Now, click Create at the bottom to create your instance.
Conclusion
Navigate to the “Machines” menu in the sidebar.
You should now see a machine listed.
You now have a GCP machine registered with Omni and ready to provision.
3.1.4 - Register an AWS EC2 Instance
A guide on how to register an AWS EC2 instance with Omni.
This guide shows you how to register an AWS EC2 instance with Omni.
Set your AWS region
REGION="us-west-2"
Creating the subnet
First, we need to know what VPC to create the subnet on, so let’s describe the VPCs in the region where we want to create the Omni machines.
Now, create a subnet on that VPC with a CIDR block that is within the CIDR block of the VPC.
In the above example, as the VPC has a CIDR block of 172.31.0.0/16, we can use 172.31.128.0/20.
To do so, log in to your Omni account, and, from the Omni overview page, select “Download Installation Media”.
Select “AWS AMI (amd64)” or “AWS AMI (arm64)”, as appropriate for your desired EC2 instances.
(Most are amd64.)
Click “Download”, and the AMI will be downloaded to you local machine.
Extract the downloaded aws-amd64.tar.gz
Then copy the disk.raw file to S3.
We need to create a bucket, copy the image file to it, import it as a snapshot, then register an AMI image from it.
A guide on how to register an Azure instance with Omni.
This guide shows you how to register an Azure instance with Omni.
Dashboard
Upon logging in you will be presented with the Omni dashboard.
Download the Image
Download the Azure image from the Omni portal by clicking on the “Download Installation Media” button.
Click on the “Options” dropdown menu and search for the “Azure” option.
Notice there are two options: one for amd64 and another for arm64.
Select the appropriate architecture for the machine you are registering, then click the “Download” button.
Once downloaded to your local machine, untar with tar -xvf /path/to/image
In the Azure console, navigate to Storage accounts, and create a new storage account.
Once the account is provisioned, navigate to the resource and click Upload. In the Upload Blob form, select Create New container, and name your container (e.g. omni-may-2023).
Now click Browse for Files, and select the disk.vhd file that you uncompressed above, then select Upload.
We’ll make use of the following environment variables throughout the setup.
Edit the variables below with your correct information.
# Storage account to useexportSTORAGE_ACCOUNT="StorageAccountName"# Storage container to upload toexportSTORAGE_CONTAINER="StorageContainerName"# Resource group nameexportGROUP="ResourceGroupName"# LocationexportLOCATION="centralus"# Get storage account connection string based on info aboveexportCONNECTION=$(az storage account show-connection-string \
-n $STORAGE_ACCOUNT\
-g $GROUP\
-o tsv)
You can upload the image you uncompressed to blob storage with:
In the Azure console select Images, and then Create.
Select a Resource Group, Name your image (e.g. omni-may), and set the OS type to Linux.
Now Browse to the storage blob created above, navigating to the container with the uploaded disk.vhd.
Select “Standard HDD” for account type, then click Review and Create, then Create.
Now that the image is present in our blob storage, we’ll register it.
az image create \
--name omni \
--source https://$STORAGE_ACCOUNT.blob.core.windows.net/$STORAGE_CONTAINER/omni-azure.vhd \
--os-type linux \
-g $GROUP
Creating an instance requires setting the os-disk-size property, which is easiest to achieve via the CLI:
az vm create \
--name azure-worker \
--image omni \
-g $GROUP\
--admin-username talos \
--generate-ssh-keys \
--verbose \
--os-disk-size-gb 20
Conclusion
In the Omni UI, navigate to the “Machines” menu in the sidebar.
You should now see the Azure machine that was created listed as an available machine, registered with Omni and ready to provision.
3.1.6 - Register a Hetzner Server
A guide on how to register a Hetzner server with Omni.
This guide shows you how to register a Hetzner server with Omni.
Dashboard
Upon logging in you will be presented with the Omni dashboard.
Download the Hetzner Image
First, download the Hetzner image from the Omni portal by clicking on the “Download Installation Media” button.
Now, click on the “Options” dropdown menu and search for the “Hetzner” option.
Notice there are two options: one for amd64 and another for arm64.
Select the appropriate option for the machine you are registering.
Now, click the “Download” button.
Machines must be able to egress to your account’s WireGuard port and port 443.
Conclusion
Navigate to the “Machines” menu in the sidebar.
You should now see a machine listed.
You now have a Hetzner server registered with Omni and ready to provision.
3.1.7 -
registering-machines
3.2 - Create Etcd Backups
A guide on how to create cluster etcd backups using Omni.
CLI
First of all, check the current overall status of the cluster backup subsystem:
omnictl get etcdbackupoverallstatus
If you have freshly created Omni instance, the output will be similar to this:
NAMESPACE TYPE ID VERSION CONFIGURATION NAME CONFIGURATION ERROR LAST BACKUP STATUS LAST BACKUP ERROR LAST BACKUP TIME CONFIGURATION ATTEMPT
ephemeral EtcdBackupOverallStatus etcdbackup-overall-status 1 s3 not initialized
The combination of the CONFIGURATION NAME and CONFIGURATION ERROR fields display the current backup store configuration status.
Currently, Omni supports two backup stores: local and s3.
These are configured during Omni initialization.
The output above indicates that the backup store is set to use the s3 store.
However, the s3 configuration itself has not yet been added, so the CONFIGURATION ERROR field shows not initialized.
The rest of the fields show as empty because no backups have been created yet.
S3 configuration
To use S3 as the backup storage, you will first need to configure the S3 credentials for Omni to use.
This can be done by creating an EtcdBackupS3Configs.omni.sidero.dev resource in Omni.
Below is an example for Minio S3:
bucket - the name of the S3 bucket for storing backups. This is the only field required in all cases.
region - the region of the S3 bucket. If not provided, Omni will use the default region.
endpoint - the S3 endpoint. If not provided, Omni will use the default AWS S3 endpoint.
accesskeyid and secretaccesskey - the credentials to access the S3 bucket. If not provided,
Omni will assume it runs in an EC2 instance with an IAM role that has access to the specified S3 bucket.
sessiontoken - the session token (if any) for accessing the S3 bucket.
Save it as <file-name>.yaml and apply using omnictl apply -f <file-name>.yaml.
During resource creation, Omni will validate the provided credentials by attempting to list the objects in the bucket.
It will return an error if the validation fails and will not update the resource.
Let’s get our overall status again and check the output:
NAMESPACE TYPE ID VERSION CONFIGURATION NAME CONFIGURATION ERROR LAST BACKUP STATUS LAST BACKUP ERROR LAST BACKUP TIME CONFIGURATION ATTEMPT
ephemeral EtcdBackupOverallStatus etcdbackup-overall-status 2 s3
Note that the CONFIGURATION ERROR field is now empty, indicating that the provided configuration is valid.
Manual backup
Now, let’s create a manual backup. To do that, we need to create a resource:
The <unix-timestamp> should be no more than one minute in the future or in the past. The easiest way to get the
current timestamp is to simply invoke date +%s in your shell. The nanos field should always be 0.
After you save the resource as <file-name>.yaml, apply it using omnictl apply -f <file-name>.yaml.
In a few seconds, you can check the status of the backup:
omnictl get etcdbackupstatus -o yaml
This command print per-cluster backup status. The output will be similar to this:
Omni also supports automatic backups. You can enable this feature by directly editing the cluster resource
Clusters.omni.sidero.dev or by using cluster templates. Let’s explore how we can do this in both ways.
Cluster templates
Enabling automatic backups using cluster templates is quite straightforward.
First, you’ll need a template that resembles the following:
This is the minimal example of a cluster template for a cluster with a single-node control plane and two worker nodes.
Your machine UUIDs will likely be different, and the Kubernetes and Talos versions will probably also differ.
You will need both of these, as well as the cluster name, in your cluster template.
To obtain these, refer to the clustermachinestatus and cluster resources.
In this example, we are going to set the backup interval for the cluster to one hour. Save this template
as <file-name>.yaml. Before applying this change, we want to ensure that no automatic backup is enabled for this
cluster. To do that, let’s run the following command:
Now that we have verified that Omni does not already have an automatic backup enabled, we will apply the change:
omnictl cluster template -f <file-name>.yaml sync
If you didn’t have any backups previously, Omni will not wait for an hour and will immediately create a fresh backup.
You can verify this by running the following command:
omnictl get etcdbackup --selector omni.sidero.dev/cluster=talos-default
Keep in mind that to obtain the backup status, you will need to use the label selector omni.sidero.dev/cluster
along with your cluster name. In this example it is talos-default.
NAMESPACE TYPE ID VERSION CREATED AT
external EtcdBackup talos-default-1702166400 undefined {"nanos":0,"seconds":1702166400}
Cluster resource
Another way to enable automatic backups is by directly editing the cluster resource.
To do this, first, you’ll need to retrieve the cluster resource from the Omni:
To expose a service, only the omni-kube-service-exposer.sidero.dev/port annotation is required.
Its value must be a port that is unused on the nodes, such as by other exposed Services.
The annotation omni-kube-service-exposer.sidero.dev/label can be set to a human-friendly name to be displayed on the Omni Web left menu.
If not set, the default name of <service-name>.<service-namespace> will be used.
The annotation omni-kube-service-exposer.sidero.dev/icon can be set to render an icon for this service on the Omni Web left menu.
If set, valid values are:
Either a base64-encoded SVG
Or a base64-encoded GZIP of an SVG
To encode an SVG file icon.svg to be used for the annotation, you can use the following command:
gzip -c icon.svg | base64
Accessing the Exposed Service
You will notice that the Service you annotated will appear under the “Exposed Services” section in Omni Web,
on the left menu when the cluster is selected.
Clicking it will render the Service in Omni.
Note
This feature only works with HTTP services.
Raw TCP or UDP are not supported.
The services are only accessible to the users who are authenticated to Omni
and have at least Reader level access to the cluster containing the Service.
3.5 - Create an Omni Service Account
A guide on how to create an Omni service account.
This guide shows you how to create an Omni service account.
You will need omnictl installed and configured to follow this guide.
If you haven’t done so already, follow the omnictl guide.
Creating the Service Account
To create an Omni service account, use the following command:
omnictl serviceaccount create <sa-name>
The output of this command will print OMNI_ENDPOINT and OMNI_SERVICE_ACCOUNT_KEY.
Note
Store the OMNI_SERVICE_ACCOUNT_KEY securely as it will not be displayed again.
Export these variables with the printed values:
exportOMNI_ENDPOINT=<output from above command>
exportOMNI_SERVICE_ACCOUNT_KEY=<output from above command>
You can now use omnictl with the generated service account.
3.6 - Create a Service Account Kubeconfig
A guide on how to create a service account kubeconfig in Omni.
This guide shows you how to create a service account kubeconfig in Omni.
You need omnictl installed and configured to follow this guide.
If you haven’t done so already, follow the omnictl guide.
You also need to have a cluster created in Omni to follow this guide.
Creating the Service Account Kubeconfig
To create a service account kubeconfig, run the following command:
omnictl kubeconfig --service-account -c <cluster> --user <user> <path to kubeconfig>
Note
Replace <path to kubeconfig> with a path where the kubeconfig file should be written.
Replace <cluster> with the name of the cluster in Omni.
Replace <user> with any value you would like.
This command will create a service account token with the given username and obtain a kubeconfig file for the given cluster and username.
You can now use kubectl with the generated kubeconfig.
3.7 - Scale a Cluster Up or Down
A guide on how to add or remove nodes to a cluster with Omni.
Scaling Down or removing nodes from a cluster
To delete machines in a cluster, click the “Clusters” menu item on the left, then the name of the cluster you wish to delete nodes from.
Click the “Nodes” menu item on the left.
Now, select “Destroy” from the menu under the elipsis:
The cluster will now scale down.
Scaling Up or adding nodes to a cluster
To add machines to a cluster, click the “Cluster” menu item on the left, then the name of the cluster you wish to add nodes to.
From the “Cluster Overview” tab, click the “Add Machines” button in the sidebar on the right.
From the list of available machines that is shown, identify the machine or machines you wish to add, and then click “ControlPlane” or “Worker”, to add the machine(s) with that role.
You may add multiple machines in one operation.
Click “Add Machines” when all machines have been selected to be added.
The cluster will now scale up.
3.8 - Install and Configure Omnictl
A guide on installing and configuring omnictl for Omni.
This guide shows you how to install and configure omnictl.
Download omnictl and omniconfig from the Omni dashboard.
Note
The downloaded binary will be named according the the selected platform and architecture (e.g. omnictl-linux-amd64).
It is left as an exercise to the user to move the downloaded binary into your PATH and make it executable.
This guide assumes the downloaded binary is named omnictl.
Add the downloaded omniconfig.yaml to the default location to use it with omnictl:
cp omniconfig.yaml ~/.config/omni/config
If you would like to merge the omniconfig.yaml with an existing configuration, use the following command:
omnictl config merge ./omniconfig.yaml
List the contexts to verify that the omniconfig was added:
$ omnictl config contexts
CURRENT NAME URL
...
example https://example.omni.siderolabs.io/
...
Run omnictl for the first time to perform initial authentication using a web browser:
omnictl get clusters
If the browser window does not open automatically, it can be opened manually by copying and pasting the URL into a web browser:
BROWSER=echo omnictl get clusters
3.9 - Use Kubectl With Omni
With an Omni managed cluster, you use kubectl as with any other Kubernetes cluster, with the caveat that you must use the kubeconfig file that you download from Omni, and have the OIDC plug-in installed for your kubectl.
All Kubernetes kubectl commands are routed through the API endpoint created by Omni, and Omni validates access through the configured OIDC provider or other user authorization mechanism.
This ensures your Kubernetes cluster is safe - unlike other systems, mere possession of a kubeconfig grants no access - the user also has be valid in the configured authentication system of Omni.
Download the KubeConfig file
Navigate to the clusters page by clicking on the “Clusters” button in the sidebar.
Click on the cluster and download the kubeconfig from the cluster dashboard.
The downloaded file will reflect the name of the cluster.
kubectl --kubeconfig ./talos-default-kubeconfig.yaml get nodes
Be sure you use the name of the downloaded kubeconfig file, which will vary with the name of the cluster.
The first time you use the kubectl command to query a cluster, a browser window will open requiring you to authenticate with your identity provider.
If you get a message error: unknown command "oidc-login" for "kubectl" Unable to connect to the server then you need to install the oidc-login plugin as noted above, and ensure it is in your $PATH.
OIDC authentication over SSH
If you need to use kubectl, talosctl, or omnictl on a remote host over SSH you may need a way to forward your local client traffic to the remote host where kubectl-oidc_login is installed.
To do that you can tunnel the ports over SSH when you connect to the host.
This command will open a tunnel using the default ports oidc-login attempts to use.
You can run this in a separate terminal temporarily while you authenticate your CLI tools.
If you want to have the port forwarding happen automatically every time you connect to the host you should update your ~/.ssh/config file to contain the following lines for the host.
You will also need to disable automatic browser opening because it will likely try to open a browser on the SSH host or fail to open if one is not installed.
Do that by adding --skip-open-browser in your $KUBECONFIG file.
First, click the “Clusters” section button in the sidebar.
Next, click the “Create Cluster” button.
You may name the cluster, as well specify the version of Talos Linux and Kubernetes that the cluster should be created with.
You may also enable optional cluster features, such as Disk Encryption or Workload Service Proxying.
Note that disk encryption can only be enabled during cluster creation.
Enabling this checkbox will configure the cluster to use Omni as a Key Management Server, and local disk access will not the possible unless the machine is connected to Omni.
Select the role for each machine you would like to create a cluster from.
Now that each machine has a role, choose the install disk from the dropdown menu for each machine.
Finally, click “Create Cluster”
Create a file called cluster.yaml with the following content:
This guide shows you how to create a cluster consisting of any combination of bare metal, cloud virtual machines, on-premise virtual machines, or SBCs, using KubeSpan. KubeSpan is a feature of Talos Linux that provides full node-to-node network encryption with WireGuard, and enables Kubernetes to operate securely even when machines in the cluster are on different networks.
Refer to the general guide on creating a cluster to get started.
To create a hybrid cluster, navigate to the cluster, then apply the following cluster patch by clicking on “Config Patches”, and create a new patch with the target of “Cluster”:
machine:
network:
kubespan:
enabled: true
All machines in this cluster will have this patch applied to them, and use WireGuard encryption for all node-to-node traffic.
3.12 - Create a Patch For Cluster Machines
A guide on how to create a config patch for a machine in a cluster.
Omni allows you to create patches and target the patches to all members of a cluster; all control plane nodes; all worker nodes; or specific machines.
Upon logging in, click the “Clusters” menu item on the left.
Now, select “Config Patches” from the menu under the ellipsis:
(You can also navigate to the specific cluster, and then select Config Patches in the right hand menu.)
Next, click “Create Patch”:
Pick the specific machine or class of machines from the “Patch Target” dropdown:
Type in the desired config patch:
Click “Save” to create the config patch:
For an example of a patch to enable node-to-node network encryption - the KubeSpan feature of Talos Linux - see Creating a Hybrid Cluster.
3.13 - Export a Cluster Template from a Cluster Created in the UI
A guide on how to export a cluster template from a cluster created in the UI.
This guide shows you how to export a cluster template from a cluster created in the UI.
This is useful when you want to switch a cluster from being manually managed
to being managed by cluster templates (i.e. via the CLI, to be used in CI automation).
The cluster will have hello-world-service extension installed on the control plane and all nvidia drivers on the worker.
3.15 - Install talosctl
A guide on how to install talosctl.
This guide shows you how to install talosctl.
Run the following:
curl -sL https://talos.dev/install | sh
You now have talosctl installed.
Please note that because Omni manages the state of the Talos nodes, and protects the security of the Kubernetes and Talos credentials, some talosctl commands (such as talosctl reset) will return PermissionDenied on Omni managed clusters - such operations must be done through the Omni UI or API calls.
3.16 - Manage Access Policies (ACLs)
A guide on how to manage Omni ACLs.
This guide will show how to give the user support@example.com full access to the staging cluster but limited access to the production cluster.
Create an AccessPolicy resource
Create a local file acl.yaml:
metadata:
namespace: default
type: AccessPolicies.omni.sidero.dev
id: access-policy
spec:
rules:
- users:
- support@example.com
clusters:
- staging
role: Operator
kubernetes:
impersonate:
groups:
- system:masters
- users:
- support@example.com
clusters:
- production
role: Reader
kubernetes:
impersonate:
groups:
- my-app-read-only
tests:
- name: support engineer has full access to staging cluster
user:
name: support@example.com
cluster:
name: staging
expected:
role: Operator
kubernetes:
impersonate:
groups:
- system:masters
- name: support engineer has read-only access to my-app namespace in production cluster
user:
name: support@example.com
cluster:
name: production
expected:
role: Reader
kubernetes:
impersonate:
groups:
- my-app-read-only
As an Omni admin, apply this ACL using omnictl:
omnictl apply -f acl.yaml
When users interact with Omni API or UI, they will be assigned to the role specified in the ACL.
When users access the Kubernetes cluster through Omni, they will have the groups specified in the ACL.
Kubernetes RBAC then can be used to grant permissions to these groups.
Note
Only the users who have the Omni role Admin can manage ACLs.
Users who have the Omni role Operator or above are assigned to the Kubernetes role system:masters by default, in addition to the ACLs.
Create Kubernetes RBAC resources
Locally, create rbac.yaml with a Namespace called my-app, and a Role & RoleBinding to give access to the my-app-read-only group:
As the cluster admin, apply the manifests to the Kubernetes cluster production:
kubectl apply -f rbac.yaml
Test the access
Try to access the cluster with a kubeconfig generated by the user support@example.com:
kubectl get pods -n my-app
The user should be able to list pods in the my-app namespace because of the Role and RoleBinding created above.
Try to list pods in another namespace:
kubectl get pod -n default
The user should not be able to list pods in namespace default.
Warning
If the user support@example.com has the Omni role Operator or above assigned, they will have system:masters role in Kubernetes as well as the my-app-read-only role.
Therefore, they will still be able to list pods in all namespaces.
3.17 - Restore Etcd of a Cluster Managed by Cluster Templates to an Earlier Snapshot
A guide on how to restore a cluster’s etcd to an earlier snapshot.
This guide shows you how to restore a cluster’s etcd to an earlier snapshot.
This is useful when you need to revert a cluster to an earlier state.
This tutorial has the following requirements:
The CLI tool omnictl must be installed and configured.
The cluster which you want to restore must still exist (not deleted from Omni) and have backups in the past.
The cluster must be managed using cluster templates (not via the UI).
Finding the Cluster’s UUID
To find the cluster’s UUID, run the following command, replacing my-cluster with the name of your cluster:
omnictl get clusteruuid my-cluster
The output will look like this:
NAMESPACE TYPE ID VERSION UUID
default ClusterUUID my-cluster 1 bb874758-ee54-4d3b-bac3-4c8349737298
Note the UUID column, which contains the cluster’s UUID.
Finding the Snapshot to Restore
List the available snapshots for the cluster:
omnictl get etcdbackup -l omni.sidero.dev/cluster=my-cluster
The output will look like this:
NAMESPACE TYPE ID VERSION CREATED AT SNAPSHOT
external EtcdBackup my-cluster-1701184522 undefined {"nanos":0,"seconds":1701184522} FFFFFFFF9A99FBF6.snapshot
external EtcdBackup my-cluster-1701184515 undefined {"nanos":0,"seconds":1701184515} FFFFFFFF9A99FBFD.snapshot
external EtcdBackup my-cluster-1701184500 undefined {"nanos":0,"seconds":1701184500} FFFFFFFF9A99FC0C.snapshot
The SNAPSHOT column contains the snapshot name which you will need to restore the cluster. Let’s assume you want to restore the cluster to the snapshot FFFFFFFF9A99FBFD.snapshot.
Deleting the Existing Control Plane
To restore the cluster, we need to first delete the existing control plane of the cluster.
This will take the cluster into the non-bootstrapped state.
Only then we can create the new control plane with the restored etcd.
Use the following command to delete the control plane, replacing my-cluster with the name of your cluster:
Edit your cluster template manifest template-manifest.yaml,
edit the list of control plane machines for your needs,
and add the bootstrapSpec section to the control plane, with cluster UUID and the snapshot name we found above:
kind: Cluster
name: my-cluster
kubernetes:
version: v1.28.2
talos:
version: v1.5.5
---
kind: ControlPlane
machines:
- 430d882a-51a8-48b3-ae00-90c5b0b5b0b0
- e865efbc-25a1-4436-bcd9-0a431554e328
- 820c2b44-568c-461e-91aa-c2fc228c0b2e
bootstrapSpec:
clusterUUID: bb874758-ee54-4d3b-bac3-4c8349737298 # The cluster UUID we found abovesnapshot: FFFFFFFF9A99FBFD.snapshot # The snapshot name we found above---
kind: Workers
machines:
- 18308f52-b833-4376-a7c8-1cb9de2feafd
- 79f8db4d-3b6b-49a7-8ac4-aa5d2287f706
After the sync, your cluster will be restored to the snapshot you specified.
Restarting Kubelet on Worker Nodes
To ensure a healthy cluster operation, the kubelet needs to be restarted on all worker nodes.
Note
For this step, you need talosctl to be installed and talosconfig to be configured for this cluster.
You can download talosconfig using the Web UI or by
omnictl talosconfig -c my-cluster
Get the IDs of the worker nodes:
omnictl get clustermachine -l omni.sidero.dev/role-worker,omni.sidero.dev/cluster=my-cluster
The output will look like this:
NAMESPACE TYPE ID VERSION
default ClusterMachine 26b87860-38b4-400f-af72-bc8d26ab6cd6 3
default ClusterMachine 2f6af2ad-bebb-42a5-b6b0-2b9397acafbc 3
default ClusterMachine 5f93376a-95f6-496c-b4b7-630a0607ac7f 3
default ClusterMachine c863ccdf-cdb7-4519-878e-5484a1be119a 3
Gather the IDs in this output, and issue a kubelet restart on them using talosctl:
talosctl -n 26b87860-38b4-400f-af72-bc8d26ab6cd6 service kubelet restart
talosctl -n 2f6af2ad-bebb-42a5-b6b0-2b9397acafbc service kubelet restart
talosctl -n 5f93376a-95f6-496c-b4b7-630a0607ac7f service kubelet restart
talosctl -n c863ccdf-cdb7-4519-878e-5484a1be119a service kubelet restart
3.18 - File an Issue
A guide on how to file an issue for Omni.
This guide shows you file an issue for Omni.
Click on the “Report an issue” button in the header:
Now, click on the “New issue” button:
Choose the issue type, fill in the details, and submit the issue.
3.19 - Run Omni on your own infrastructure
Omni is available as a hosted version operated by Sidero Labs, but can also be self-hosted.
This is appropriate for:
air-gapped deployments
industries with strict security and compliance concerns
home use.
Note that using Omni for production use requires a commercial license.
Contact sales@SideroLabs.com for more information.
Non-production use, such as using Omni for a home lab, does not require a license.
3.19.1 - Deploy Omni On-prem
This guide shows you how to deploy Omni on-prem.
This guide assumes that Omni will be deployed on an Ubuntu machine.
Small differences should be expected when using a different OS.
For SAML integration sections, this guide assumes Azure AD will be the provider for SAML.
Note
Omni is available via a Business Source License which allows free installations in non-production environments.
If you would like to deploy Omni for production use please contact Sidero sales.
If you would like to subscribe to the hosted version of Omni please see the SaaS pricing.
Prereqs
There are several prerequisites for deploying Omni on-prem.
Install Docker
Install Docker according to the Ubuntu installation guide here.
Generate Certs
On-prem Omni will require valid SSL certificates.
This means that self-signed certs will not work as of the time of this writing.
Generating certificates is left as an exercise to the user, but here is a rough example that was tested using DigitalOcean’s DNS integration with certbot to generate certificates.
The process should be very similar for other providers like Route53.
# Install certbot$ sudo snap install --classic certbot
# Allow for root access$ sudo snap set certbot trust-plugin-with-root=ok
# Install DNS provider$ snap install certbot-dns-<provider>
# Create creds file with API tokens$ echo'<creds example' > creds.ini
# Create certs for desired domain$ certbot certonly --dns-<provider> -d <domain name for onprem omni>
Configure Authentication
Auth0
First, you will need an Auth0 account.
On the account level, configure “Authentication - Social” to allow GitHub and Google login.
Create an Auth0 application of the type “single page web application”.
Configure the Auth0 application with the following:
Allowed callback URLs: https://<domain name for onprem omni>
Allowed web origins: https://<domain name for onprem omni>
Allowed logout URLs: https://<domain name for onprem omni>
Disable username/password auth on “Authentication - Database - Applications” tab.
Enable GitHub and Google login on the “Authentication - Social” tab.
Enable email access in the GitHub settings.
Take note of the following information from the Auth0 application:
It is important to generate a unique ID for this Omni deployment.
It will also be necessary to use this same UUID each time you “docker run” your Omni instance.
Generate a UUID with:
exportOMNI_ACCOUNT_UUID=$(uuidgen)
Deploy Omni
Running Omni is a simple docker run, with some slight differences in flags for Auth0 vs. SAML authentication.
Auth0
docker run \
--net=host \
--cap-add=NET_ADMIN \
-v $PWD/etcd:/_out/etcd \
-v <path to TLS certificate>:/tls.crt \
-v <path to TLS key>:/tls.key \
-v $PWD/omni.asc:/omni.asc \
ghcr.io/siderolabs/omni:<tag> \
--account-id=${OMNI_ACCOUNT_UUID}\
--name=onprem-omni \
--cert=/tls.crt \
--key=/tls.key \
--siderolink-api-cert=/tls.crt \
--siderolink-api-key=/tls.key \
--private-key-source=file:///omni.asc \
--event-sink-port=8091\
--bind-addr=0.0.0.0:443 \
--siderolink-api-bind-addr=0.0.0.0:8090 \
--k8s-proxy-bind-addr=0.0.0.0:8100 \
--advertised-api-url=https://<domain name for onprem omni>/ \
--siderolink-api-advertised-url=https://<domain name for onprem omni>:8090/ \
--siderolink-wireguard-advertised-addr=<ip address of the host running Omni>:50180 \
--advertised-kubernetes-proxy-url=https://<domain name for onprem omni>:8100/ \
--auth-auth0-enabled=true\
--auth-auth0-domain=<Auth0 domain> \
--auth-auth0-client-id=<Auth0 client ID> \
--initial-users=<email address>
Note
The siderolink-wireguard-advertised-addrmust point to an IP, not the domain name.
Note
Note that you can omit the --cert, --key, --siderolink-api-cert, and --siderolink-api-key flags to run Omni insecurely.
Configuration options are available in the help menu (--help).
SAML
docker run \
--net=host \
--cap-add=NET_ADMIN \
-v $PWD/etcd:/_out/etcd \
-v <path to full chain TLS certificate>:/tls.crt \
-v <path to TLS key>:/tls.key \
-v $PWD/omni.asc:/omni.asc \
ghcr.io/siderolabs/omni:<tag> \
--account-id=${OMNI_ACCOUNT_UUID}\
--name=onprem-omni \
--cert=/tls.crt \
--key=/tls.key \
--siderolink-api-cert=/tls.crt \
--siderolink-api-key=/tls.key \
--private-key-source=file:///omni.asc \
--event-sink-port=8091\
--bind-addr=0.0.0.0:443 \
--siderolink-api-bind-addr=0.0.0.0:8090 \
--k8s-proxy-bind-addr=0.0.0.0:8100 \
--advertised-api-url=https://<domain name for onprem omni>/ \
--siderolink-api-advertised-url=https://<domain name for onprem omni>:8090/ \
--siderolink-wireguard-advertised-addr=<ip address of the host running Omni>:50180 \
--advertised-kubernetes-proxy-url=https://<domain name for onprem omni>:8100/ \
--auth-saml-enabled=true\
--auth-saml-url=<app federation metadata url copied during Azure AD setup>
Note
In a default setup, the first user that logs in via SAML will be the “admin”.
All subsequent users will receive a read-only role and may need to be granted additional access by the admin user from the “Users” tab in Omni.
Note
The siderolink-wireguard-advertised-addrmust point to an IP, not the domain name.
Note
Note that you can omit the --cert, --key, --siderolink-api-cert, and --siderolink-api-key flags to run Omni insecurely.
Configuration options are available in the help menu (--help).
3.19.2 - Configure Keycloak for Omni
Log in to Keycloak.
Create a realm.
In the upper left corner of the page, select the dropdown where it says master
Fill in the realm name and select create
Find the realm metadata.
In the realm settings, there is a link to the metadata needed for SAML under Endpoints.
Copy the link or save the data to a file. It will be needed for the installation of Omni.
Create a client
Select the Clients tab on the left
Fill in the General Settings as shown in the example below. Replace the hostname in the example with your own Omni hostname or IP.
Client type
Client ID
Name
Fill in the Login settings as shown in the example below. Replace the hostname in the example with your own Omni hostname or IP.
Root URL
Valid redirect URIs
Master SAML PRocessing URL
Modify the Signature and Encryption settings.
Sign documents: off
Sign assertions: on
Set the Client signature required value to off.
Modify Client Scopes
Select Add predefined mapper.
The following mappers need to be added because they will be used by Omni will use these attributes for assigning permissions.
X500 email
X500 givenName
X500 surname
Add a new user (optional)
If Keycloak is being used as an Identity Provider, users can be created here.
Enter the user information and set the Email verified to Yes
Set a password for the user.
3.19.2.1 -
how-to-configure-keycloak-for-omni
3.19.3 - Back Up On-prem Omni Database
This guide shows you how to back up the database of an on-prem Omni instance.
Omni uses etcd as its database.
There are 2 operating modes for etcd: embedded and external.
When Omni is run with --etcd-embedded=true flag, it will configure the embedded etcd server to
listen the addresses specified by the --etcd-endpoints flag (http://localhost:2379 by default).
In the same host where Omni is running (in Docker, --network=host needs to be used), you can use
the etcdctl command to back up the database:
etcdctl --endpoints http://localhost:2379 snapshot save snapshot.db
The command will save the snapshot of the database to the snapshot.db file.
It is recommended to periodically (e.g. with a cron job) take snapshots and store them in a safe location, like an S3
bucket.
Note
When --etcd-embedded is set to false, the database is external and not managed by Omni.
--name=$OMNI_NAME--private-key-source=file:///omni.asc
--advertised-api-url=https://$OMNI_DOMAIN/
--bind-addr=127.0.0.1:8080
--machine-api-bind-addr=127.0.0.1:8090
--siderolink-api-advertised-url=https://api.$OMNI_DOMAIN:443
--k8s-proxy-bind-addr=127.0.0.1:8100
--advertised-kubernetes-proxy-url=https://kube.$OMNI_DOMAIN/
--account-id=$OMNI_UUID--siderolink-use-grpc-tunnel=true## Also add the authentication flags according to your setup
Certificates
You can use acme or certbot to generate certificates for your domain. In the following nginx config, the are stored in /var/lib/acme/omni/ and /var/lib/acme/omni_api/ and /var/lib/acme/omni_kube/. Make sure to change the paths to your own or to output the certificates to those paths.
Nginx configuration
Use the following configuration to expose omni with nginx. Make sure to change the domain name ($OMNI_DOMAIN) to your own domain and to update the certificate paths if applicable.
The omni instance will be available at https://$OMNI_DOMAIN/, the API at https://api.$OMNI_DOMAIN/ and the kubernetes proxy at https://kube.$OMNI_DOMAIN/.
3.19.5 - Configure Entra ID AD for Omni
In the Azure portal, click “Enterprise Applications”.
Click “New Application” and search for “Entra SAML Toolkit”.
Name this application something more meaningful if desired and click “Create”.
Under the “Manage” section of the application, select “Single sign-on”, then “SAML” as the single sign-on method.
In section 1 of this form, enter identifier, reply, and sign on URLs that match the following and save:
Identifier (Entity ID): https://<domain name for omni>/saml/metadata
Reply URL (Assertion Consumer Service URL): https://<domain name for omni>/saml/acs
Sign on URL: https://<domain name for omni>/login
From section 3, copy the “App Federation Metadata Url” for later use.
Again, under the “Manage” section of the application, select “Users and groups”.
Add any users or groups you wish to give access to your Omni environment here.
3.19.6 - Configure Okta for Omni
Log in to Otka
Create a new App Integration
Select “SAML 2.0”
Give the Application a recognisable name (we suggest simply “Omni”)
Set the SAML Settings and Attribute Statements as show below:
Click “Next” and optionally fill out the Feedback, then click “Finish”
Once that is complete, you should now be able to open the “Assignements” tab for the application you just created and manage your users and access as usual.
3.19.6.1 -
how-to-configure-okta-for-omni
3.19.7 -
self-hosted
3.20 - Using SAML with Omni
Omni can integrate with your enterprise SAML provider for authentication and identity management.
See also information about how SAML impacts Omni authentication.
Please contact support@siderolabs.com or your account manager to enable SAML on the SaaS version of Omni.
3.20.1 - Auto-assign roles to SAML users
A guide on how to assign Omni roles to SAML users automatically.
This guide shows you how to configure your Omni instance so that new users logging in
with SAML authentication are automatically assigned to a role based on their SAML role attributes.
Create the file assign-operator-to-engineers-label.yaml for the SAMLLabelRule resource, with the following content:
This will create a resource that assigns the Operator role to any user that logs in with SAML
and has the SAML attribute Role with the value engineers.
Log in to Omni as a new SAML user with the SAML attribute with name Role and value engineers.
This will cause the user created on the Omni side to be labeled as saml.omni.sidero.dev/role/engineers.
This label will match the SAMLLabelRule resource we created above,
and the user will automatically be assigned the Operator role.
Note
When there are multiple matches from different SAMLLabelRule resources,
the matched role with the highest access level will be assigned to the user.
Warning
This role assignment will only work for the new users logging in with SAML.
The SAML users who have already logged in to Omni at least once
will not be matched by the SAMLLabelRule resource and their roles will not be updated.
Warning
If the logged in SAML user is the very first user logging in to an Omni instance,
it will not be matched by the SAMLLabelRule resource
and always be assigned the Admin role.
3.20.2 - Add a User to Omni with SAML Enabled
A guide on how to add a user to Omni with SAML authentication enabled.
This guide shows you how to create a user in an Omni instance with SAML authentication enabled.
Grant the new user access to Omni in your SAML identity provider.
The new user should login to the new user account, in order for Omni to have the account synchronized with the SAML provider.
Log into Omni using another account with Admin permissions.
Find the newly added user in the list of users.
Now, select “Edit User” from the menu under the ellipsis:
Change the role to Reader, Operator or Admin as appropriate:
Next, click “Update User”:
3.20.3 - Configure Unifi Identity Enterprise for Omni
How to configure Unifi Identity Enterprise for Omni using SAML.
Unifi Identity Enterprise
This section describes how to use Unifi Identity Enterprise (here forward UIIE) SSO with Omni via SAML
First, login to the UIIE Manager portal and navigate to the SSO Apps section in the left menu.
Next, Add a new app. Choose “Add Custom App”
Next, click Add on the “SAML 2.0” option for Sign-on Method
You’ll now be in the Add SAML 2.0 App screen where we’ll define the app.
Option
Value
Description
Name
Omni
A descriptive name for the Web App
Icon
<your choice>
Upload an icon of your choosing
Single Sign-On URL
https://<fqdn for omni>/saml/acs
The fully-qualified domain name at which your omni instance will reside
Audience URI (SP Entity ID)
https://<fqdn for omni>/saml/metadata
The fully-qualified domain name for metadata retrieval
Default Relay State
Leave this blank
Name ID Format
Unspecified
Unspecified works, you can probably also choose emailAddress
App Username
Email
Works best with emails as usernames however prefixes might work too
SCIM Connection
Off
Not used
After entering the above values and clicking the “Add” button, you’ll be taken to another screen with some details. We don’t need anything from here, we’ll get info we need later after further configuration, so just click “Done” to proceed.
You’ll now be on the screen to manage the app, here you’ll want to assign users/groups according to who you would like to have the ability to login to Omni.
To start with, you probably only want to assign the person who will be the primary admin, as the first user to login will be granted that role in Omni. Therefore, best practice would be to assign your primary admin, have them login to Omni, then come back into the app here and assign any other users who should have access.
Once you’ve assigned the user(s) accordingly, click the “Settings” bubble at the top of the screen as some final configuration is needed here.
Expand the “Sign On” section at the bottom of the settings page via the “Show More” down arrow.
At the bottom of this section, you’ll see an “Attibute Statements” block, here the mappings from UIIE to Omni fields needs to be entered as below. Use the “Add Another” button to create new ones.
Name
Name Format
Value
Description
email
Unspecified
Email
The user’s email address
firstName
Unspecified
First Name
The user’s first name
lastName
Unspecified
Last Name
The user’s last name
Lastly, you’ll need the IDP Metadata file which can be obtained via the View Setup Instructions link or downloaded as an xml file via the Identity Provider metadata link; both of which are slightly further up the page.
A copy of this file needs to be on the host which will run the Omni container as we’ll feed it in to the container at runtime. You can copy paste contents or download/upload the file whichever is easiest. For the remainder of this guide, we’ll assume this file ends up at the following location on your container host: ~/uiieIDPmetadata.xml
This completes the configurations required in UIIE
Omni
To get Omni to use UIIE as a SAML provider, the following flags should be passed to Docker & the Omni container on launch.
Unfortunately UIIE does not expose group attributes, so you will have to manually assign Omni groups/roles to the users as they are created on first login.
3.20.4 - Configure Workspace ONE Access for Omni
How to configure VMware Workspace ONE Access for Omni using SAML.
Workspace ONE Access
This section describes how to create a Web App inside Workspace ONE Acces (WSOA).
First, login to the WSOA user interface and browse to Resources -> Web Apps -> New
Next, enter values for the following options before clicking on Next.
Option
Value
Description
Name
Omni
A descriptive name for the Web App
Description
Sidero Omni
A description for the Web App
Icon
Image
An icon to be displayed on the dashboard
On the Single Sign-On page, enter the following values:
Option
Value
Description
Authentication Type
SAML 2.0
The Authentication type. Options are SAML or OIDC
Configuration
Manual
We will use manual to specify the fields
Single Sign-On URL
https://{omni-host}/saml/acs
The SSO URL for Omni
Recipient URL
https://{omni-host}/saml/acs
The Recipient URL for Omni
Application ID
https://{omni-host}/saml/metadata
The Omni metadata URL
Username format
Unspecified
The username format is unspecified
Username value
${user.userName}
The username sent in the SAML assertion
Relay State URL
Blank
Leave this empty
Still on the Single Sign-On page, in the Advanced Properties section, set the following toggle buttons;
Option
Value
Description
Sign Response
False
Sign the SAML response.
Sign Assertion
True
Sign the SAML assertion.
Encrypt Assertion
False
Encrypt the SAML assertion.
Include Assertion Signature
False
Include the assertion signature.
Device SSO Response
False
Enable Device SSO response.
Enable Force Authn Request
False
Enable Force Authn Request.
Signature Algorithm
SHA-256 with RSA
The signature algorithm.
Digest Algorithm
SHA-256
The digest algorithm.
Assertion Lifetime
200
The assertion lifetime.
At the bottom of the Single Sign-On page, in the Custom Attribute Mapping section, add the following attributes:
Name
Format
Namespace
Value
Description
email
Unspecified
${user.email}
The user’s email address
firstName
Unspecified
${user.firstName}
The user’s first name
lastName
Unspecified
${user.lastName}
The user’s last name
groups
Unspecified
${groupNames}
The user’s groups
Click Next to continue and select the access policy as required by your organization.
Now it’s time to click the Save & Assign button and permit the Users and Groups allowed to login to Omni.
On the Assign screen, enter the following:
Select the permitted group from your backing Active Directory or LDAP server.
Set the Deployment Type to Automatic.
Finally, obtain the IdP Metadata URL by clicking on Settings and then the Copy URL link.
Note
This is the URL that will be used by Omni in the command line arguments in the next section.
Omni
Provide the following flags to the Omni container on launch.
Flag
Description
--auth-saml-enabled
Enable SAML authentication.
--auth-saml-url
The URL to the IdP metadata file.
--auth-saml-label-rules='{"groups": "groups"}'
This extracts the groups attribute from the SAML assertion into the label saml.omni.sidero.dev/groups/<value>
Now that you have started Omni with the correct flags, refer to the Auto-assign roles to SAML users guide for information on how to automatically assign roles to users based on their SAML attributes.
Note that when using groups, the group name is prefixed with saml.omni.sidero.dev/groups/ instead of role. For example;
Cluster templates are parsed, validated, and converted to Omni resources, which are then created or updated via the Omni API.
Omni guarantees backward compatibility for cluster templates, so the same template can be used with any future version of Omni.
All referenced files in machine configuration patches should be stored relative to the current working directory.
Structure
The Cluster Template is a YAML file consisting of multiple documents, with each document having a kind field that specifies the type of the document.
Some documents might also have a name field that specifies the name (ID) of the document.
Cluster name: only letters, digits and - and _ are allowed. The cluster name is used as a key by all other documents, so if the cluster name changes, a new cluster will be created.
labels
map[string]string
Labels to be applied to the cluster.
annotations
map[string]string
Annotations to be applied to the cluster.
kubernetes.version
string
Kubernetes version to use, vA.B.C.
talos.version
string
Talos version to use, vA.B.C.
features.enableWorkloadProxy
boolean
Whether to enable the workload proxy feature. Defaults to false.
features.useEmbeddedDiscoveryService
boolean
Whether to use the embedded discovery service that runs inside the Omni instance instead of the public one (discovery.talos.dev). Defaults to false. It is only valid if the Omni instance has the feature enabled.
features.diskEncryption
boolean
Whether to enable disk encryption. Defaults to false.
features.backupConfiguration.interval
string
Cluster etcd backup interval. Must be a valid Go duration. Zero 0 disables automatic backups.
The list of system extensions to be installed on every machine in the cluster.
ControlPlane
The ControlPlane document specifies the control plane configuration, defines the number of control plane nodes, and the list of machines to use.
As control plane machines run an etcd cluster, it is recommended to use a number of machines for the control plane that can achieve a stable quorum (e.g., 1, 3, 5, etc.).
Changing the set of machines in the control plane will trigger a rolling scale-up/scale-down of the control plane.
The control plane should have at least a single machine, but it is recommended to use at least 3 machines for the control plane for high-availability.
Strategy type. Can be Rolling or Unset. Defaults to Rolling for updateStrategy and Unset for the deleteStrategy. When Unset, all updates and/or deletes will be applied at once.
rolling.maxParallelism
number
Maximum number of machines to update and/or delete in parallel. Only used when the type is Rolling. Defaults to 1.
Machine
The Machine document specifies the install disk and machine-specific configuration patches.
They are optional, but every Machine document must be referenced by either a ControlPlane or Workers document.
The list of system extensions to be installed on the machine.
Note
When Talos is not installed and the install disk is not specified, Omni will try to pick the install disk automatically.
It will find the smallest disk which is larger than 5GB.
Common Fields
patches
The patches field is a list of machine configuration patches to apply to a cluster, a machine set, or an individual machine.
Config patches modify the configuration before it is applied to each machine in the cluster.
Changing configuration patches modifies the machine configuration which gets automatically applied to the machine.
Path to the patch file. Path is relative to the current working directory when executing omnictl. File should contain Talos machine configuration strategic patch.
name
string
Name of the patch. Required for inline patches when idOverride is not set, optional for file patches (default name will be based on the file path).
idOverride
string
Override the config patch ID, so it won’t be generated from the name or file.
A configuration patch may be either inline or file based.
Inline patches are useful for small changes, file-based patches are useful for more complex changes, or changes shared across multiple clusters.
4.2 - Access Policies (ACLs)
Reference documentation for ACLs.
ACLs are used to control fine-grained access policies of users to resources;
and are validated, stored, and evaluated as an AccessPolicy resource in Omni.
At the moment, only Kubernetes cluster access (group impersonation) is supported.
Structure
AccessPolicy
The AccessPolicy is a single resource containing a set of user groups, a set of cluster groups, a list of matching rules and a list of tests.
List of strings representing Kubernetes impersonation groups.
4.3 -
reference
4.4 - omnictl CLI
omnictl CLI tool reference.
omnictl apply
Create or update resource using YAML file as an input
omnictl apply [flags]
Options
-d, --dry-run Dry run, implies verbose
-f, --file string Resource file to load and apply
-h, --help help for apply
-v, --verbose Verbose output
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Delete all resources related to the cluster. The command waits for the cluster to be fully destroyed.
omnictl cluster delete cluster-name [flags]
Options
--destroy-disconnected-machines removes all disconnected machines which are part of the cluster from Omni
-d, --dry-run dry run
-h, --help help for delete
-v, --verbose verbose output (show diff for each resource)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Sync Kubernetes bootstrap manifests from Talos controlplane nodes to Kubernetes API.
Synopsis
Sync Kubernetes bootstrap manifests from Talos controlplane nodes to Kubernetes API.
Bootstrap manifests might be updated with Talos version update, Kubernetes upgrade, and config patching.
Talos never updates or deletes Kubernetes manifests, so this command fills the gap to keep manifests up-to-date.
--dry-run don't actually sync manifests, just print what would be done (default true)
-h, --help help for manifest-sync
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
-h, --help help for upgrade-pre-checks
--to string target Kubernetes version for the planned upgrade
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Commands to render, validate, manage cluster templates.
Options
-h, --help help for kubernetes
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
When locked, no config updates, upgrades and downgrades will be performed on the machine.
omnictl cluster machine lock machine-id [flags]
Options
-h, --help help for lock
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Show cluster status, wait for the cluster to be ready.
Synopsis
Shows current cluster status, if the terminal supports it, watch the status as it updates. The command waits for the cluster to be ready by default.
omnictl cluster status cluster-name [flags]
Options
-h, --help help for status
-q, --quiet suppress output
-w, --wait duration wait timeout, if zero, report current status and exit (default 5m0s)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Delete all resources related to the cluster template. This command requires API access.
omnictl cluster template delete [flags]
Options
--destroy-disconnected-machines removes all disconnected machines which are part of the cluster from Omni
-d, --dry-run dry run
-f, --file string path to the cluster template file.
-h, --help help for delete
-v, --verbose verbose output (show diff for each resource)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Query existing resources for the cluster and compare them with the resources generated from the template. This command requires API access.
omnictl cluster template diff [flags]
Options
-f, --file string path to the cluster template file.
-h, --help help for diff
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
-c, --cluster string cluster name
-f, --force overwrite output file if it exists
-h, --help help for export
-o, --output string output file (default: stdout)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Validate template contents, convert to resources and output resources to stdout as YAML. This command is offline (doesn’t access API).
omnictl cluster template render [flags]
Options
-f, --file string path to the cluster template file.
-h, --help help for render
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Show template cluster status, wait for the cluster to be ready.
Synopsis
Shows current cluster status, if the terminal supports it, watch the status as it updates. The command waits for the cluster to be ready by default.
omnictl cluster template status [flags]
Options
-f, --file string path to the cluster template file.
-h, --help help for status
-q, --quiet suppress output
-w, --wait duration wait timeout, if zero, report current status and exit (default 5m0s)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Query existing resources for the cluster and compare them with the resources generated from the template, create/update/delete resources as needed. This command requires API access.
omnictl cluster template sync [flags]
Options
-d, --dry-run dry run
-f, --file string path to the cluster template file.
-h, --help help for sync
-v, --verbose verbose output (show diff for each resource)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Validate that template contains valid structures, and there are no other warnings. This command is offline (doesn’t access API).
omnictl cluster template validate [flags]
Options
-f, --file string path to the cluster template file.
-h, --help help for validate
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Commands to render, validate, manage cluster templates.
Options
-h, --help help for template
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Commands to destroy clusters and manage cluster templates.
Options
-h, --help help for cluster
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
You will need to start a new shell for this setup to take effect.
omnictl completion bash
Options
-h, --help help for bash
--no-descriptions disable completion descriptions
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl completion - Generate the autocompletion script for the specified shell
omnictl completion fish
Generate the autocompletion script for fish
Synopsis
Generate the autocompletion script for the fish shell.
To load completions in your current shell session:
omnictl completion fish | source
To load completions for every new session, execute once:
omnictl completion fish > ~/.config/fish/completions/omnictl.fish
You will need to start a new shell for this setup to take effect.
omnictl completion fish [flags]
Options
-h, --help help for fish
--no-descriptions disable completion descriptions
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl completion - Generate the autocompletion script for the specified shell
omnictl completion powershell
Generate the autocompletion script for powershell
Synopsis
Generate the autocompletion script for powershell.
To load completions in your current shell session:
To load completions for every new session, add the output of the above command
to your powershell profile.
omnictl completion powershell [flags]
Options
-h, --help help for powershell
--no-descriptions disable completion descriptions
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl completion - Generate the autocompletion script for the specified shell
omnictl completion zsh
Generate the autocompletion script for zsh
Synopsis
Generate the autocompletion script for the zsh shell.
If shell completion is not already enabled in your environment you will need
to enable it. You can execute the following once:
echo "autoload -U compinit; compinit" >> ~/.zshrc
To load completions in your current shell session:
source <(omnictl completion zsh)
To load completions for every new session, execute once:
You will need to start a new shell for this setup to take effect.
omnictl completion zsh [flags]
Options
-h, --help help for zsh
--no-descriptions disable completion descriptions
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl completion - Generate the autocompletion script for the specified shell
omnictl completion
Generate the autocompletion script for the specified shell
Synopsis
Generate the autocompletion script for omnictl for the specified shell.
See each sub-command’s help for details on how to use the generated script.
Options
-h, --help help for completion
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
-h, --help help for add
--identity string identity to use for authentication
--url string URL of the server (default "grpc://127.0.0.1:8080")
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl config - Manage the client configuration file (omniconfig)
omnictl config context
Set the current context
omnictl config context <context> [flags]
Options
-h, --help help for context
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl config - Manage the client configuration file (omniconfig)
omnictl config contexts
List defined contexts
omnictl config contexts [flags]
Options
-h, --help help for contexts
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl config - Manage the client configuration file (omniconfig)
omnictl config identity
Set the auth identity for the current context
omnictl config identity <identity> [flags]
Options
-h, --help help for identity
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl config - Manage the client configuration file (omniconfig)
omnictl config info
Show information about the current context
omnictl config info [flags]
Options
-h, --help help for info
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl config - Manage the client configuration file (omniconfig)
omnictl config merge
Merge additional contexts from another client configuration file
Synopsis
Contexts with the same name are renamed while merging configs.
omnictl config merge <from> [flags]
Options
-h, --help help for merge
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl config - Manage the client configuration file (omniconfig)
omnictl config new
Generate a new client configuration file
omnictl config new [<path>] [flags]
Options
-h, --help help for new
--identity string identity to use for authentication
--url string URL of the server (default "grpc://127.0.0.1:8080")
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl config - Manage the client configuration file (omniconfig)
omnictl config url
Set the URL for the current context
omnictl config url <url> [flags]
Options
-h, --help help for url
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl config - Manage the client configuration file (omniconfig)
omnictl config
Manage the client configuration file (omniconfig)
Options
-h, --help help for config
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Delete a specific resource by ID or all resources of the type.
Synopsis
Similar to ‘kubectl delete’, ‘omnictl delete’ initiates resource deletion and waits for the operation to complete.
omnictl delete <type> [<id>] [flags]
Options
--all Delete all resources of the type.
-h, --help help for delete
-n, --namespace string The resource namespace. (default "default")
-l, --selector string Selector (label query) to filter on, supports '=' and '==' (e.g. -l key1=value1,key2=value2)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
This command downloads installer media from the server
It accepts one argument, which is the name of the image to download. Name can be one of the following:
* iso - downloads the latest ISO image
* AWS AMI (amd64), Vultr (arm64), Raspberry Pi 4 Model B - full image name
* oracle, aws, vmware - platform name
* rpi_generic, rockpi_4c, rock64 - board name
To get the full list of available images, look at the output of the following command:
omnictl get installationmedia -o yaml
The download command tries to match the passed string in this order:
* name
* profile
By default it will download amd64 image if there are multiple images available for the same name.
For example, to download the latest ISO image for arm64, run:
omnictl download iso --arch amd64
To download the latest Vultr image, run:
omnictl download "vultr"
To download the latest Radxa ROCK PI 4 image, run:
omnictl download "rpi_generic"
omnictl download <image name> [flags]
Options
--arch string Image architecture to download (amd64, arm64) (default "amd64")
--extensions stringArray Generate installation media with extensions pre-installed
--extra-kernel-args stringArray Add extra kernel args to the generated installation media
-h, --help help for download
--initial-labels stringArray Bake initial labels into the generated installation media
--output string Output file or directory, defaults to current working directory (default ".")
--pxe Print PXE URL and exit
--secureboot Download SecureBoot enabled installation media
--talos-version string Talos version to be used in the generated installation media (default "1.7.4")
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Similar to ‘kubectl get’, ‘omnictl get’ returns a set of resources from the OS.
To get a list of all available resource definitions, issue ‘omnictl get rd’
omnictl get <type> [<id>] [flags]
Options
-h, --help help for get
--id-match-regexp string Match resource ID against a regular expression.
-n, --namespace string The resource namespace. (default "default")
-o, --output string Output format (json, table, yaml, jsonpath). (default "table")
-l, --selector string Selector (label query) to filter on, supports '=' and '==' (e.g. -l key1=value1,key2=value2)
-w, --watch Watch the resource state.
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Download the admin kubeconfig of a cluster.
If merge flag is defined, config will be merged with ~/.kube/config or [local-path] if specified.
Otherwise kubeconfig will be written to PWD or [local-path] if specified.
omnictl kubeconfig [local-path] [flags]
Options
--break-glass get kubeconfig that allows accessing nodes bypasing Omni (if enabled for the account)
-c, --cluster string cluster to use
-f, --force force overwrite of kubeconfig if already present, force overwrite on kubeconfig merge
--force-context-name string force context name for kubeconfig merge
--grant-type string Authorization grant type to use. One of (auto|authcode|authcode-keyboard)
--groups strings group to be used in the service account token (groups). only used when --service-account is set to true (default [system:masters])
-h, --help help for kubeconfig
-m, --merge merge with existing kubeconfig (default true)
--service-account create a service account type kubeconfig instead of a OIDC-authenticated user type
--ttl duration ttl for the service account token. only used when --service-account is set to true (default 8760h0m0s)
--user string user to be used in the service account token (sub). required when --service-account is set to true
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
-f, --follow specify if the logs should be streamed
-h, --help help for machine-logs
--log-format string log format (raw, omni, dmesg) to display (default is to display in raw format) (default "raw")
--tail int32 lines of log file to display (default is to show from the beginning) (default -1)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
-h, --help help for create
-r, --role string role of the service account. only used when --use-user-role=false
-t, --ttl duration TTL for the service account key (default 8760h0m0s)
-u, --use-user-role use the role of the creating user. if true, --role is ignored (default true)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Renew a service account by registering a new public key to it
omnictl serviceaccount renew <name> [flags]
Options
-h, --help help for renew
-t, --ttl duration TTL for the service account key (default 8760h0m0s)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
The command collects all non-sensitive information for the cluster from the Omni state.
omnictl support [local-path] [flags]
Options
-c, --cluster string cluster to use
-h, --help help for support
-O, --output string support bundle output (default "support.zip")
-v, --verbose verbose output
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
Download the admin talosconfig of a cluster.
If merge flag is defined, config will be merged with ~/.talos/config or [local-path] if specified.
Otherwise talosconfig will be written to PWD or [local-path] if specified.
omnictl talosconfig [local-path] [flags]
Options
--break-glass get operator talosconfig that allows bypassing Omni (if enabled for the account)
-c, --cluster string cluster to use
-f, --force force overwrite of talosconfig if already present
-h, --help help for talosconfig
-m, --merge merge with existing talosconfig (default true)
Options inherited from parent commands
--context string The context to be used. Defaults to the selected context in the omniconfig file.
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
--context string The context to be used. Defaults to the selected context in the omniconfig file.
-h, --help help for omnictl
--insecure-skip-tls-verify Skip TLS verification for the Omni GRPC and HTTP API endpoints.
--omniconfig string The path to the omni configuration file. Defaults to 'OMNICONFIG' env variable if set, otherwise the config directory according to the XDG specification.
SEE ALSO
omnictl apply - Create or update resource using YAML file as an input
Machine registration is built on top of the extremely fast WireGuard® technology built in to Linux.
A technology dubbed SideroLink builds upon WireGuard in order to provide a fully automated way of setting up and maintaining a WireGuard tunnel between Omni and each registered machine.
Once the secure tunnel is established between a machine it is possible to manage a machine from nearly anywhere in the world.
The SideroLink network is an overlay network used within the data and management planes within Omni.
The sole requirements are that your machine has egress to port 443 and the WireGuard port assigned to your account.
Warning
There are some NAT configurations that are not compatible with WireGuard.
5.2 - Omni KMS Disk Encryption
Starting from 1.5.0, Talos supports KMS (Key Management Server) disk encryption key types.
KMS keys are randomly generated on the Talos node and then sealed using the KMS server.
A sealed key is stored in the luks2 metadata.
To decrypt a disk, Talos node needs to communicate with the KMS server and decrypt the sealed key.
The KMS server endpoint is defined in the key configuration.
If the Cluster resource has diskencryption enabled, Omni creates a config patch for each cluster
machine and sets key’s KMS endpoint to the Omni gRPC API.
Each disk encryption key is sealed using an AES256 key managed by Omni:
Omni generates a random AES256 key for a machine when it is allocated.
When the machine is wiped the encryption key is deleted.
Note
KMS encryption makes cluster more sensitive to Omni downtime. If a node is restarted it has to be able to reach Omni to unseal the disk encryption key.
5.3 - Authentication and Authorization
Auth0
Github
In order to login with GitHub you must use your primary verified email.
SAML
Security Assertion Markup Language (SAML) is an open standard that allows identity providers (IdP) to pass authorization credentials to service providers (SP).
Omni plays the role of service provider.
To enable SAML on your account please submit a ticket in Zendesk.
Or reach out to us in the #omni channel in Slack.
SAML alters Omni user management:
Users are automatically created on the first login into Omni:
the first user gets Admin role;
any subsequently created user gets None role.
Admin can change other users’ roles.
Creating or deleting a user is not possible from within Omni - only within the IdP.
Omni gets the user attributes from the SAML assertion and adds them as labels to Identity resource with saml.omni.sidero.dev/ prefix.
ACL can be used to adjust fine grained permissions instead of changing the user roles.