Runtime Components and Ports
Use this page to verify runtime component boundaries, required network paths, and control-plane wiring for Secure Remote Access (SRA).
For baseline prerequisites and deployment constraints before topology design, start with SRA Requirements.
Port Inventory
For the canonical baseline inventory, also see SRA Requirements.
| Component | Port(s) | Purpose | Exposure |
|---|---|---|---|
| Gateway | 8000 | External API and SRA portal and web paths | User-facing |
| Gateway | 8080 | Internal API and health endpoint | Internal |
| Gateway | 8889 | Metrics endpoint when metrics are enabled | Internal/monitoring |
| SRA SSH bastion | 22 (Kubernetes), 2222 (Docker host mapping) | SSH data-plane sessions | User-facing |
| SRA SSH bastion | 9900 | SSH bastion control-plane API | Internal |
| SRA web bastion | 8888 | Web bastion service endpoint | Internal |
| ZTWA dispatcher | 9000 | Main web-session entrypoint | User-facing |
| ZTWA dispatcher | 19414 | Web proxy mode entrypoint | User-facing |
| ZTWA web-worker | 5800 | Worker service endpoint used by dispatcher | Internal |
| Redis/cache | 6379 | Session and cache backend | Internal |
Component Dependency Graph
The following flow summarizes the most common runtime dependency direction.
flowchart LR User[User or CLI Client] --> GW8000[Gateway :8000] User --> SSH22[SRA SSH Bastion :22] User --> DISP9000[Dispatcher :9000] User --> DISP19414[Dispatcher :19414] GW8000 --> WEB8888[SRA Web Bastion :8888] GW8000 --> SSH9900[SRA SSH Bastion Control :9900] WEB8888 --> GW8080[Gateway Internal API :8080] SSH9900 --> GW8080 GW8000 --> REDIS6379[Redis :6379] WEB8888 --> REDIS6379 SSH9900 --> REDIS6379 DISP9000 --> WORKER5800[ZTWA Web Worker :5800] DISP19414 --> WORKER5800
Internal Service Wiring
In containerized deployments, the following runtime variables commonly define service discovery:
REMOTE_ACCESS_WEB_SERVICE_INTERNAL_URLfor gateway to web bastion control path (for examplehttp://akeyless-sra-web:8888).REMOTE_ACCESS_SSH_SERVICE_INTERNAL_URLfor gateway to SSH bastion control path (for examplehttp://akeyless-sra-ssh:9900).INTERNAL_GATEWAY_APIfor bastion components to gateway health/internal API (8080).REDIS_ADDRfor cache and session backend (6379).
Deployment Boundary Patterns
Use one of these topologies based on security and scale requirements:
- Same cluster, single namespace: fastest to deploy and troubleshoot.
- Same cluster, dedicated namespace for SRA components: improves policy isolation while keeping low latency.
- Separate clusters for gateway and SRA bastions/dispatcher: useful for large organizations and blast-radius reduction; requires explicit networking and DNS reachability between clusters.
For Kubernetes deployments, expose the SSH bastion service according to SRA setup on Kubernetes and keep internal control-plane ports non-public whenever possible.
Namespace Isolation Guidance
For Kubernetes production deployments:
- Deploy SRA-related workloads into a dedicated namespace per environment.
- Apply namespace-scoped network policies so only required east-west paths are allowed.
- Keep Redis and control-plane endpoints (
8080,8888,9900,5800) cluster-internal. - Restrict user-facing exposure to only the required entrypoints (
8000,22,9000,19414) based on enabled features.
Implementation Pattern
Use this sequence to implement the isolation recommendations.
- Create dedicated namespaces per environment (for example
sra-prod,sra-staging). - Place Gateway and SRA runtime components in that namespace (or paired namespaces with explicit policies).
- Apply default-deny ingress and egress policies first.
- Add explicit allow rules only for required SRA runtime paths.
- Expose only approved external services with
LoadBalanceror ingress. - Validate effective policy behavior before production transition.
Apply changes in this order to reduce outage risk:
- Create namespace and labels.
- Deploy workloads and services.
- Apply default-deny policies.
- Apply explicit allow policies.
- Run smoke tests before opening external traffic.
Example Namespace Baseline
apiVersion: v1
kind: Namespace
metadata:
name: sra-prod
labels:
app.kubernetes.io/part-of: sra
security-zone: remote-accessAdd component labels in your workload manifests (for example component: gateway, component: sra-ssh, component: sra-web, component: dispatcher, component: web-worker, component: redis) so NetworkPolicy selectors remain explicit.
Baseline Controls to Apply
- Namespace labels for policy selection and operations ownership.
- Resource quotas and limit ranges to avoid noisy-neighbor impact.
- Service account and RBAC scoping per component class (Gateway, bastion, dispatcher, worker).
- Network policies for:
- Gateway to bastion control-plane ports (
8888,9900). - Bastion components to Gateway internal API (
8080). - Runtime components to Redis (
6379). - Dispatcher to web-worker (
5800).
Example NetworkPolicy Pattern
Start with default deny:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: sra-prod
spec:
podSelector: {}
policyTypes:
- Ingress
- EgressThen add explicit allow rules per dependency path. Example: allow dispatcher to web-worker on 5800.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dispatcher-to-web-worker
namespace: sra-prod
spec:
podSelector:
matchLabels:
component: web-worker
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
component: dispatcher
ports:
- protocol: TCP
port: 5800Replicate the same pattern for:
- Gateway to
sra-web:8888andsra-ssh:9900. - Bastion components to gateway internal API
8080. - Runtime components to Redis
6379.
Example Validation Workflow
After applying namespace and policy controls, validate:
# Confirm workloads are in the expected namespace
kubectl get pods -n <sra-namespace>
# Verify only intended services are externally exposed
kubectl get svc -n <sra-namespace>
# Review applied network policies
kubectl get networkpolicy -n <sra-namespace>
# Validate gateway and component readiness
kubectl get endpoints -n <sra-namespace>
# Confirm endpoint slices map to expected component labels
kubectl get endpointslices -n <sra-namespace>To validate policy enforcement, run a temporary diagnostic pod and test only approved paths:
kubectl run netcheck --rm -it --restart=Never -n <sra-namespace> --image=busybox:1.36 -- sh
# Inside pod, test allowed and denied connections using nc/curl as availableThen run a functional smoke test from the user perspective:
- Portal/API access through Gateway (
8000). - SSH session launch (
22) when SSH access is enabled. - Web session launch through dispatcher (
9000or19414) when ZTWA is enabled.
If any flow fails, inspect policy denies and service endpoint reachability before widening exposure.
