What you’ll need
- A GKE cluster
- An ngrok account.
- kubectl and Helm 3.0.0+ installed on your local workstation.
- The ngrok Kubernetes Operator installed on your cluster.
- A reserved domain, which you can get in the ngrok
dashboard or with the ngrok
API.
- You can choose from an ngrok subdomain or bring your own custom branded
domain, like
https://api.example.com. - This guide refers to this domain as
<NGROK_DOMAIN>.
- You can choose from an ngrok subdomain or bring your own custom branded
domain, like
Ensure kubectl can speak with your cluster
With a Google Kubernetes Engine (GKE) cluster, authentication for kubectl happens with a credential helper. So in-order to deploy the ngrok Kubernetes Operator to your cluster, you’ll need to ensure that you can use the gcloud CLI and that the credential helper is available.
Ensure that you have the gcloud CLI installed and configured with your Google Cloud credentials. You can confirm this works and you’re authenticated correctly by running the following command:
gcloud auth login to authenticate with your Google account.
Next, ensure that the credential helper is available. Run the following command to confirm that the credential helper is available:
Install the ngrok Kubernetes Operator
Now install the ngrok Kubernetes Operator to provide ingress to your services. Check out the Operator installation doc for details on how to use Helm to install with your ngrok credentials.Install a sample application
Create a manifest file (for examplengrok-manifest.yaml) with the following contents. You will need to replace the NGROK_DOMAIN on line 45 with your own custom value. This is the URL you will use to access your service from anywhere. If you’re on a free account, it must be on a static subdomain which you can claim by logging into your account and following the instructions on the claim static subdomain banner. For paid accounts, you can use a custom domain or a subdomain of ngrok.app or ngrok.dev (for example, username-loves-ingress.ngrok.app or k8s.example.com).
showLineNumbers
-
Apply the manifest file to your k8s cluster.
Note: If you get an error when applying the manifest, double check that you’ve updated the
NGROK_DOMAINvalue and try again. -
Access your ingress URL using the subdomain you chose in the manifest file above (that is,
https://my-awesome-k8s-cluster.ngrok.app) to confirm the tinyllama app is accessible from the internet.
Note: The screenshot shows the earlier 2048 sample app. In this guide, you’ll see the tinyllama demo app, but the ingress behavior is the same.
Add authentication to your app
With the Traffic Policy system and theoauth
action, ngrok manages OAuth protection
entirely at the ngrok cloud service, which means you don’t need to add any
additional services to your cluster, or alter routes, to ensure ngrok’s edge
authenticates and authorizes all requests before allowing ingress and access to
your endpoint.
To enable the oauth action, you’ll create a new NgrokTrafficPolicy custom
resource and apply it to your entire Ingress with an annotation. You can also
apply the policy to just a specific backend or as the default backend for an
Ingress—see the documentation on using the Operator with
Ingresses.
-
Edit your existing
ngrok-manifest.yamlmanifest with the following, leaving theServiceandDeploymentas they were. Note the newannotationsfield and theNgrokTrafficPolicyCR. -
Re-apply your
ngrok-manifest.yamlconfiguration. - When you open your demo app again, you’ll be asked to log in via Google. That’s a start, but what if you want to authenticate only yourself or colleagues?
-
You can use expressions and CEL
interpolation to filter out
and reject OAuth logins that don’t contain
example.com. Update theNgrokTrafficPolicyportion of your manifest after changingexample.comto your domain. - Check out your deployed tinyllama app once again. If you log in with an email that doesn’t match your domain, ngrok rejects your request.