NGINX Ingress Controller adalah komponen yang digunakan dalam arsitektur Kubernetes untuk mengelola dan mengarahkan lalu lintas masuk (ingress) ke layanan-layanan dalam klaster Kubernetes.
Beberapa fungsi utama dari NGINX Ingress Controller seperti:
- Routing dan Load Balancing
- Manajemen SSL/TLS
- Virtual Host Routing
- Path-Based Routing
- Rewrite Rules
- Rate Limiting
- Autoscaling
- Aplikasi Multitenancy
Deploy Nginx Ingress Controller #
Terdapat 2 Nginx ingress controllers yaitu
Pada simulasi ini akan menggunakan Nginx ingress controller dari kubernetes community.
Deploy Nginx ingress controller
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml
Pastikan pods NGINX Ingress Controller running.
# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-mgbf5 0/1 Completed 0 14m
ingress-nginx-admission-patch-xnvnv 0/1 Completed 3 14m
ingress-nginx-controller-79d66f886c-qnzsm 1/1 Running 0 14m
Deploy a Demo Application #
Buat namespace site.
kubectl create ns site
Selanjutnya Buat file deployment.yaml
lalu edit seperti berikut.
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: site
spec:
replicas: 4
selector:
matchLabels:
app: demo
template:
metadata:
creationTimestamp: null
labels:
app: demo
spec:
containers:
- image: nginxdemos/hello
imagePullPolicy: Always
name: hello
ports:
- containerPort: 80
protocol: TCP
restartPolicy: Always
Deploy demosite.
kubectl apply -f deployment.yaml
Cek deployment status
kubectl get deployments -n site
Buat file service.yaml
lalu edit seperti berikut.
apiVersion: v1
kind: Service
metadata:
name: demo-service
namespace: site
spec:
internalTrafficPolicy: Cluster
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: demo
type: ClusterIP
Deploy service.
kubectl apply -f service.yaml
Create Ingress Object for Application #
Buat ingress agar app: demo dapat diakses menggunakan DNS.
Sebelumnya pastikan Anda sudah membuat record pada domain atau subdomain ke tujuan IP node yang menjadi ingress-nginx-controller
kubectl get pods -n ingress-nginx \
-o custom-columns=NAME:.metadata.name,NODE:spec.nodeName
NAME NODE
ingress-nginx-admission-create-5h25b worker2
ingress-nginx-admission-patch-7rjv4 worker1
ingress-nginx-controller-79d66f886c-j5qzc worker1
Buat file ingress.yaml
lalu edit seperti berikut.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-ing
namespace: site
spec:
ingressClassName: nginx
rules:
- host: web8.example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /
pathType: Prefix
Ganti web8.example.com
dengan domain atau subdomain yang telah disetting A record.
Deploy ingress ke cluster.
kubectl apply -f ingress.yaml
Test akses website melalui http://web8.example.com pada browser.