Skip to content
Go back

Tìm hiểu về Ingress network

Updated:  at  06:35 AM

Ingress là gì, Ingress resource khác gì với Service type là LoadBalancer?

Trong kubernetes, Ingress là một loại resource cho phép client truy cập vào Service resource từ bên ngoài cụm. Nghe qua thì tương đối giống với Service có type là LoadBalacner (đã tìm hiểu rõ ở phần Service Network), rõ hơn chúng ta sẽ có ví dụ sau: triển khai 02 ứng dụng worker và api như diagram dưới đây:

Nếu expose 02 ứng dụng worker application và api application ra ngoài cho client có thể truy cập được, thì cần phải triển khai 02 Service type LoadBalancer cho mỗi ứng dụng đó.

Cách này có thể chấp nhận được, tuy nhiên trên môi trường Cloud thì cần phải ít nhất 02 public IP cho mỗi LoadBalancer Service ở trên. Chưa kể đến việc chúng ta chỉ cần duy nhất một public IP cấu hình DNS server cho cả hệ thống, thì việc cần 02 public IP sẽ tốn thêm tiền cho dịch vụ Cloud.

Table of contents

Open Table of contents

Vì vậy Ingress resource đã được tạo ra để giải quyết vấn đề này

Thay vì phải cần đến 02 Service type LoadBalancer (tốn đến 02 public IP) thì chúng ta chỉ có 01 resource duy nhất là Ingress (có duy nhất 01 public IP).

Ingress sẽ làm nhiệm vụ routing kết hợp với cân bằng tải giúp cho các request từ client đến các Service bên trong cụm, ngoài ra đối với Ingress còn có rất nhiều các tính năng khác như cấu hình domain, cấu hình TLS, authentication,…

Ingress resource sẽ cần phải kết hợp với Service resource có type là NodePort, flow của Ingress sẽ như ví dụ dưới đây:

# Deployment
---
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
---
# Service
---
kind: Service
metadata:
  name: my-service
  labels:
    app: nginx
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
---
#Ingress
---
spec:
  rules:
    - host: a.domain.com
      http:
        paths:
          - backend:
              serviceName: my-service
              servicePort: 80

Nguyên lý hoạt động của Ingress

Thực chất Ingress resource mà chúng ta khai báo trong kubernetes chỉ là một tệp config được khai báo, tệp config này sau đó sẽ được apply vào Ingress Controller mà chúng ta sử dụng!

Kubernetes hỗ trợ Ingress Controller dưới dạng một interface mà chúng ta có thể dynamic thay đổi nó với Ingress Controller Provider phù hợp, ví dụ như:

Đối với mỗi một Ingress Controller Provider khác nhau thì có những tính năng, hỗ trợ khác nhau tuỳ theo nhu cầu sử dụng. Để cân nhắc hơn các lựa chọn sử dụng Ingress Controller cho một dự án, xem so sánh của chúng tại đây: https://blog.flant.com/comparing-ingress-controllers-for-kubernetes.

Ingress Tutorial

Tìm hiểu thêm về K8s Networking

Tham Khảo


Suggest Changes

Next Post
Tìm hiểu về Pod network