Skip to main content
This guide provides a comprehensive overview of how to expose applications to the internet on io.net Kubernetes Clusters using an ingress controller. It details two supported deployment approaches, outlines their respective advantages and trade-offs, and explains how DNS can be automated with ExternalDNS. The guide also covers SSL certificate management using cert-manager to support secure application delivery.

Prerequisites

  • kubectl access to your io.net Kubernetes Cluster.
  • Helm 3.x installed.
  • Domain ownership and DNS management access.
  • Basic understanding of Kubernetes concepts (Pods, Services, Ingress).
  • For ExternalDNS: API credentials for your DNS provider.

Selecting your Method

This table outlines the key factors to consider when choosing between Deployment + Service IPs and DaemonSet.

Option 1: Ingress Controller as a Deployment with Service IPs

The ingress controller is deployed as a scalable Kubernetes deployment and exposed via a LoadBalancer Service with manually assigned external IP addresses.Incoming traffic is automatically load-balanced across ingress pods. This approach is fully compatible with ExternalDNS.

Flow overview:

How it works:

  • Service Type: LoadBalancer (required for ExternalDNS compatibility).
  • External IPs: Manually assigned and mapped to the nodes where ingress pods are scheduled.
  • DNS Management: ExternalDNS monitors the LoadBalancer Service and automatically creates DNS records that point to the configured external IPs.

Step-by-Step Setup:

1

Install NGINX Ingress Controller as a Deployment

The Pod Security Admission plugin is enabled by default in all io.net Kubernetes clusters to enforce Pod Security Standards and enhance baseline cluster security.You may override Pod Security Admission settings at the namespace level when necessary. This can be useful for workloads such as ingress controllers or monitoring solutions that require less restrictive security policies.However, the recommended approach is to adapt your applications to run securely by configuring an appropriate podSecurityContext.
The ingress controller is configured to deploy only on worker nodes with the worker-node=true label.
Optional: add Tolerations if your worker nodes have taints:--set 'controller.tolerations[0].operator=Exists'
Optional: add Pod Anti-Affinity to ensure pod replicas are scheduled on different nodes (only if you have sufficient worker nodes):--set 'controller.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].labelSelector.matchLabels.app\.kubernetes\.io/name=ingress-nginx'--set 'controller.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].topologyKey=kubernetes.io/hostname'
2

Assign Public IPs to Ingress Nodes

Edit the Service configuration so that Public IPs are assigned only from nodes where ingress pods are running.
This command identifies the nodes currently running ingress controller pods and assigns their external IP addresses to the LoadBalancer Service. This allows ExternalDNS to correctly detect the service endpoints and manage the corresponding DNS records.
3

Update DNS Records

Point your domain to the Service’s EXTERNAL-IP values shown by kubectl get svc -n ingress-nginx, or follow the ExternalDNS Guide.
4

Deploy Applications with Ingress

Deploy your applications and configure ingress resources to handle routing to the appropriate services.

SSL/TLS Certificate Management

When exposing applications to the internet through a Kubernetes ingress controller, SSL/TLS certificates are required to securely terminate HTTPS traffic. cert-manager automates the issuance and renewal of certificates from Let’s Encrypt, integrating directly with Kubernetes Ingress resources to provide end-to-end HTTPS without manual certificate management. In the setup below, cert-manager is installed in the cluster and configured to use a DNS-01 challenge, which is well suited for internet-facing applications, wildcard domains, and environments where ingress traffic reaches services through public IPs. The following examples show how to install cert-manager and configure it with Cloudflare as the DNS provider. Read more: https://cert-manager.io/docs/configuration/acme/dns01/cloudflare/

Example for Cloudflare with API Key

For an end-to-end HTTPS application example, refer to Quick Start: Hello World with HTTPS.

Troubleshooting

Health Checks

Common Issues and Solutions