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.