Configure Ingress for Pulse on Kubernetes

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-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 to, and the manager agent connects to

ad-streaming

19005

Streaming service for agents.

ad-pulse-ui

4100

New Pulse UI interface for users.

ad-druid-analyzer

19090

Druid emits data to druid-analyzer

ad-pulse-profiler

19029

Pulse JFR profiler service

ad-alfred

19890

Fingerprinting service for YARN Optimizer

Install Ingress

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

  1. 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.

  1. 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-pulse-ui namespace: PULSE_NAMESPACE spec: rules: - host: "*.acceldata.dvl" http: paths: - path: / pathType: Prefix backend: service: name: ad-pulse-ui 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
  1. Install NGINX Routes. To apply the NGINX Ingress routes, run the following command:

kubectl apply -f nginx-routes.yaml
  1. 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.

  1. 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-pulse-ui 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.

  1. 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

  1. 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-pulse-ui 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
  1. Expose a service by using the following command.

oc expose <Service name> -n <Pulse Namespace>
oc expose svc ad-pulse-ui -n pulse
  1. The above command creates a public URL for the service. To view the URL, use the following command.

oc get route -n <Pulse Namespace>
  1. 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-pulse-ui ad-pulse-ui-pulse.apps.os-pnc.acceldata.tech ad-pulse-ui ad-pulse-ui-4000 None ad-pulse-ui ad-pulse-ui-pulse.apps.os-pnc.acceldata.tech ad-pulse-ui ad-pulse-ui-4100 None