Tìm hiểu về Ingress network

thuongnn
4 min readNov 25, 2021

--

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 workerapi như diagram dưới đây:

Nếu expose 02 ứng dụng worker applicationapi 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.

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

Tham Khảo

--

--

thuongnn
thuongnn

Written by thuongnn

An engineer who is young, talented, creative, passionate in working, and always puts effort into self-improving knowledge and skills in the IT field.

No responses yet