Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine

717
04-05-2023
Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine

Giới thiệu

Kubernetes Ingress cho phép người quản trị định tuyến lưu lượng từ bên ngoài vào các Service cụm Kubernetes. Có thể dùng các tập luật trong ingress để định tuyến lưu lượng HTTP hoặc HTTPS, các tập luật này có thể viết trong Ingress Controller

Bài viết sẽ hướng dẫn cách triển khai Kubernetes

Chuẩn bị

Trước khi bắt đầu, chúng ta cần chuẩn bị:

  • 1 cụm Kubernetes với RBAC. Trong bài viết sẽ sử dụng cụm BKE
  • Công cụ dòng lệnh kubectl trên máy tính cá nhân
  • 1 domain và bản ghi DNS có thể trỏ đến BLB được sử dụng bởi ingress

Bước 1 - Cài đặt dịch vụ web

Trước khi triển khai Ingress Controller, ta sẽ tạo 2 Service mẫu để có thể định tuyến lưu lượng đến Ingress. Service sẽ chạy "http-echo" webserver container, khi có request đến sẽ có một chuỗi văn bản trả về

Ở trên máy cá nhân, tạo file echo1.yaml với vim (hoặc bất cứ trình soạn thảo văn bản nào khác)

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 1.

vim echo1.yaml

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 2.

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 3.

Ta sẽ tạo 1 Service gọi là echo1 sẽ điều hướng lưu lượng đến Pod với nhãn app: echo1. Service sẽ tiếp nhận lưu lượng từ TCP port 80 và điều hướng đến port 5678

Tiếp đến ta sẽ định nghĩa Deployment tên là echo1 để quản lý các Pod với nhãn app: echo1 và mở port 6789 trên container 

Sau đó ta sẽ tạo các tài nguyên kubernetes đó sử dụng lệnh kubectl apply -f echo1.yaml

Lặp lại và tiếp tục tạo dịch vụ echo2 

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 2.

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 3.

Bước 2 - Cài đặt dịch vụ Kubernetes Nginx Ingress Controller

Có nhiều phiên bản nginx ingress controller, trong bài viết sẽ sử dụng phiên bản https://kubernetes.github.io/ingress-nginx/deploy/ được hỗ trợ bởi cộng đồng

Nginx Ingress Controller chưa Pod chạy nginx, trong pod sẽ chạy nginx webserver sẽ theo dõi Kubernetes Control Plane để cập nhật các Ingress Resource. Ingress Resource về cơ bản là danh sách các quy tắc định tuyến lưu lượng tới các dịch vụ backend. Ví dụ, quy tắc của ingress rul có thể điều phối các lưu lượng đến path /web1 sẽ đến backend web1. từ đó ta có thể truy cập vào website web1.xxxxxx.yyy sẽ điều hướng đến dịch vụ backend web1

Bài viết sẽ hướng dẫn triển khai Ingress Controller cho cluster BKE. Ingress Controller sẽ tạo Service Load Balancer được cấp bởi BLB để định tuyến tất cả traffic từ ngoài vào Ingress controller

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/cloud/deploy.yaml

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 4.

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 5.

Sau 1 vài phút chúng ta sẽ có 1 IP public của BLB

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 6.

LB này sẽ nhận lưu lượng từ HTTP và HTTPS trên port 80 và 443 rồi chuyển tiếp xuống Pod Ingress Controller

Bước 3 - Tạo các Ingress Resource

Ta sẽ sử dụng domain quanlm1999.tk

Ta sẽ tạo 2 rule để định tuyến lưu lượng là echo1.quanlm1999.tk đến backend service web1 và echo2.quanlm1999.tk để đến backend web2

Ta sẽ tạo ingress như sau:

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 9.

Sau khi tạo xong Ingress ta sẽ trỏ bản ghi A sử dụng dịch vụ quản lý DNS, trong bài viết sẽ sử dụng trình quản lý DNS của BizflyCloud. Ta sẽ trỏ như sau

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 7.

Ta gọi thử đến dịch vụ

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 8.

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 9.

Bước 4 - Tạo và cấu hình Cert-manager

Trong bài viết ta sẽ cài đặt version v1.11.0 của cert-manager. cert-manager là add-on của Kubernetes cung cấp chứng chỉ TLS từ Let's Encrypt hoặc từ các CA khác và quản lý chu kỳ của các chứng chỉ đó.

Ta cài đặt cert-manager:

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 10.

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 11.

Trước khi cấp chứng chỉ cho 2 domain echo1.quanlm1999.tk và echo2.quanlm1999.tk trong bài biết sẽ sử dụng Let's Encrypt CA. 

Tạo ClusterIssuer để test, ta sẽ dùng letsencrypt-staging để test, vì production giới hạn lượng request, nên khi test ta sẽ dùng staging

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 15.

Tương tự với production:

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 16.

Bước 5 - Phát hành chứng chỉ Let's Encrypt

Để phát hành chứng chỉ Let's encrypt, ta sẽ bổ sung thêm 1 số trường vào ingress

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 17.

Ta theo dõi trang thái với lệnh kubectl describe ingress

Tương tự, theo dõi trạng thái của certificate: kubectl describe certificate echo-tls

sử dụng trình duyệt web, truy cập và ta thấy chứng chỉ cấp bởi Let's Encrypt (Staging)

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 12.

Đối với chứng chỉ Let's Encrypt staging

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 13.

Tương tự, khi thay ingress thành cert-manager.io/cluster-issuer: "letsencrypt-prod", 

Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine - Ảnh 14.

Chứng chỉ đã sử dụng Let's Encrypt 

Kết luận

Bài viết đã hướng dẫn việc cài đặt Nginx ingress kết hợp với cert-manager để cấp chứng chỉ TLS cho 2 domain. 

SHARE