Prerequisites
kubectlaccess to your io.net Kubernetes Cluster.Helm 3.xinstalled.- 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.| Key Factor | Deployment + Service IPs | DaemonSet |
|---|---|---|
| Setup Complexity | Medium | Simple |
| Scalability | High, supports flexible scaling | Limited, one pod per node |
| High Availability | Requires manual IP management | Built-in with multiple nodes |
| Resource Usage | Configurable | Fixed per node |
| Best For | Large-scale applications | Simple deployments, edge cases |
- Option 1
- Option 2
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.
| Pros | Cons |
|---|---|
| Automatic load balancing across ingress controllers. | Node failures impact the assigned public IPs. |
| No host port conflicts. | Public IPs must be managed manually. |
| Ingress controllers can scale flexibly. | No automatic failover without additional tools. |
| Cleaner setup for most applications. |
Step-by-Step Setup:
1
Install NGINX Ingress Controller as a Deployment
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/
cert-manager with Let’s Encrypt (Recommended)
Example for Cloudflare with API Token (Recommended)
Example for Cloudflare with API Key
Troubleshooting
Health Checks
Check Ingress Controller Status
Check Ingress Controller Status
Check Ingress Resources
Check Ingress Resources
Common Issues and Solutions
DNS Not Resolving
DNS Not Resolving
SSL Certificate Issues
SSL Certificate Issues
Application Not Accessible
Application Not Accessible
High Resource Usage
High Resource Usage
Debug Commands
Debug Commands