Home Setup Nginx Ingress Controller On Kubernetes
Post
Cancel

Setup Nginx Ingress Controller On Kubernetes

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

1
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.

1
kubectl create ns site

Selanjutnya Buat file deployment.yaml lalu edit seperti berikut.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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.

1
kubectl apply -f deployment.yaml

Cek deployment status

1
kubectl get deployments -n site

Buat file service.yaml lalu edit seperti berikut.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.

1
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

1
2
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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.

1
kubectl apply -f ingress.yaml

Test akses website melalui http://web8.example.com pada browser.

This post is licensed under CC BY 4.0 by the author.