Sunday, September 29, 2024

Træfik trong Kubernetes Cluster

-

Træfik là một bộ điều khiển lưu lượng dựa trên máy chủ web ngược (reverse proxy) và trình điều khiển bộ định tuyến cho hệ thống phân tán. Træfik có thể được cấu hình để làm việc với Kubernetes và điều hướng lưu lượng cho các ứng dụng chạy trên các nút trong cụm Kubernetes.

Để triển khai Træfik trong Kubernetes, bạn có thể sử dụng một số công cụ như Helm hoặc định nghĩa các tài nguyên Kubernetes thủ công. Sau khi triển khai, bạn có thể cấu hình Træfik để lắng nghe trên một hoặc nhiều port, và sử dụng các địa chỉ IP hoặc tên miền để điều hướng lưu lượng đến các ứng dụng trong Kubernetes.

Bạn cũng có thể sử dụng Træfik để tự động cấu hình và cài đặt các chứng chỉ SSL cho các ứng dụng trong Kubernetes, bằng cách sử dụng các tính năng của Træfik về ACME (Automatic Certificate Management Environment). ACME là một giao thức để tự động yêu cầu và cài đặt các chứng chỉ SSL được cung cấp bởi các nhà cung cấp dịch vụ như Let’s Encrypt. Cert Manager hỗ trợ ACME v2, giao thức này được cung cấp bởi Let’s Encrypt và nhiều nhà cung cấp dịch vụ SSL khác.

Khi sử dụng ACME, Cert Manager sẽ tự động yêu cầu và cài đặt chứng chỉ SSL cho bạn. Để làm được điều này, bạn cần cấu hình một ClusterIssuer hoặc một Issuer hỗ trợ ACME và chỉ định thông tin tài khoản ACME của bạn.

Sau khi bạn triển khai một ClusterIssuer hoặc Issuer hỗ trợ ACME và đặt các chứng chỉ SSL cho ứng dụng của bạn, Cert Manager sẽ tự động làm mới chúng trước khi chúng hết hạn. Bạn có thể xem thông tin về các chứng chỉ SSL đang được quản lý bởi Cert Manager bằng cách sử dụng lệnh kubectl get certificate.

Cả hai ứng dụng Træfik và Nginx Ingress đều là các Ingress Controller, được sử dụng để quản lý lưu lượng truy cập vào các ứng dụng chạy trên Kubernetes cluster. Tuy nhiên, Træfik và nginx ingress có một số khác biệt nhất định:

  • Cấu hình: Træfik sử dụng cấu hình tĩnh hoặc động, còn nginx ingress chỉ hỗ trợ cấu hình tĩnh.
  • Tính năng: Træfik có thể hỗ trợ đa nền tảng, định tuyến dựa trên thẻ và hỗ trợ nhiều bộ ghi DNS để giải quyết các địa chỉ IP động, trong khi nginx ingress không có tính năng này.
  • Hiệu suất: Træfik có hiệu suất tốt hơn khi so sánh với nginx ingress và nó có thể tự động cân bằng tải đối với các pod trong một deployment.

Tùy thuộc vào nhu cầu và yêu cầu của dự án, Træfik hoặc nginx ingress có thể là một lựa chọn tốt cho việc quản lý lưu lượng truy cập vào ứng dụng chạy trên Kubernetes cluster.

Trong thực tế, cả Træfik và Nginx Ingress đều được sử dụng rộng rãi trong Kubernetes, và cả hai đều có những ưu điểm và hạn chế riêng. Tuy nhiên, Træfik được coi là một giải pháp nổi bật hơn trong Kubernetes vì nó được thiết kế đặc biệt cho môi trường container, có khả năng tích hợp với các công cụ như Kubernetes API và Consul, hỗ trợ nhiều khả năng định tuyến và kết nối, cũng như có khả năng tự động phát hiện và cấu hình các bản vá bảo mật cho các ứng dụng chạy trong môi trường container. Tuy nhiên, điều quan trọng là lựa chọn giải pháp phù hợp với nhu cầu của mỗi tổ chức và đảm bảo tính ổn định và bảo mật cho hệ thống của mình.

Bạn cũng có thể cài đặt cả hai Træfik và nginx ingress trong cùng một cluster Kubernetes. Tuy nhiên, việc sử dụng cả hai công cụ có thể gây ra sự mâu thuẫn trong việc quản lý tài nguyên và định tuyến traffic. Vì vậy, bạn nên cân nhắc việc sử dụng một trong hai công cụ để giảm thiểu sự phức tạp và tối ưu hóa quản lý của mình.

Để triển khai Træfik trong Kubernetes cluster, chúng ta có thể thực hiện các bước sau:

  1. Cài đặt Træfik:

Chúng ta có thể cài đặt Træfik trên Kubernetes cluster bằng cách sử dụng Helm Chart hoặc triển khai bằng tay bằng cách tạo các tài nguyên Kubernetes. Nếu sử dụng Helm Chart, chúng ta có thể sử dụng lệnh sau để cài đặt Træfik:

Thêm repo Træfik.

helm repo add traefik https://helm.traefik.io/traefik
helm repo update

Chạy lệnh sau để cài đặt Træfik helm install traefik traefik/traefik.

$ helm install traefik traefik/traefik
NAME: traefik
LAST DEPLOYED: Mon May 15 16:12:03 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Traefik Proxy v2.10.1 has been deployed successfully
on default namespace !

Nếu bạn muốn sử dụng namespace khi triển khai Træfik bằng Helm, bạn hãy tạo namespace mới bằng lệnh kubectl create ns traefik và sau đó bạn có thể sử dụng tùy chọn --namespace và chỉ định tên của namespace trong câu lệnh Helm. Ví dụ:

$ helm install traefik traefik/traefik --namespace traefik
NAME: traefik
LAST DEPLOYED: Mon May 15 16:20:38 2023
NAMESPACE: traefik
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Traefik Proxy v2.10.1 has been deployed successfully
on traefik namespace !

Nếu triển khai bằng tay, chúng ta có thể tạo một Deployment, một Service và một ConfigMap để cấu hình Træfik.

Xác minh cài đặt thành công bằng lệnh kubectl get pod -n <namespace>.

$ kubectl get po -n traefik
NAME                       READY   STATUS    RESTARTS   AGE
traefik-764c566967-xjcxz   1/1     Running   0          101s
  1. Thiết lập IngressRoute:

Chúng ta cần thiết lập IngressRoute để định tuyến lưu lượng truy cập đến các ứng dụng trong Kubernetes cluster. IngressRoute sẽ chỉ định các quy tắc định tuyến cho các URL và thiết lập TLS để cung cấp mã hóa cho lưu lượng truy cập.

Dưới đây là một ví dụ về cách thiết lập IngressRoute trong Traefik:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: my-ingressroute
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`example.com`) && PathPrefix(`/`)
    kind: Rule
    services:
    - name: my-service
      port: 80

Trong đoạn code trên, chúng ta định nghĩa một IngressRoute với tên là my-ingressroute. IngressRoute này sử dụng entry point là web, và phân phối traffic cho service my-service trên port 80. Nếu địa chỉ host trên request là example.com và path là /, traffic sẽ được phân phối đến my-service trên port 80.

  1. Cấu hình Træfik để sử dụng Let’s Encrypt:

Træfik hỗ trợ tích hợp với Let’s Encrypt để tạo và quản lý chứng chỉ SSL/TLS. Chúng ta cần cấu hình Træfik để sử dụng Let’s Encrypt và thêm các thông tin xác thực để yêu cầu chứng chỉ.

Để cấu hình Træfik sử dụng Let’s Encrypt, bạn cần thực hiện các bước sau:

Bước 1: Cài đặt Træfik với chức năng Let’s Encrypt được bật:

apiVersion: helm.cncf.io/v1
kind: HelmRelease
metadata:
  name: traefik
  namespace: traefik
spec:
  chart:
    repository: https://containous.github.io/traefik-helm-chart
    name: traefik
    version: 10.3.2
  values:
    ssl:
      enabled: true
      enforced: true
      permanentRedirect: false
      insecureSkipVerify: false
      defaultCert:
        secretName: traefik-tls
      # Enable Let's Encrypt
      letsEncrypt:
        enabled: true
        staging: false
        email: your-email@example.com
        # A list of domains to request Let's Encrypt certificates for
        domains:
          - example.com
        # Configure the Let's Encrypt ACME HTTP-01 provider
        httpChallenge:
          entryPoint: web

Trong đó, enabled: true để bật tính năng Let’s Encrypt, staging: false để bật chế độ thực tế (production), email là địa chỉ email của bạn và domains là danh sách các tên miền để yêu cầu chứng chỉ Let’s Encrypt.

Bước 2: Tạo một IngressRoute để chỉ định cách phân phối traffic cho các tên miền và địa chỉ IP:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: my-ingressroute
  namespace: default
spec:
  entryPoints:
    - web
    - websecure
  routes:
    - match: Host(`example.com`) && PathPrefix(`/`)
      kind: Rule
      services:
        - name: my-service
          port: 80
      middlewares:
        - name: redirect-to-https
    - match: Host(`example.com`) && PathPrefix(`/api`)
      kind: Rule
      services:
        - name: my-api-service
          port: 8080
      middlewares:
        - name: basic-auth
  tls:
    certResolver: default

Trong đó, Host chỉ định tên miền được sử dụng, PathPrefix chỉ định tiền tố URL, services chỉ định tên dịch vụ và cổng, middlewares là danh sách middleware được áp dụng cho các yêu cầu HTTP, và tls chỉ định cách giải quyết chứng chỉ SSL/TLS.

Bước 3: Truy cập https://example.com để kiểm tra xem chứng chỉ Let’s Encrypt đã hoạt động thành công hay chưa.

Lưu ý rằng để Træfik có thể yêu cầu và cài đặt chứng chỉ Let’s Encrypt, bạn cần chắc chắn rằng tên miền được đăng ký và trỏ đến địa chỉ IP của Træfik.

  1. Khởi chạy Træfik:

Sau khi cấu hình Træfik và IngressRoute, chúng ta có thể khởi chạy Træfik và bắt đầu định tuyến lưu lượng truy cập đến các ứng dụng trong Kubernetes cluster.

Quy trình triển khai Træfik có thể có một số biến thể tùy thuộc vào nhu cầu và tài nguyên của từng dự án.

Để khởi chạy Træfik, bạn cần tạo một file cấu hình YAML để định nghĩa các cài đặt cần thiết cho Træfik, ví dụ như cổng để lắng nghe, backend, định tuyến, định tuyến SSL, tài khoản Let’s Encrypt, v.v.

Sau đó, bạn có thể khởi động Træfik bằng cách sử dụng lệnh kubectl apply -f <file-config.yaml>. Điều này sẽ triển khai Træfik như một Pod trong Kubernetes cluster và bắt đầu lắng nghe các yêu cầu đến.

Ví dụ, dưới đây là một file cấu hình YAML đơn giản để khởi chạy Træfik:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: traefik
spec:
  selector:
    matchLabels:
      app: traefik
  replicas: 1
  template:
    metadata:
      labels:
        app: traefik
    spec:
      containers:
      - name: traefik
        image: traefik:v2.4
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        args:
        - "--log.level=DEBUG"
        - "--api.insecure=true"
        - "--providers.kubernetesIngress=true"
        - "--entryPoints.web.address=:80"
        - "--entryPoints.websecure.address=:443"
        - "--certificatesResolvers.myresolver.acme.email=myemail@example.com"
        - "--certificatesResolvers.myresolver.acme.storage=/acme.json"
        - "--certificatesResolvers.myresolver.acme.httpChallenge.entryPoint=web"
        - "--certificatesResolvers.myresolver.acme.tlsChallenge=true"
        volumeMounts:
        - name: acme-storage
          mountPath: /acme.json
          subPath: acme.json
      volumes:
      - name: acme-storage
        emptyDir: {}

File cấu hình này khai báo một Pod Træfik với một container Træfik, sử dụng phiên bản 2.4. Nó lắng nghe các yêu cầu HTTP trên cổng 80 và HTTPS trên cổng 443, sử dụng các Entry Point “web” và “websecure”. Nó cũng khai báo một Certificates Resolver sử dụng Let’s Encrypt, với thông tin liên lạc email và lưu trữ được định nghĩa trong một tệp tin trên thư mục gắn kết (acme.json). Lưu ý rằng đây là một cấu hình đơn giản và bạn có thể tùy chỉnh theo nhu cầu của bạn.

Bạn có thể lưu file cấu hình này với tên ví dụ là traefik.yaml và chạy lệnh kubectl apply -f traefik.yaml để triển khai Træfik trong Kubernetes cluster của bạn.

Nếu bạn không muốn sử dụng Traefik nữa thì bạn có thể gỡ nó bằng lệnh sau:

helm install traefik traefik/traefik --namespace traefik

Lưu ý khi gỡ Traefik bạn phải chú ý các ứng dụng đang sử dụng ingress Traefik để tránh bị lỗi ứng dụng sau khi gỡ cài đặt nó.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories