Skip to content

ngrok

Intro

The ngrok Ingress Controller for Kubernetes is an official open-source controller for adding public and secure ingress traffic to your k8s services. You can think of the ngrok Ingress Controller as ngrok packaged as an idiomatic k8s controller — deployed via a simple helm chart, configurable via standard k8s Ingress object (using the kind: Ingress construct), and compatible with k8s best practices.

This recipe describes how customers can standardize the configuration, deployment and lifecycle management of the ngrok Ingress Controller for Kubernetes as a custom system add-on across their fleet of clusters.

You can also watch a video of this in action.


What Will You Do

In this exercise,

  • You will create a customized ngrok add-on using ngrok's official Helm chart
  • You will use the add-on in a custom cluster blueprint
  • You will then apply this cluster blueprint to a managed cluster
  • You will then deploy a test workload to use the ngrok ingress controller

Assumptions

  • You have already provisioned or imported one or more Kubernetes clusters using the controller.

Step 1: Create ngrok Keys

In this step, you will use the ngrok console to retrieve an Authtoken and an API key which will be used by the controller to communicate with the ngrok service.

  • Access the ngrok Dashboard with your Pro account.
  • Click Your Authtoken on the left side of the window. Copy the Authtoken to a text editor for later use.
  • Click API and follow the instructions to create a new API key. Copy the API key to a text editor for later use.

Step 2: Create Custom Values File

In this step, you will create a custom values file for the ngrok Helm chart.

  • Save the below YAML to a file named ngrok-values.yaml
  • Update the API Key and Authtoken values with the values obtained from the previous step
credentials:
  apiKey: <API_KEY>
  authtoken: <AUTHTOKEN> 

Step 3: Create Namesapce

You will now create a managed namespace from the controller for the ngrok resources.

  • Ensure you are logged into the console
  • In your project, navigate to Infrastructure -> Namespaces
  • Click on New Namespace
  • Enter ngrok-ingress-controller for the name
  • Select Wizard for Type
  • Click Save

Create Namespace

  • Click "Save & Go To Placement"
  • Select one of your clusters for placement
  • Click "Save & Go To Publish"
  • Click "Publish"
  • Click "Exit"

Step 4: Create Addon

In this step, you will create a custom cluster add-on from the Catalog. The add-on will then be used in a custom cluster blueprint.

  • In the Rafay console, navigate to Catalog in the left side tree
  • Search for "kubernetes-ingress-controller"
  • Click on kubernetes-ingress-controller

Create Add-On

  • Click Create Add-On
  • Enter ngrok for the name of the add-on
  • Select the previously created namespace
  • Click Create

Create Add-On

  • Enter v1 for the version name
  • Click Upload Files under the Values File(s) section
  • Select the previously saved ngrok-values.yaml file
  • Click Save Changes

Create Add-On


Step 5: Create Blueprint

In this step, you will create a custom cluster blueprint which contains the previously created addon.

  • In the Rafay console, navigate to Infrastructure -> Blueprints in the left side tree
  • Click New Blueprint
  • Enter ngrok for the name of the blueprint
  • Click Save

Create Blueprint

  • Enter v1 for the version name
  • Select minimal for the base blueprint

Create Blueprint

  • Click Configure Add-Ons
  • Click the + symbol to add the ngrok add-on to the blueprint
  • Click Save Changes

Create Blueprint

  • Click Save Changes

Step 6: Apply Bluprint

In this step, you will apply the previously created blueprint to the cluster. Applying the blueprint will install the ngrok ingress controller.

  • In the Rafay console, navigate to Infrastructure -> Clusters in the left side tree
  • Click the gear icon on your cluster
  • Select Update Blueprint
  • Select ngrok for the blueprint and v1 for the version
  • Click Save and Publish

Apply Blueprint

The blueprint will begin being applied to the cluster

Apply Blueprint

Afer a short period of time, the blueprint will be applied to the cluster.

Apply Blueprint

  • Click Exit

Step 7: Create ngrok Edge

In this step, you will create an edge in the ngrok console. The edge endpoint will be the URL that is used to access the workload via the ingress controller.

  • Access the ngrok Dashboard with your Pro account.
  • Click Cloud Edge -> Edges in the left side tree
  • Click New Edge
  • Click Create HTTPS Edge
  • Copy the endpoint for use in a later step

Create Edge


Step 8: Deploy Workload

In this step, you will deploy a test workload that will use the ngrok ingress controller. You will then be able to use the ngrok service to access the test workload via a secure channel.

  • Save the following YAML to a file named ngrok-workload.yaml
apiVersion: v1
kind: Service
metadata:
  name: game-2048
  namespace: ngrok-ingress-controller
spec:
  ports:
    - name: http
      port: 80
      targetPort: 80
  selector:
    app: game-2048
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: game-2048
  namespace: ngrok-ingress-controller
spec:
  replicas: 1
  selector:
    matchLabels:
      app: game-2048
  template:
    metadata:
      labels:
        app: game-2048
    spec:
      containers:
        - name: backend
          image: alexwhen/docker-2048
          ports:
            - name: http
              containerPort: 80
---
# ngrok Ingress Controller Configuration
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: game-2048-ingress
  namespace: ngrok-ingress-controller
spec:
  ingressClassName: ngrok
  rules:
    - host: NGROK_DOMAIN
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: game-2048
                port:
                  number: 80
  • Update NGROK_DOMAIN in line number 45 of the file with the endpoint value obtained from the previous step. Be sure to remove "https://" from the endpoint

  • In the Rafay console, navigate to Applications -> Workloads in the left side tree

  • Click New Workload -> Create New Workload
  • Enter ngrok-workload for the name
  • Select K8s YAML for the package type
  • Select Upload files manually
  • Select ngrok-ingress-controller for the namespace
  • Click Continue

Create workload

  • Click Choose File
  • Select the previously saved ngrok-workload.yaml file
  • Click Save and Go To Placement
  • Select the cluster to deploy the workload to
  • Click Save and Go To Publish
  • Click Publish to deploy the workload

Create workload

  • Click Exit

Step 9: Verify Workload

In this step, you will verify that the previously deployed workload is running and can be accessed from the ngrok endpoint.

  • In the Rafay console, navigate to Infrastructure -> Clusters in the left side tree
  • Click kubectl on your cluster
  • Enter the following command:
kubectl get ingresses --namespace=ngrok-ingress-controller

You will see something similar to the following screenshot.

Verify Workload

Notice that the "Hosts" value is the same value of you edge endpoint.

  • Enter the edge endpoint/Hosts value into a web browswer to access the test workload through the ngrok service.

Verify Workload


Recap

Congratulations! You have successfully created a custom cluster blueprint with the ngrok kubernetes ingress controller as a custom add-on. You can now use this blueprint on as many clusters as you require.