...
We have one Load balaner, two thiss-js servers, two MDQ servers and one Medata Agreegator & Publisher server per site. They are all virtual machines managed by SUNET but has have both geographic and network redundancy.
The relationship between these servers in combination with the services in our CDN provider Fastly are described in below diagrams. More details follow for each of these components further in this documentation.
...
| draw.io Diagram | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
md.seamlessaccess.org
| draw.io Diagram | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Beta
The number of servers and sites in Beta enviornment are limited but has the same relationship between them as Production.
...
The code for thiss-mdq lives here https://github.com/TheIdentitySelector/thiss-mdq.
The MDQ is a REST-like API for requesting and receiving arbitrary metadata. It exposes the metadata in the URL https://md.seamlessaccess.org/entities. The URL for beta is https://md.thiss.io/entities.
The aggregator servers running PyFF expose their port 443 to MDQ servers. The MDQ servers run a cronjob that fetch metadata JSON files from Aggregator servers. Next the script checks to see if there are changes in the metadata JSON files by comparing to the local copies under /etc/thiss , if there is, it updates the files in the docker container running thiss-mdq and restart it. The script also does a pre-check to see if the fetched metadata files are empty or not, if empty, it will exit aggregator servers running PyFF expose their port 443 to MDQ servers. They run a cronjob that checks to see if there are changes in the metadata JSON files in the Aggregator servers, if there is, it updates the file in the docker container running thiss-mdq and restart it. The script also does a pre-check to see if the fetched metadata files are empty or not, if empty, it won't restart and risk exposing empty metadatas.
| Code Block |
|---|
# Puppet Name: thiss__mdq_prod_fetch_metadata */5 * * * * /usr/local/bin/scriptherder --mode wrap --syslog --name thiss__mdq_prod_fetch_metadata -- /usr/local/bin/get_metadata.sh |
The servers run the MDQ service on port 80 which is only open to the HAproxy load balancers with names md.*.seamlessaccess.org belonging to the same site.
Mointoring
We monitor the date when the metadata JSON files are last modified in both monitor.seamlessaccess.org and nagiosxi.nordu.net. The check warns if the metadata is 2 days old, it becomes critical if it is 5 days old.
We have this check on MDQ servers, on HAproxy Load balancer servers connected to Fastly and on the top Fastly level which is is a REST-like API for requesting and receiving arbitrary metadata. It exposes the metadata in the URL https://md.seamlessaccess.org/entities. The URL for beta is https://md.thissseamlessaccess.io/entities.org.
A simple check on the URLs on each level will show information about the metadata. The one on MDQ server level can only be run locally from that server or from the HAproxy server The servers run the MDQ service on port 80 which is open to the HAproxy load balancers with names md.*.seamlessaccess.org belonging to the same site.
Mointoring
...
| Code Block |
|---|
➜ ~ curl https://md |
...
.seamlessaccess.org |
...
We have this check on MDQ servers, HAproxy Load balancer servers and on the top domain which is https://md.seamlessaccess.org.
A simple check on the URLs on each level will show information about the metadata. The one on MDQ server level can only be run locally from that server or from the HAproxy server belonging to the same site.
| Code Block |
|---|
➜ ~ curl https://md.seamlessaccess.org {"version":"1.5.8","start_time":"2025-11-22T00:35:20.300Z","metadata":{"last_modified":"2025 {"version":"1.5.8","start_time":"2025-11-22T00:35:20.300Z","metadata":{"last_modified":"2025-11-22T14:15:02.808Z","last_created":"2025-11-22T14:15:02.808Z","size":17502},"trust_metadata":{"last_modified":"2025-11-22T14:15:02.808Z952Z","last_created":"2025-11-22T14:15:02.808Z952Z","size":17502},"trust_metadata":{"last_modified":"2025-11-22T14:15:02.952Z","last_created":"2025-11-22T14:15:02.952Z","size":156}}% 156}}% |
| Code Block |
|---|
➜ |
| Code Block |
➜ ~ curl -k https://md.ntx.sunet.eu.seamlessaccess.org {"version":"1.5.8","start_time":"2025-11-22T00:35:03.460Z","metadata":{"last_modified":"2025-11-22T14:15:02.125Z","last_created":"2025-11-22T14:15:02.125Z","size":17502},"trust_metadata":{"last_modified":"2025-11-22T14:15:02.212Z","last_created":"2025-11-22T14:15:02.212Z","size":156}}%11-22T14:15:02.125Z","last_created":"2025-11-22T14:15:02.125Z","size":17502},"trust_metadata":{"last_modified":"2025-11-22T14:15:02.212Z","last_created":"2025-11-22T14:15:02.212Z","size":156}}% |
| Code Block |
|---|
root@md-1: ~ # curl -k http://localhost
{"version":"1.5.8","start_time":"2025-11-22T00:35:05.392Z","metadata":{"last_modified":"2025-11-22T14:15:03.281Z","last_created":"2025-11-22T14:15:03.281Z","size":17502},"trust_metadata":{"last_modified":"2025-11-22T14:15:03.409Z","last_created":"2025-11-22T14:15:03.409Z","size":156}} |
We also have nagios checks on the accisibility of these web links on each level.
Upgrade
The process is described in below link along with verification for both production and beta environments.
Seamless Access Software Deployment Guide#Backend(md.seamlessaccess.org)
Seamless Access Software Deployment Guide#Backend(md.thiss.io)
Thiss-js
Descripton & Troubleshooting
The servers with the name static-.*seamlessaccess.org run thiss-js in production environment. In Beta, they are named static-*.thiss.io.
The code for thiss-js lives here https://github.com/TheIdentitySelector/thiss-js. The is the code behind the discovery service exposed in the URL https://service.seamlessaccess.org. User search for their login organization here and the search quesries are sent to md.seamlessaccess.org.
The servers run the code in Docker containers. They run the thiss-js service on port 80 which is only open to the HAproxy load balancers with names static.*.seamlessaccess.org belonging to the same site.
Mointoring
We monitor both the version of the code and the accsibility of the service in in both monitor.seamlessaccess.org and nagiosxi.nordu.net.
We have this check on servers running thiss-js, on HAproxy Load balancer servers serving the code to Fastly and on Fastly level which is https://service.seamlessaccess.org.
A simple check on the URLs on each level will show information about the software. The one onthiss-js server level can only be run locally from that server or from the HAproxy server belonging to the same site.
| Code Block |
|---|
➜ ~ curl https://service.seamlessaccess.org/manifest.json
{
"short_name": "Seamless Access",
"name": "Seamless Access Identity Selector",
"description": "See https://seamlessaccess.org",
"version": "2.1.98"
} |
| Code Block |
|---|
➜ ~ curl -k https://static.se-east.sunet.eu.seamlessaccess.org/manifest.json
{
"short_name": "Seamless Access",
"name": "Seamless Access Identity Selector",
"description": "See https://seamlessaccess.org",
"version": "2.1.98"
} |
| Code Block |
|---|
root@static-1: ~ # curl -k -4 http://localhost/manifest.json
{
"short_name": "Seamless Access",
"name": "Seamless Access Identity Selector",
"description": "See https://seamlessaccess.org",
"version": "2.1.160"
} |
| Code Block |
: 14:19 root@md-1: ~ # curl -k http://localhost
{"version":"1.5.8","start_time":"2025-11-22T00:35:05.392Z","metadata":{"last_modified":"2025-11-22T14:15:03.281Z","last_created":"2025-11-22T14:15:03.281Z","size":17502},"trust_metadata":{"last_modified":"2025-11-22T14:15:03.409Z","last_created":"2025-11-22T14:15:03.409Z","size":156}} |
We also have nagios checks on the accisibility of these web links on each level.
Upgrade
Thiss-js
Descripton & Troubleshooting
Mointoring
Upgrade
The process is described in below link along with verification for both production and beta environments.
Seamless Access Software Deployment Guide#Frontend(service.seamlessaccess.org)
Seamless Access Software Deployment Guide#Frontend(use.thiss.io)
HAproxy Load Balancer
Descripton & Troubleshooting
...
SeamlessAccess SUNET INFRA cert update
Use of Fleetlock
Firewall
...
Restrictions
Access to Internal Components
...