Skip to main content

Network flows and ports

osie-api opens almost every connection itself. It connects to MongoDB and RabbitMQ, to the public endpoints of each OpenStack cloud, and to the third-party services you enable. Users reach OSIE on one hostname over HTTPS. Their browsers connect to OpenStack directly in three cases: the server console, single sign-on into Keystone, and temporary object storage links. On the OpenStack side, only the notifier and a federated Keystone open connections to OSIE.

OSIE has no setting for an outbound HTTP proxy. Allow the destinations of osie-api at your firewall.

Overview​

Each arrow starts at the side that opens the connection. Dashed arrows exist only with Keystone federation.

Connection matrix​

Every installation needs these connections:

FromToPortProtocolUsed for
Users' browsers, API clientsThe OSIE hostname443HTTPSEverything users and integrations do in OSIE
Gatewayosie-api, osie-ui, osie-admin8080, 80, 80HTTPRouting inside the deployment
osie-apiMongoDB27017MongoDB, optionally TLSAll persistent state
osie-apiRabbitMQ5672AMQP, optionally TLSScheduled work and live updates
osie-apiThe Keystone URL of each cloud, and the public endpoints in its catalogThe catalog's portsHTTPSEverything OSIE does in OpenStack
osie-apic1.osie.io, then c2.osie.io443HTTPSLicence check, at start and every hour
Users' browsersNova console proxy6080 for noVNC by defaultHTTPS, WebSocketServer console

An air-gapped installation uses a signed licence key. osie-api verifies it locally and makes no licence check.

These connections exist only when the feature that needs them is in use:

FromToPortProtocolWhen
osie-notifierOpenStack's RabbitMQ5672AMQPOpenStack notifications are installed
osie-notifierThe OSIE hostname443HTTPSThe same
KeystoneThe OSIE hostname443HTTPSKeystone federation
Users' browsersKeystone public endpoint5000 by defaultHTTPSKeystone federation
Users' browsersThe cloud's S3 endpointThe endpoint's portHTTPSUsers open temporary object links
osie-apiA region's Prometheus9090 by defaultHTTP or HTTPSInstance metrics come from Prometheus
osie-apiYour mail server25 or 587, as configuredSMTP, optionally STARTTLSEmail is sent over SMTP
osie-apiThird-party services443 for mostHTTPSEach integration you enable, see Third-party services
ACME certificate authorityThe OSIE hostname80, 443HTTP, TLSThe gateway obtains a Let's Encrypt certificate

Inside the deployment​

ComponentListens onReached by
Gateway: Caddy with the Docker Compose installer, your ingress controller or Gateway on Kubernetes443, and 80 for redirects and certificate validationUsers, API clients, the notifier, a federated Keystone
osie-api8080, HTTPThe gateway
osie-api management8081, HTTPKubernetes probes and your Prometheus, which reads /actuator/prometheus
osie-ui, the client portal80, HTTPThe gateway
osie-admin, the admin dashboard80, HTTPThe gateway
MongoDB27017osie-api
RabbitMQ5672, AMQPosie-api

TLS ends at the gateway, which reaches the containers over plain HTTP. osie-ui and osie-admin serve static files only. The client portal and the admin dashboard call osie-api from the user's browser, through the OSIE hostname, so neither container connects to osie-api inside the deployment.

Keep port 8081 inside the deployment. Its endpoints require no authentication, so never route it through the gateway or publish it. The Helm chart exposes only port 8080 through its Service.

With the Docker Compose installer, the gateway publishes 80 and 443 on the host and nothing else is published. On Kubernetes, the Helm chart can reach an external MongoDB or RabbitMQ over TLS: set externalMongodb.tls.enabled or externalRabbitmq.tls.enabled, and give the CA in caSecret or caConfigMap. RabbitMQ over TLS usually listens on 5671, so set externalRabbitmq.port as well.

Paths on the public hostname​

The gateway routes by path on the one hostname:

PathServed by
/api-v1/, /admin_api/, /oauth2/, /realms/, /.well-known/, /v3/api-docsosie-api
/osie_admin/osie-admin
Every other pathosie-ui

A reverse proxy or web application firewall in front of OSIE must pass these paths, and two kinds of request on /api-v1/:

  • Image uploads of up to 10 GB, sent as one request body. ingress-nginx accepts 1 MB by default. Raise the limit, and stream the body to osie-api without buffering it on the controller's disk. Add these annotations next to the ones you already set, such as the cert-manager issuer:

    values.yaml
    global:
    ingress:
    annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "11g"
    nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
  • Live updates at /api-v1/streaming, a server-sent events response that stays open while the portal is open. osie-api writes a heartbeat every 5 seconds, so any idle timeout longer than 5 seconds keeps it open.

OpenStack endpoints​

osie-api reaches each cloud through the Keystone URL registered on the cloud provider. For every other service, it reads the Keystone catalog and uses the public endpoint in the region of the resource. It uses no internal or admin endpoints, so osie-api needs a route to the public endpoint of every service it uses, in every region. The ports are the ones your catalog lists:

openstack endpoint list --interface public

Two kinds of credentials cross these connections. Administrative work, such as creating projects and users, granting roles, setting quotas and polling resources, uses the cloud provider's administrator credentials: a password or an application credential. Work inside a project uses a token for that user, scoped to that project. See Identity and access model.

ServiceCatalog typeUsed forUpstream default port
KeystoneidentityTokens, projects, users, role assignments, application and EC2 credentials5000
NovacomputeServers, bare metal servers, server snapshots, consoles, server groups, quotas8774
NeutronnetworkNetworks, subnets, routers, ports, floating IPs, security groups, QoS, VPN9696
Cindervolumev3 or block-storageVolumes, volume snapshots, volume backups and restores8776
GlanceimageImages, image upload and download9292
Swift or Ceph RADOS Gatewayobject-storeBuckets and objects8080
Octaviaload-balancerLoad balancers9876
DesignatednsDNS zones and records9001
HeatorchestrationStacks8004
Magnumcontainer-infraKubernetes clusters and their kubeconfig certificates9511
Manilasharev2File shares8786
Barbicankey-managerSecrets9311
TrovedatabaseDatabases8779
GnocchimetricInstance metrics, when Gnocchi is the source8041
TrilioworkloadsTrilio backups8780
PlacementplacementQuotas on Virtuozzo Hybrid Infrastructure8778

Bare metal servers are managed through Nova, so osie-api does not call the Ironic API. Two destinations come from the cloud provider's settings instead of the catalog: the Prometheus URL of a region, when it is the metrics source, and on Virtuozzo Hybrid Infrastructure the S3 endpoint and the object storage administration endpoint (Configure VHI S3).

Apart from the notifier, nothing OSIE runs needs a route to OpenStack's database, message bus, hypervisors or storage network. Users who drive OpenStack with the OpenStack CLI, using credentials issued in the client portal, connect to the same public endpoints from their own machines.

Flows by feature​

Sign-in and API calls​

Users sign in to the OSIE hostname, at the realm's login page or through the realm's identity provider. With an external identity provider, the browser is redirected to it, and osie-api then calls the provider directly:

Without an external identity provider, the realm's own login page replaces steps 2 to 5. Every call the client portal and the admin dashboard make then goes to /api-v1 on the same hostname. osie-api checks the user's membership and calls OpenStack with a token for that user, scoped to the project.

Integrations call the Admin API at /admin_api/v1, with an HMAC-signed request or an OAuth2 token from a trusted issuer (Authentication). The first time osie-api receives a token from a trusted issuer, it reads that issuer's discovery document and keys, so osie-api needs HTTPS to every issuer you trust.

Image upload and download​

Image files pass through the gateway and osie-api, which stream them to Glance without storing them. The browser never connects to Glance.

A download follows the same path in the other direction. The browser opens a single-use link under /api-v1/download/, and osie-api streams the file from Glance's /v2/images/ID/file. OSIE does not import images from a URL, so Glance opens no outbound connection on its behalf. Allow for the upload size at your gateway, as described in Paths on the public hostname.

Volumes, snapshots and backups​

osie-api sends requests to Cinder and Nova, and the data moves inside OpenStack. No volume, snapshot or backup data passes through OSIE.

  • A volume created from an image is copied by Cinder from Glance.
  • A server snapshot is written by Nova to Glance as an image.
  • A volume backup is written by the Cinder backup service to its own backend, and restored from there.

Backup products connect as follows:

ProductConnectionNotes
Cinder backupsosie-api to Cinder's public endpointVolume backups and restores
Trilioosie-api to the workloads endpoint in the catalogUses the user's project-scoped token. No separate URL or credential
Storware Backup and Recoveryosie-api to the Storware server URL you register in the admin dashboard, on that URL's portosie-api signs in with the username and password you register. The client portal's backup screens go through osie-api, so browsers never connect to Storware
FerryNone from OSIERuns inside the cloud. See its network connections

Storware's own connections, to OpenStack, to the hypervisors or storage and to its backup destinations, are described in Storware's documentation.

Object storage​

Uploads and downloads in the client portal pass through osie-api, as images do. osie-api connects to Swift through the catalog, or to the S3 endpoint on Virtuozzo Hybrid Infrastructure.

A temporary link is a presigned S3 URL that points at the cloud's S3 endpoint. Whoever opens it connects to that endpoint directly, so it must be reachable from where the link is used.

Server console​

The console connects the browser to Nova's console proxy. osie-api only asks Nova for the URL.

The URL is the one Nova is configured to hand out, such as novncproxy_base_url for noVNC. It must resolve and be reachable from users' networks. The console type is set per cloud provider: noVNC by default, SPICE, serial or WebMKS.

OpenStack notifications​

The notifier is a separate container that runs near OpenStack's RabbitMQ. It turns OpenStack's notifications into HTTPS requests to OSIE, so changes made outside the portal appear at once.

osie-api never connects to OpenStack's RabbitMQ, and OpenStack never connects to OSIE's. Without the notifier, osie-api picks up changes made outside the portal when it polls each project, every 15 minutes. See OpenStack notifications to install it.

Instance metrics​

osie-api reads instance metrics per region from Gnocchi, through the catalog's metric endpoint, or from the Prometheus URL set for the region. It polls every 15 minutes, and again when a user opens a server's charts. See Instance metrics.

Keystone federation​

With Keystone federation, a user's browser signs in to Keystone through OSIE, and Keystone calls OSIE's realm as an OpenID Connect provider:

Keystone therefore needs outbound HTTPS to the OSIE hostname, and users' browsers need Keystone's public endpoint. See Keystone federation for the Keystone-side configuration.

Third-party services​

Each integration is optional, configured in the admin dashboard, and connects only once it is enabled. Unless the table says otherwise, every connection is HTTPS on port 443, opened by osie-api.

Integrationosie-api connects toUsers' browsers connect toInbound to OSIE
Email over SMTPYour mail server, on the port you set, in plain SMTP or with STARTTLS. Implicit TLS on port 465 is not supported
Email over Mailgunapi.mailgun.net or api.eu.mailgun.net
OpenID Connect identity providersThe provider's discovery, token, keys and user info endpointsThe provider's login page
Google, Facebook, GitHub sign-inThe provider's OAuth endpointsThe provider's login page
Stripeapi.stripe.comjs.stripe.com
PayPalPayPal's REST APIwww.paypal.com
Razorpayapi.razorpay.comapi.razorpay.com
Xenditapi.xendit.cojs.xendit.co, Xendit's invoice page
HyperPayeu-prod.oppwa.comeu-prod.oppwa.com
iPay (Banca Transilvania)ecclients.btrl.roecclients.btrl.ro
BTCPay ServerYour BTCPay serverYour BTCPay server
SmartBillws.smartbill.ro, port 8183
WHMCSYour WHMCS includes/api.php, and its OAuth endpoints when WHMCS is a sign-in providerYour WHMCS invoice and login pages
iDenfyivs.idenfy.comiDenfy's verification pageWebhook under /api-v1/webhooks/
Digioapi.digio.inDigio's SDKWebhook under /api-v1/digio/webhooks/
Crisp, Intercom, Chatwoot, SupportPalapi.crisp.chat, api.intercom.io or its regional host, or your Chatwoot or SupportPal serverThe chat widget from the provider
Severalnines CCXYour CCX URLYour CCX URL, embedded in the portal
Billing Resource ExporterEach exporter's URL, with SigV4-signed requests (API)
WebhooksEach receiver URL (Webhooks)
Billing profile validationipinfo.io
Error reportingThe Sentry DSN set in the Helm value sentry.dsn

Payment gateways do not call OSIE. After a payment, the customer's browser returns to OSIE under /api-v1/callbacks/payment/ or /api-v1/payments/. Bank transfers make no connection.

osie-api also downloads the logo set in the branding settings when it renders invoices, from the URL you give. Webhook receivers must use HTTPS, and osie-api refuses private addresses unless you allow them (Sending to an internal address).

Users' browsers load fonts, icons and scripts from fonts.googleapis.com, fonts.gstatic.com, use.fontawesome.com, api.fontshare.com and cdn.jsdelivr.net, and avatars from gravatar.com in the admin dashboard. When a user adds a security group rule for their own address, the client portal reads that address from api.ipify.org.

If an identity provider or another service osie-api calls presents a certificate from a private certificate authority, add that authority as described in Custom CA certificates.

Installation and upgrades​

Installing and upgrading pull from these sources. No registry credentials are needed.

SourceContents
ghcr.ioOSIE's images: osie/osie-api, osie/osie-ui, osie/osie-admin and osie-io/osie-notifier
Docker Hub (registry-1.docker.io)MongoDB, RabbitMQ and Caddy for Docker Compose, the operators' images, and the images of the databases the Helm chart can deploy
helm.osie.ioThe OSIE Helm chart
percona.github.io, github.comThe charts and manifests of the MongoDB and RabbitMQ operators
github.com, raw.githubusercontent.com, download.docker.com, your OS package mirrorsThe Docker Compose installer and Docker itself

With a domain name, the Docker Compose installer's Caddy obtains a certificate from Let's Encrypt. It needs outbound HTTPS to the certificate authority, and inbound 80 and 443 from the internet for validation. With an IP address, Caddy issues its own certificate and needs neither. On Kubernetes, cert-manager has the same needs when it validates over HTTP.

Database backups need outbound access to their object storage: the S3 endpoint of the Percona operator's backups, and Velero's bucket (Backup).