Base system architecture
How EasyUC is built on K3s: layers, namespaces, data services, components per module, ingress, storage and first installation.
K3s as the foundation
EasyUC runs entirely on Kubernetes, specifically on K3s. The cluster is initialised with embedded etcd (cluster-init). etcd holds the state of the cluster. Additional nodes later join as servers and become etcd members, see Adding nodes.
K3s also provides an embedded registry, so the container images are served inside the cluster.
Layers
The base system consists of six layers, from top to bottom:
- Clients and connected systems: users, agents, attendant consoles, CUCM and Microsoft Teams.
- Traefik ingress: accepts HTTPS connections and routes them by path.
- EasyUC application components: Kubernetes Deployments created by the operator.
- Data services: MariaDB, Elasticsearch and RabbitMQ, each managed by its own operator.
- Longhorn: block storage for databases and files, replicated between nodes when there are several.
- K3s: control plane and embedded etcd on one or more Linux VMs.
Namespaces
EasyUC uses two namespaces of its own:
| Namespace | Contents |
|---|---|
easyuc |
EasyUC application and the EasyUC custom resource |
easyuc-system |
EasyUC Manager, installed with Helm |
Data services and operators
EasyUC uses three data services. Each is managed by its own Kubernetes operator, which is set up during the first installation.
| Service | Purpose | Managed by |
|---|---|---|
| MariaDB | Database for configuration and business data | MariaDB operator |
| Elasticsearch | Search index, among other things for logs and call report history | ECK (Elastic Cloud on Kubernetes) |
| RabbitMQ | Message broker | RabbitMQ operator |
Note
Image and storage size of the data services are set in the EasyUC resource. As of 4.8.7 these are MariaDB 11.8.9, RabbitMQ 4.2.5 and Elasticsearch 9.5.4. A normal EasyUC update does not replace the data services, see Updates.
Components per module
The application consists of several components, each running as a Kubernetes Deployment. The operator creates and removes them depending on which modules are active.
Since 4.8.7 all components start from the same container image. The EasyUC Manager is a separate product with its own image.
| Module | Components | Notes |
|---|---|---|
| Core (always) | admin-api, admin-ui, admin-workers, websocket, public-api |
Run in every module combination. |
cucm |
curri-api, curri-nest, enduser-api, enduser-ui, jtapi, phonebook, proftpd |
proftpd is the upload service for SFTP and FTP. |
acd |
acd-media |
JTAPI/CTI media service with CTI ports and announcements. Runs in the host network. |
teams |
teams-sbc, teams-ps |
teams-sbc: SBC based on FreeSWITCH, in the host network. teams-ps: automated Teams tenant setup via PowerShell. |
presence |
presence-sync |
Synchronises the call status between CUCM and Teams. A service of its own that can be switched on independently of the other modules. |
Note
acd-media and teams-sbc run in the node's host network, so their ports are bound directly to that node's IP address. teams-sbc is placed on the node where acd-media runs. The ports are listed under Ports and firewall.
Ingress and paths
Traefik accepts web traffic via HTTPS on TCP 443 and routes it by path to the responsible component. Which paths are active depends on the modules.
| Path | Interface or service |
|---|---|
/admin |
Admin interface |
/enduser |
End-user portal |
/agent |
Agent workplace |
/manager |
EasyUC Manager, API at /manager-api |
| APIs | Application programming interfaces |
/curri-api |
CURRI interface for CUCM |
Note
Traefik also answers HTTP on TCP 80. No automatic redirect to HTTPS is configured. Until you activate your own certificate, Traefik uses a self-signed one, see Certificates.
Storage
Longhorn provides block storage for the databases and for files. With several nodes, Longhorn replicates the volumes between the nodes. On a single node they are not redundant.
The Manager shows the Longhorn volumes with state, robustness and size. How replicas behave when a node fails is described under Redundancy.
Images and registry
Since 4.8.7 all application components are contained in a single container image based on Debian 13. For an installation the images come online from the registry registry.easy-uc.com; the appliance needs outbound TCP 443 to this host for that. For sites without internet access there are offline bundles.
Updates come as one signed package file that you upload in the Manager. The Manager distributes the image to all nodes itself, see Updates without internet access.
First installation via the console menu
After the VM starts for the first time, log in on the VM console as user easyuc. A text menu appears.
-
Choose Initialize K3s
The installation runs offline from files shipped in the appliance. No internet access is needed.
-
Components are installed
K3s, Traefik as ingress, Longhorn as storage, the operators for MariaDB, Elasticsearch (ECK) and RabbitMQ, and the EasyUC Manager.
-
Continue in the Manager
All further steps happen in the browser, see Installation.
The same menu lets you change the IP address (single-node installations only), enter your internal time sources under NTP Server or uninstall the system.
The Manager's initial password is generated randomly for each appliance. EasyUC itself has no default password. You set the password of the first administrator during setup.