Kubernetes Ingress là gì? Cách tạo Kubernetes Ingress bằng NGINX Controller.
Trong môi trường Kubernetes, việc quản lý và kiểm soát việc truy cập vào các dịch vụ bên trong cụm có thể trở nên phức tạp. Kubernetes Ingress là một tài nguyên quan trọng trong hệ thống Kubernetes, cho phép bạn quản lý và điều hướng lưu lượng truy cập từ bên ngoài vào các dịch vụ bên trong cụm. Trong bài viết này, chúng ta sẽ tìm hiểu về Kubernetes Ingress, cơ chế hoạt động của nó và cách sử dụng bộ điều khiển Ingress NGINX để tạo và quản lý Ingress trong môi trường Azure Kubernetes Service (AKS).
Kubernetes Ingress là gì?
Kubernetes Ingress là một tài nguyên quan trọng trong hệ thống Kubernetes, được sử dụng để quản lý và kiểm soát việc truy cập vào các dịch vụ (Services) trong một cụm Kubernetes từ bên ngoài. Ingress cho phép bạn quản lý các luồng lưu lượng truy cập từ internet hoặc các nguồn khác và định tuyến chúng đến các dịch vụ hoặc ứng dụng cụ thể bên trong cụm K8s.
Ingress mở và phân luồng các kết nối HTTP và HTTPS từ bên ngoài k8s cluster vào các services bên trong cluster. Việc phân luồng dữ liệu này được quản lý bởi các "rule" được định nghĩa ở các tài nguyên Ingress trên k8s. Việc thực thi phân luồng dữ liệu được thực hiện bởi Ingress Controller, là một opensource cài đặt trên K8S. Nhiệm vụ của Ingress Controller là nạp các thông tin của các Ingress Resource để thực hiện phân luồng.
Cơ chế hoạt động của Kubernetes Ingress
Tạo tài nguyên Ingress: Đầu tiên, bạn tạo một tài nguyên Ingress trong cụm Kubernetes. Tài nguyên Ingress chứa các quy tắc định tuyến lưu lượng truy cập.
- Ingress Controller: Là thành phần điều khiển chính làm nhiệm vụ điều hướng các request tới các service bên trong k8s. Thường thì Ingress Controller được cài đặt trên K8S và được expose ra ngoài dưới dạng NodePort.
- Ingress Rule: Là một tài nguyên trên K8S. Nó chứa nội dung khai báo rule để điều hướng từ một request tới một service cụ thể trên trong K8S.
- Có nhiều Ingress Controller từ các nhà phát triển khác bạn có thể lựa chọn để cài đặt. Ngoài ra trên k8s cũng hỗ trợ cài đặt nhiều Ingress Controller tùy nhu cầu sử dụng.
Phân loại Kubernetes Ingress
Về cơ bản, Kubernetes Ingress có hai loại chính dưới đây:
1. Ingress Controllers dựa trên Rules (Quy tắc)
Ingress Controllers dựa trên quy tắc sử dụng các quy tắc cụ thể để xác định cách định tuyến lưu lượng truy cập. Các quy tắc này dựa trên các tiêu chí như địa chỉ IP nguồn, tên miền, tiền tố đường dẫn URL, và thông tin HTTP headers. Dựa trên các quy tắc này, Ingress Controller xác định cách điều hướng lưu lượng truy cập đến các dịch vụ hoặc ứng dụng bên trong cụm Kubernetes. Ví dụ về Ingress Controller dựa trên quy tắc bao gồm Nginx Ingress Controller và Traefik.
2.Ingress Controllers dựa trên Annotations (Chú thích)
Ingress Controllers dựa trên chú thích sử dụng chú thích (annotations) được đặt trực tiếp trên tài nguyên Ingress để xác định cách định tuyến lưu lượng truy cập. Thay vì sử dụng quy tắc cụ thể, chú thích chị định tuyến lưu lượng và cấu hình Ingress Controller. Mỗi Ingress Controller có thể hỗ trợ một tập hợp riêng biệt của chú thích. Ví dụ về Ingress Controller dựa trên chú thích bao gồm Kubernetes Nginx Ingress Controller và Contour.
Mỗi loại Ingress Controller có các ưu điểm và hạn chế riêng. Ingress Controller dựa trên quy tắc thường cung cấp kiểm soát linh hoạt hơn với khả năng định tuyến dựa trên nhiều tiêu chí và tùy chỉnh mạnh mẽ. Tuy nhiên, chúng có thể trở nên phức tạp khi có nhiều quy tắc cần quản lý. Ingress Controller dựa trên chú thích thường dễ sử dụng hơn vì bạn có thể cấu hình Ingress bằng cách thêm chú thích vào tài nguyên Ingress, nhưng chúng có thể hạn chế trong việc đáp ứng các yêu cầu cụ thể và kiểm soát lưu lượng chi tiết.
Khi nào bạn nên sử dụng Kubernetes Ingress
Tài nguyên Ingress được khuyến nghị sử dụng khi bạn muốn công khai các dịch vụ trong các cụm Kubernetes sản xuất. Kubernetes Ingress sẽ phát huy công dụng khi bạn cần xác định định tuyến lưu lượng phức tạp và giúp bạn giảm chi phí của các máy cân bằng tải ngoại vi, tận dụng tài nguyên của các nút trong cụm Kubernetes của bạn. Ngoài ra, Ingress còn được sử dụng khi bạn muốn quản lý định tuyến lưu lượng trong Kubernetes và tránh phải quản lý một hệ thống ngoài khác.
Mối quan hệ giữa Ingress, Load Balancer và NodePort
Tất cả các yếu tố - Ingress, LoadBalancer và NodePort - liên quan đến cách bạn công khai và quản lý lưu lượng truy cập trong môi trường Kubernetes. NodePort cho phép lưu lượng từ bên ngoài vào các nút trong cụm. LoadBalancer tạo một cân bằng tải ngoại vi để quản lý lưu lượng đến các dịch vụ. Ingress, trong khi không cung cấp cân bằng tải ngoại vi, cho phép quản lý định tuyến lưu lượng dựa trên nhiều tiêu chí. Ingress thường sử dụng NodePort hoặc LoadBalancer để điều hướng lưu lượng đến các dịch vụ hoặc ứng dụng cụ thể. Mối quan hệ giữa chúng là Ingress sử dụng NodePort hoặc LoadBalancer để điều hướng lưu lượng và quản lý định tuyến.
Bộ điều khiển giúp thiết lập Kubernetes ingress
Để thiết lập Ingress trong Kubernetes (K8S), bạn cần cấu hình một bộ điều khiển Ingress. Chúng không được cài đặt mặc định trong cụm và phải được cài đặt riêng lẻ. Bộ điều khiển Ingress thường là một máy chủ proxy web ngược trong cụm.
Có nhiều bộ điều khiển Ingress khả dụng, tất cả đều có các tính năng khác nhau. Tài liệu chính thức liệt kê các bộ điều khiển Ingress có sẵn. Một số bộ điều khiển phổ biến bao gồm:
- AKS Application Gateway Ingress Controller: là một bộ điều khiển Ingress cấu hình cho Azure Application Gateway.
- GKE Ingress Controller for Google Cloud: cho Google Cloud.
- AWS Application Load Balancer Ingress Controller: cho Amazon Web Services.
- HAProxy Ingress: là một bộ điều khiển Ingress cho HAProxy.
- Istio Ingress: là một bộ điều khiển Ingress dựa trên Istio.
- NGINX Ingress Controller for Kubernetes: hoạt động với máy chủ web NGINX (như một proxy).
- Traefik Kubernetes Ingress provider: là một bộ điều khiển Ingress cho proxy Traefik.
Cách cài đặt và cấu hình bộ điều khiển Ingress cụ thể sẽ khác nhau tùy thuộc vào bộ điều khiển bạn chọn sử dụng. Hãy kiểm tra tài liệu và hướng dẫn của bộ điều khiển cụ thể mà bạn đang sử dụng để biết thêm thông tin chi tiết về cách làm điều này.
Hướng dẫn tạo Kubernetes Ingress bằng bộ điều khiển Nginx
NGINX là một bộ điều khiển Ingress phổ biến, trong nội dung này, Bizfly Cloud sẽ hướng dẫn bạn cách thiết lập nó với dịch vụ Kubernetes Azure. Chúng ta sẽ thiết lập hai dịch vụ web đơn giản và sử dụng Ingress NGINX để điều hướng lưu lượng mạng tương ứng.
Bạn có thể cài đặt Ingress với NGINX theo các bước sau đây:
Bước 1 - Khởi động cụm AKS và kết nối vào nó Để làm điều này, hãy truy cập tài nguyên cụm AKS trong Azure Portal và nhấp vào "connect". Các lệnh cần thiết để kết nối thông qua giao diện dòng lệnh của bạn bằng Azure CLI sẽ được hiển thị.
Bước 2 - Cài đặt bộ điều khiển Ingress NGINX Nó sẽ cài đặt bộ điều khiển trong namespace ingress-nginx, tạo namespace đó nếu nó chưa tồn tại.
Bước 3 - Kiểm tra xem pod bộ điều khiển Ingress đã đang chạy
Bước 4 - Kiểm tra xem bộ điều khiển Ingress NGINX đã được gán một địa chỉ IP công cộng Truy cập địa chỉ IP này sẽ hiển thị trang lỗi 404 của NGINX. Điều này xảy ra vì chúng tôi chưa thiết lập bất kỳ quy tắc định tuyến nào cho các dịch vụ của chúng tôi.
Bước 5 - Thiết lập ứng dụng web cơ bản để kiểm tra bộ điều khiển Ingress mới của chúng tôi Trước hết, chúng ta cần thiết lập một bản ghi DNS trỏ đến địa chỉ IP Ngoại trừ chúng ta đã tìm thấy trong bước trước.
Bước 6 - Truy cập địa chỉ web Bạn sẽ thấy "It works!" được hiển thị, xác nhận rằng bộ điều khiển Ingress đang định tuyến lưu lượng mạng đúng cách đến ứng dụng demo.
Bước 7 - Thiết lập thêm hai ứng dụng web Bây giờ chúng tôi sẽ thiết lập thêm hai ứng dụng web và điều hướng lưu lượng mạng giữa chúng bằng cách sử dụng NGINX
Chúng tôi sẽ tạo hai tệp YAML bằng các ứng dụng demo từ tài liệu chính thức của Azure.
Bước 8 - Cấu hình Ingress để định tuyến lưu lượng giữa hai ứng dụng Chúng tôi sẽ thiết lập định tuyến dựa trên đường dẫn để điều hướng lưu lượng mạng đến các ứng dụng web phù hợp dựa trên URL mà người dùng nhập.
Kết luận
Kubernetes Ingress là một công cụ quan trọng trong hệ thống Kubernetes, giúp quản lý và điều hướng lưu lượng truy cập vào các dịch vụ bên trong cụm một cách hiệu quả. Việc hiểu cơ chế hoạt động của Ingress và lựa chọn bộ điều khiển phù hợp như Ingress Controller NGINX là quá trình quan trọng trong việc xây dựng và quản lý môi trường Kubernetes của bạn.
Ingress cho phép bạn tạo ra các quy tắc định tuyến linh hoạt, giúp kiểm soát lưu lượng truy cập và quản lý việc tiết lộ dịch vụ trong môi trường sản xuất. Khi kết hợp Ingress với các bộ điều khiển phù hợp, bạn có thể tận dụng toàn bộ tiềm năng của Kubernetes và đồng thời giảm chi phí quản lý hệ thống.
Với việc cài đặt bộ điều khiển Ingress NGINX và tạo tài nguyên Ingress trong môi trường AKS, việc thiết lập và quản lý định tuyến lưu lượng truy cập trở nên đơn giản. Chúng ta đã tìm hiểu về việc cài đặt, kiểm tra và cấu hình cụm AKS để sử dụng Ingress.
Khi bạn đã hiểu sâu về Kubernetes Ingress và triển khai nó trong môi trường của mình, bạn sẽ có sự kiểm soát cao hơn đối với việc quản lý và điều hướng lưu lượng truy cập, đảm bảo rằng ứng dụng của bạn hoạt động một cách hiệu quả trong cụm Kubernetes.