Acceldata
Pulse

Last updated: Sep 27, 2026 11:15 UTC

Ingress for Kubernetes (K8S)

You need an Ingress object in your Kubernetes cluster to make Pulse services accessible from outside the cluster. To use an Ingress object, an Ingress controller must already be set up in your Kubernetes environment.

To enable external access, expose the following services through the Ingress controller, including their service names and ports.

Service Name

Service Port

Description

ad-graphql

4000

This is the Acceldata UI service

ad-hydra

19072

The Hydra Server for Mpack and Agents to connect and communicate.

ad-axnserver

19999

Actions Server that connects with agents and the UI.

accelo-manager

20001

Accelo Manager, which the user connects, and manager agent connects

ad-streaming

19005

Streaming service for agents.

ad-pulse-ui

4100

New Pulse UI interface for users.

Install Ingress

For the testing environment and to enhance developer productivity, we will install the Ingress controller ourselves using the following steps:

  • Install Nginx Controller.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.2/deploy/static/provider/baremetal/deploy.yaml

The Ingress controller may take a short time to become fully operational. By default, wait for 1 minute before proceeding to the next step.

  • Create NGINX routes for services. To configure NGINX routes for all required services, copy and paste the following content into a file named nginx-routes.yaml:
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ad-graphql
  namespace: PULSE_NAMESPACE
spec:
  rules:
  - host: "*.acceldata.dvl"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ad-graphql
            port:
              number: 4000
  ingressClassName: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ad-pulse-ui
  namespace: PULSE_NAMESPACE
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: "*.acceldata.dvl"
    http:
      paths:
      - path: /ui(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: ad-pulse-ui
            port:
              number: 4100
  ingressClassName: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: accelo-manager
  namespace: PULSE_NAMESPACE
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: "*.acceldata.dvl"
    http:
      paths:
      - path: /manager(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: accelo-manager
            port:
              number: 20001
  ingressClassName: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ad-streaming
  namespace: PULSE_NAMESPACE
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: "*.acceldata.dvl"
    http:
      paths:
      - path: /streaming(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: ad-streaming
            port:
              number: 19005
  ingressClassName: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ad-hydra
  namespace: PULSE_NAMESPACE
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: "*.acceldata.dvl"
    http:
      paths:
      - path: /hydra(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: ad-hydra
            port:
              number: 19072
  ingressClassName: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ad-axnserver
  namespace: PULSE_NAMESPACE
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: "*.acceldata.dvl"
    http:
      paths:
      - path: /axnserver(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: ad-axnserver
            port:
              number: 19999
  ingressClassName: nginx
  • Install NGINX Routes. To apply the NGINX Ingress routes, run the following command:
kubectl apply -f nginx-routes.yaml
  • Verify the NGINX services are running. To check if all NGINX-related services (Ingress controller and exposed services) are up and running, use the following commands:
kubectl get svc -n ingress-nginx

NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    <IP Address 1>   <none>        80:30592/TCP,443:31904/TCP   16m
ingress-nginx-controller-admission   ClusterIP   <IP Address 2>   <none>        443/TCP                      16m

Here, you can find the PORT that agents or users must use to connect to the service, for example, 30592.

  • Verify if all the mappings are installed properly or not.
kubectl get ingress -n scalability

NAME             CLASS   HOSTS             ADDRESS                        PORTS   AGE

accelo-manager   nginx   *.acceldata.dvl   <IP Address 1>,<IP Address 2>  80      16m         
ad-graphql       nginx   *.acceldata.dvl   <IP Address 1>,<IP Address 2>  80      16m

Here, you can see that the ingresses are correctly mapped to their respective services, and all Kubernetes nodes have the Node and Port configured and running.

  • Describe Ingress Resources. To view detailed information about the ingress resources, run the following command, and you can also see the expected output.
kubectl describe ingress accelo-manager -n scalability

Name:             accelo-manager
Labels:           <none>
Namespace:        scalability
Address:          10.100.10.48,10.100.10.74,10.100.10.75,10.100.10.76,10.100.10.77
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host             Path  Backends
  ----             ----  --------
  *.acceldata.dvl
                   /manager(/|$)(.*)   accelo-manager:20001 (10.42.167.98:20001)
Annotations:       field.cattle.io/publicEndpoints:
                     [{"addresses":["<IP Address 1>","<IP Address 2>","<IP Address 3>","<IP Address 4>","<IP Address 5>"],"port":80,"protocol":"HTTP","serviceName":"scal...
                   nginx.ingress.kubernetes.io/rewrite-target: /$2
Events:
  Type    Reason  Age                    From                      Message
  ----    ------  ----                   ----                      -------
  Normal  Sync    3m42s (x142 over 38m)  nginx-ingress-controller  Scheduled for sync
  Normal  Sync    3m42s (x142 over 38m)  nginx-ingress-controller  Scheduled for sync
  Normal  Sync    3m42s (x142 over 38m)  nginx-ingress-controller  Scheduled for sync
  Normal  Sync    3m42s (x142 over 38m)  nginx-ingress-controller  Scheduled for sync
  Normal  Sync    3m42s (x142 over 38m)  nginx-ingress-controller  Scheduled for sync
  Normal  Sync    3m42s (x142 over 38m)  nginx-ingress-controller  Scheduled for sync

Ingress in OpenShift

OpenShift provides an Ingress Controller that exposes services from any namespace, providing an external or public URL for access. By default, the URL listens on port 80 and can route requests to all configured endpoints correctly.

The first step is to install the oc binary (OpenShift CLI) and connect it to your OpenShift cluster.

Steps to Create Routes for Pulse Services

  • Get all the services present in the Pulse namespace using the following command.
oc get svc -n <Pulse namespace>
oc get svc -n pulse
NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)               AGE
accelo-manager             ClusterIP   <IP Address 1>    <none>        20001/TCP             24h
ad-alerts                  ClusterIP   <IP Address 2>    <none>        19015/TCP,8080/TCP    23h
ad-axnserver               ClusterIP   <IP Address 3>    <none>        19999/TCP             23h
ad-connectors-sparkonk8s   ClusterIP   <IP Address 4>    <none>        19003/TCP,19025/TCP   23h
ad-dashplot                ClusterIP   <IP Address 5>    <none>        8080/TCP              23h
ad-dashplot-ui             ClusterIP   <IP Address 6>    <none>        8080/TCP              23h
ad-graphql                 ClusterIP   <IP Address 7>    <none>        4000/TCP,4001/TCP     23h
ad-hydra                   ClusterIP   <IP Address 8>    <none>        19072/TCP             23h
ad-notifications           ClusterIP   <IP Address 9>    <none>        8090/TCP              23h
ad-pulse-ui                ClusterIP   <IP Address 10>   <none>        4100/TCP,4101/TCP     23h
ad-pulsenode-sparkonk8s    ClusterIP   <IP Address 11>   <none>        12003/TCP             21h
ad-sparkstats-sparkonk8s   ClusterIP   <IP Address 12>   <none>        19004/TCP             23h
ad-streaming               ClusterIP   <IP Address 13>   <none>        19005/TCP             23h
  • Expose a service by using the following command.
oc expose <Service name> -n <Pulse Namespace>
oc expose svc ad-pulse-ui -n pulse
  • The above command creates a public URL for the service. To view the URL, use the following command.
oc get route -n <Pulse Namespace>
  • You can access the service directly using the Host, Port, or the public URL generated by the route.
oc get route -n pulse -o wide
NAME             HOST/PORT                                         PATH   SERVICES         PORT               TERMINATION   WILDCARD
accelo-manager   accelo-manager-pulse.apps.os-pnc.acceldata.tech          accelo-manager   http                             None
ad-graphql       ad-graphql-pulse.apps.os-pnc.acceldata.tech              ad-graphql       ad-graphql-4000                  None
ad-pulse-ui      ad-pulse-ui-pulse.apps.os-pnc.acceldata.tech             ad-pulse-ui      ad-pulse-ui-4100                 None