Skip to main content
This page lists the minimal network flows to allow when you run Prisme.ai with Kubernetes NetworkPolicy resources, cloud security groups, or an equivalent firewall model. Start from default-deny ingress and egress, then open only the flows that match the services and products you deploy.
The examples below assume the default chart namespaces and release-style service names: core-... services in the core namespace and apps-... services in the apps namespace. Adjust names, namespaces, selectors, and external endpoint CIDRs to your installation.

Chart-backed ports and labels

ComponentService portPod target portNotes
prismeai-api-gateway80/TCP80/TCPPublic API entrypoint.
prismeai-workspaces80/TCP80/TCPWorkspace, file, app and page metadata API.
prismeai-runtime80/TCP80/TCPAutomation runtime.
prismeai-events80/TCP80/TCPEvents API and WebSocket backend.
prismeai-console80/TCP80/TCPActive frontend. The prismeai-console chart serves the current prisme.ai-platform image.
prismeai-pages80/TCP80/TCPLegacy standalone pages frontend; enabled: false by default and slated for removal.
prismeai-functions80/TCP80/TCPCustom code service.
prismeai-searchengine80/TCP80/TCPCrawler/searchengine API.
prismeai-crawler3000/TCP3000/TCPCrawler worker/API.
The subcharts label pods with:
app.kubernetes.io/name: <chart name>
app.kubernetes.io/instance: <release name>
app: <chart name>
For example, the default runtime selector is:
app.kubernetes.io/name: prismeai-runtime
app.kubernetes.io/instance: core
Frontend naming. The active frontend is platform (the prisme.ai-platform image), deployed by the prismeai-console chart and exposed by the prismeai-console Service — so all frontend-related rules below use the prismeai-console selector. The chart name is kept for compatibility even though the image is now prisme.ai-platform. prismeai-pages is the legacy standalone pages frontend; it is disabled by default and slated for removal. Skip its rules unless you explicitly enable it.
The core chart has optional networkPolicy.enabled settings for core services, but those templates only create ingress policies for the selected service. They do not create a complete egress policy set. If you enforce default-deny egress, you must add the egress rules listed on this page.

Public ingress

Only public entrypoints should accept traffic from the ingress controller or load balancer.
DestinationPortRequired when
prismeai-api-gateway80/TCPAlways — the only mandatory public entrypoint. Serves /v2, webhooks and WebSocket proxying.
prismeai-console80/TCPFor browser/UI access. The reference ingress maps the studio.<domain> host directly to it (it serves the active platform frontend). Optional only for headless/API-only deployments.
prismeai-pages80/TCPOnly if the legacy pages service is explicitly enabled.
Do not expose workspaces, runtime, events, or apps services directly to the internet.

Core service flows

api-gateway

api-gateway proxies public API traffic to the internal backend services.
DirectionPeerPortWhy
IngressIngress controller / load balancer80/TCPPublic API entrypoint.
Egressworkspaces, runtime, events, console80/TCPGateway route targets from gateway.config.yml.
EgressRedis broker6379/TCPEvent broker.
EgressRedis sessions store6379/TCPSessions/rate-limit storage.
EgressMongoDB or PostgreSQL users database27017/TCP or 5432/TCPUser/account storage.
EgressMongoDB or PostgreSQL permissions database27017/TCP or 5432/TCPPermissions checks.
EgressObject storage443/TCP or storage endpoint portOnly when uploads use S3_LIKE, AZURE_BLOB, or GCS.
EgressMail provider / identity provider443/TCPOnly when account validation, SSO, OIDC or SAML integrations are enabled.

workspaces

workspaces stores DSUL, metadata, files, apps and page definitions.
DirectionPeerPortWhy
Ingressapi-gateway80/TCPAPI traffic routed by the gateway.
Egressapi-gateway80/TCPInternal readiness/import flows use global.internalApiUrl or global.apiUrl.
EgressRedis broker6379/TCPEvent broker.
EgressMongoDB or PostgreSQL permissions database27017/TCP or 5432/TCPPermissions storage.
EgressObject storage443/TCP or storage endpoint portRequired for workspaces models/uploads when storage is not FILESYSTEM.

runtime

runtime executes automations. This service needs the broadest egress because workspace products and user-authored automations run from it.
DirectionPeerPortWhy
Ingressapi-gateway80/TCPWebhooks and test routes.
Egressapi-gateway80/TCPInternal API calls and readiness checks.
Egressprismeai-functions80/TCPAPP_CONFIG_CustomCode_apiUrl.
Egressprismeai-searchengine80/TCPAPP_CONFIG_Crawler_apiUrl and WORKSPACE_CONFIG_crawler_apiUrl. Crawler-based AI Knowledge indexing and search.
EgressRedis broker6379/TCPEvent broker.
EgressRedis runtime cache6379/TCPContext/cache storage.
EgressMongoDB or PostgreSQL permissions database27017/TCP or 5432/TCPPermissions checks.
EgressMongoDB or PostgreSQL collections database27017/TCP or 5432/TCPAI Collection and product data.
EgressObject storage443/TCP or storage endpoint portRequired for DSUL model storage when not FILESYSTEM.
EgressLLM providers443/TCPOpenAI, Azure OpenAI, AWS Bedrock, Mistral, Groq, Gemini/Vertex, Anthropic, etc.
EgressVector store (via fetch)9200/TCP, or 443/TCP for a managed HTTPS endpointThe storage product queries Elasticsearch/OpenSearch directly from automations (its VectorElasticsearch / VectorOpensearch apps), so this rides on the fetch egress but targets the DB port, not 443.
EgressAnything an automation calls via fetch443/TCP (or proxy)Installed apps and user automations call external services through the runtime fetch instruction.
The fetch instruction drives runtime egress. Automations call arbitrary URLs through the runtime fetch instruction, so runtime must reach every endpoint your automations target — external LLM providers (chat and embeddings), SaaS APIs, internal services and webhooks. fetch honors the standard HTTP_PROXY / HTTPS_PROXY / NO_PROXY environment variables, so you can route all outbound automation traffic through a single forward proxy and restrict egress to that proxy’s address.LLM and embedding calls are executed by these automations: if you use external providers, allow runtime egress to their HTTPS endpoints.Vector store — two paths. Crawler-based AI Knowledge indexing/search goes through searchengine (runtimesearchengine on port 80, then searchengine → Elasticsearch/OpenSearch on 9200). In addition, the storage product queries the vector store directly from automations via its VectorElasticsearch / VectorOpensearch apps — a fetch call to the configured elasticsearch_host / opensearch_host. That direct path means runtime needs egress to the vector store on its database port (9200, or 443 for a managed HTTPS endpoint). If you scope fetch egress tightly (forward proxy or CIDR allow-list), include the vector store endpoint, since a broad 443-only rule will not cover an in-cluster 9200 store (see Databases overview).

events

events stores and streams platform events.
DirectionPeerPortWhy
Ingressapi-gateway80/TCPEvents API and WebSocket proxy target.
Egressapi-gateway80/TCPInternal readiness checks.
EgressRedis broker6379/TCPEvent broker.
EgressMongoDB or PostgreSQL permissions database27017/TCP or 5432/TCPPermissions checks.
EgressElasticsearch or OpenSearch events store9200/TCPEvent storage and cleanup.

platform frontend (console chart)

The active frontend (platform) is a server-rendered Next.js app, deployed by the prismeai-console chart and reached through the prismeai-console Service.
DirectionPeerPortWhy
IngressIngress controller / load balancer80/TCPPublic frontend traffic.
Egressapi-gateway80/TCPServer-side API calls when global.internalApiUrl is configured.
EgressPublic API URL443/TCPOnly when frontend server-side calls use the public global.apiUrl.
prismeai-pages is disabled by default and slated for removal; if you enable it, apply the same flows as the table above (public ingress on 80, egress to api-gateway).

Apps namespace flows

Deploy these flows only for the AI Products services you enable.
ServiceIngress fromEgress toWhy
prismeai-functionsruntime on 80/TCPExternal package/API endpoints as required by custom codeThe chart itself uses filesystem storage and does not inject Redis/MongoDB credentials. User code may need more egress.
prismeai-searchengineruntime on 80/TCPElasticsearch/OpenSearch documents store on 9200/TCP; Redis searchengines store on 6379/TCPCrawler/searchengine API and readiness.
prismeai-crawlerNo service-to-service ingress required by the default runtime pathElasticsearch/OpenSearch documents store on 9200/TCP; Redis searchengines store on 6379/TCP; crawled websites on 80/443/TCPCrawling, parsing and indexing.
prismeai-crawler can include an optional Splash sidecar listening on 8050, 8051, and 5023. The chart points SPLASH_URL to http://localhost:8050/, so this is same-pod traffic and does not require a separate inter-pod NetworkPolicy rule.

Datastore ingress

Restrict database ingress to only the services that need each datastore.
DatastorePortAllow from
Redis broker6379/TCPapi-gateway, workspaces, runtime, events
Redis sessions store6379/TCPapi-gateway
Redis runtime cache6379/TCPruntime
Redis searchengines store6379/TCPsearchengine, crawler
MongoDB/PostgreSQL users database27017/TCP or 5432/TCPapi-gateway
MongoDB/PostgreSQL permissions database27017/TCP or 5432/TCPapi-gateway, workspaces, runtime, events
MongoDB/PostgreSQL collections database27017/TCP or 5432/TCPruntime
Elasticsearch/OpenSearch events store9200/TCPevents
Elasticsearch/OpenSearch documents / vector store9200/TCPsearchengine, crawler (crawler indexing/search); runtime (direct vector queries from the storage product via fetch)
Use separate Redis databases or separate Redis instances according to your sizing and isolation requirements. The Helm values expose distinct URLs for broker, sessions, runtime cache, and searchengines.

Baseline policies

Create a deny-all policy in each namespace where you enforce NetworkPolicy.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: core
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress
Also allow DNS egress from all application pods:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-dns
  namespace: core
spec:
  podSelector: {}
  policyTypes:
    - Egress
  egress:
    - to:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: kube-system
          podSelector:
            matchLabels:
              k8s-app: kube-dns
      ports:
        - protocol: UDP
          port: 53
        - protocol: TCP
          port: 53

Example runtime egress

This example shows the shape of a runtime egress policy. Replace release labels, namespace names and external CIDRs with your own values.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-runtime-egress
  namespace: core
spec:
  podSelector:
    matchLabels:
      app.kubernetes.io/name: prismeai-runtime
      app.kubernetes.io/instance: core
  policyTypes:
    - Egress
  egress:
    - to:
        - podSelector:
            matchLabels:
              app.kubernetes.io/name: prismeai-api-gateway
              app.kubernetes.io/instance: core
      ports:
        - protocol: TCP
          port: 80

    - to:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: apps
      ports:
        - protocol: TCP
          port: 80

    - to:
        - ipBlock:
            cidr: 10.0.0.0/8
      ports:
        - protocol: TCP
          port: 6379
        - protocol: TCP
          port: 27017
        - protocol: TCP
          port: 5432
        - protocol: TCP
          port: 9200 # vector store — direct queries from the storage product via fetch

    - to:
        - ipBlock:
            cidr: 0.0.0.0/0
      ports:
        - protocol: TCP
          port: 443
Scope external egress as tightly as your environment allows. For managed databases, use private VPC CIDRs or private endpoints. For LLM providers and user-authored automations, prefer a controlled egress gateway or forward proxy instead of unrestricted 0.0.0.0/0 access.