Sử dụng Kubernetes-Ingress (NGINX Ingress Controller) để định tuyến nhiều service khác nhau

Tram Ho

Tiếp nối phần trước sau khi CleanUp thì chúng ta có thể bắt đầu luôn với bài viết này.

Trước hết đa phần thông tin kind của file .yaml khác như ServiceAccount, ConfigMap… đều thuộc diện nâng cao hơn, ở trong khuôn khổ bài viết này chỉ mang tính ăn sổi và dùng thư viện hỗ trợ là kubernetes-ingress.

Chúng ta sẽ dùng kubernetes-ingress và phiên bản của của bài viết này là v1.6 nhé ?

ví dụ minh họa deploy air-viewer trên kubernetes sẽ được miêu tả chi tiết trong tương lai ở bài viết khác.

Thế nào là Ingress?

Ingress là resource Kubernetes cho phép định tuyến cấu hình Loadbalancer HTTP cho các ứng dụng chạy trên Kubernetes, được đại diện bởi một hoặc nhiều Dịch vụ. Một bộ loadbalancer như vậy là cần thiết để cung cấp các ứng dụng đó cho các máy khách như browser trình duyệt chúng ta truy cập bên ngoài cụm Kubernetes.

VÍ dụ

  • service A: chúng ta muốn chạy trên domain example.com/svcA
  • service B: chúng ta muốn chạy trên domain example.com/svcB
    Bạn này xài traefik rồi chắc sẽ quen thuộc cái này, nhưng traefik hiện tại là 2.0 rất ít tài liệu và đang trong giai đoạn phát triển documents nên việc tích hợp với kubernetes thì mình nghĩ nên sử dụng traefik 1.7

Thế nào là Ingress Controller?

Ingress Controller là một ứng dụng chạy trong một cluster và sử dụng cấu hình LoadBalancer HTTP theo tài nguyên Ingress. Loadbalancer này có thể là chạy bằng phần mềm trong cluster, Loadbalancer phần cứng hoặc là Loadbalancer dịch vụ cloud bên ngoài. Với mỗi LoadBalancer khác nhau đòi hỏi phải thực hiện Ingress Controller khác nhau.

Trong trường hợp này, Ingress Controller được triển khai theo dạng phần mềm.

Create a Namespace, a SA, the Default Secret, the Customization Config Map, and Custom Resource Definitions

Tạo một namespace và một service account cho Ingress controller:

Đây sẽ tạo namespace nginx-ingress và ServiceAccout bên trong namespace nginx-ingress.

Tạo một secret với chứng chỉ TLS và key cho server mặc định NGINX:

tls.crttls.key nên được thay thế và tạo cho chính domain của bạn, cái này mình vẫn dùng chứng chỉ mặc định của Nginx

Ngoài ra server mặc định của Nginx sẽ return

nếu tất cả các requests đến domains ko tồn tại trong rule Ingress.

Tạo một config map cho tùy biến NGINX configuration

Customize config có thể đọc chi tiết ở đây . 3 cái trên mình config thêm 1 số quy tắc thôi, các bạn có thể có thể uncomment nó đi hoặc xóa.

Tạo custom resource definitions cho VirtualServer và VirtualServerRoute

Configure RBAC

RBAC chúng ta có thể thấy luôn ở file yaml dưới đây chính là cấp quyền nginx-ingress nó kiểm soát đối với kurbenetes

Nếu RBAC được bật trong cluster, hãy tạo vai trò cluster và liên kết nó với ServiceAccount, được tạo ở Bước 1 của phần trên

Deploy the Ingress Controller

Chúng ta có 2 lựa chọn để triển khai Ingress Controller

  • Deployment: Nếu bạn có kế hoạch thay đổi số lượng Ingress controller replicas
  • DaemonSet: Triển khai Ingress controller trên mỗi Node hoặc các node con (mình sẽ dùng cái này)

Cách Deamon-Set

để enable báo cáo trạng thái của ingress thì chúng ta uncomment 5 dòng cuối.

Truy cập được vào Ingress Controller

Sẽ có 2 cách browser client truy cập. Cách thứ nhất có thể dùng kiểu NodePort sẽ để Nginx-Ingress chạy cùng với các Worker-Node (không dùng loadbalancer của các service như AWS, Gcloud, Azure… ). Cách dùng NodePort này không nên dùng trực tiếp đối với các serivces ngoài ingress này nhé vì an toàn bảo mật ở trong bài viết trước đã đề cập.

Cách thứ 2 dùng kiểu LoadBalancer của AWS và Googe Cloud kết hợp Nginx Ingress. Cách này mình sẽ nghiên cứu tiếp, do tài khoản mastercard của mình hết tiền nên ko có cách nào thực hành lại được, khi nào có kinh phí thì sẽ thực hiện ví dụ này.

Example Deploy Nginx after install Ingress

2 web service coffee và tea và ta sẽ cho chúng nó dùng chung 1 Host là framgia2c.mylabserver.com của worker Node 1

tiếp theo tạo chứng chỉ secret SSL dùng chung với chứng SSL đã tạo cho server nginx default để return 404 not found.

Ingress resource

Các quy tắc đường dẫn /tea sẽ đi vào service của tea, /coffee sẽ đi vào service của coffee. còn / sẽ đi vào server nginx default 404 not found

Bây giờ chúng ta có thể truy cập vào địa chỉ https://framgia2c.mylabserver.com/tea, https://framgia2c.mylabserver.com/coffee để thấy thông tin truy cập từ private IP đến tên của server private

Kết luận

Các Doimain trên kia và cả server là account công ty cấp nhưng chỉ phục vụ mục đích học tập, nghiên cứu nên server sẽ tự động auto shutdown khoảng 6 tiếng nếu không dùng

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo