Scenario
You have a Kubernetes service and want to expose it using a custom domain (e.g., myapp.example.com). This requires configuring an Ingress controller and setting up DNS properly.
Solution: Using Ingress with a Custom Domain
An Ingress resource allows HTTP and HTTPS traffic routing to your services based on defined rules.
Example: NGINX Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app
port:
number: 80
Steps to Configure:
- Deploy an Ingress Controller (e.g., NGINX, Traefik, HAProxy).
- Create an Ingress Resource (as shown above).
- Configure DNS: Add an A record pointing
myapp.example.comto your cluster’s external IP.
Alternative Solutions
Using Traefik
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app
port:
number: 80
Using HAProxy Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app
port:
number: 80
Conclusion
Using an Ingress controller is an effective way to expose services with a custom domain in Kubernetes. Choosing between NGINX, Traefik, or HAProxy depends on your specific needs, such as ease of configuration, performance, and feature set.