Setup Ingress trên Kubernetes bằng Nginx Controller

Setup Ingress trên Kubernetes bằng Nginx Controller

Trong bài hướng dẫn này, bạn sẽ học được cách làm thế nào để tạo ingress bằng Nginx controller và route traffic vào các deployment.

Dưới đây là mô hình:

Ingress Kubernetes sử dụng Nginx Controller.

Yêu cầu:

  • Kubernetes cluster.
  • kubectl.
  • Admin access tới kubernetes cluster.
  • Và 1 domain trỏ tới ingress controller Load Balancer.

Tạo ingress controller deployment bằng kubectl:

kubectl apply-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

Kiểm tra các pod của ingress controller:

kubectl get pods -n ingress-nginx

Tạo 1 Load Balancer service cho Ingress Controller

vim ingress-nginx.yaml:

kind: Service
apiVersion: v1
metadata:
 name: ingress-nginx
 namespace: ingress-nginx
 labels:
   app.kubernetes.io/name: ingress-nginx
   app.kubernetes.io/part-of: ingress-nginx
spec:
 externalTrafficPolicy: Local
 type: LoadBalancer
 selector:
   app.kubernetes.io/name: ingress-nginx
   app.kubernetes.io/part-of: ingress-nginx
 ports:
   - name: http
     port: 80
     targetPort: http
   - name: https
      port: 443
      targetPort: https

Tạo service ingress Nginx bằng cách sử dụng command kubectl apply:

kubectl apply -f  ingress-nginx.yaml

Kiểm tra service và lấy thông tin IP public mà Load Balancer được cung cấp:

kubectl get svc -n ingress-nginx

Sau đó, map domain với IP public đã nhận được từ câu lệnh trên.

Tạo 1 demo application và tạo nginx ingress trỏ vào application:

Demo application:

Tạo deployments:

vim hello-app.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: hello-app
 namespace: dev
spec:
 selector:
 matchLabels:
   app: hello
 replicas: 3
 template:
   metadata:
     labels:
       app: hello
spec:
 containers:
 - name: hello
    image: "gcr.io/google-samples/hello-app:2.0"

kubectl create -f hello-app.yaml

Tạo service:

vim hello-app-service.yaml

apiVersion: v1
kind: Service
metadata:
 name: hello-service
 namespace: dev
 labels:
   app: hello
spec:
 type: ClusterIP
 selector:
   app: hello
 ports:

 - port: 80
    targetPort: 8080
    protocol: TCP

kubectl create -f hello-app-service.yaml

Tạo Kubernetes Ingress và trỏ vào service hello-app:

vim hello-app-ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: test-ingress
 namespace: dev
spec:
 rules:

 - host: test.apps.example.info
 http:
 paths:

 - backend:
   serviceName: hello-service
   servicePort: 80

kubectl apply -f hello-app-ingress.yaml.