+18

Cấu hình Traefik Ingress Controller cho cụm k3s

Giới thiệu về Traefik

image.png Traefik là một công cụ định tuyến dịch vụ ngang hàng (reverse proxy) và định tuyến lưu lượng (traffic routing) cho các ứng dụng chạy trên các môi trường máy chủ khác nhau, bao gồm các môi trường đám mây (cloud) và hệ thống máy chủ truyền thống. Traefik cho phép bạn cấu hình định tuyến và xử lý lưu lượng truy cập dựa trên các nguồn dữ liệu khác nhau, bao gồm các máy chủ mạng, các tài nguyên cụ thể trên máy chủ và các hệ thống khác nhau như Kubernetes.

Traefik có các tính năng khác nhau, bao gồm:

  • Định tuyến dựa trên nhiều nguồn dữ liệu, bao gồm cả Kubernetes, Docker, Mesos, Consul, Zookeeper, Amazon ECS và nhiều hơn nữa.
  • Hỗ trợ các giao thức HTTP, HTTPS, TCP và UDP.
  • Hỗ trợ TLS để bảo mật lưu lượng truy cập.
  • Có thể tự động phát hiện các dịch vụ mới và định tuyến chúng.
  • Hỗ trợ định tuyến trên nhiều máy chủ, cho phép cân bằng tải giữa các máy chủ khác nhau.
  • Hỗ trợ nhiều định dạng tệp cấu hình, bao gồm TOML, YAML và JSON.

Với các tính năng mạnh mẽ và khả năng tích hợp tốt với các công nghệ khác, Traefik là một công cụ định tuyến dịch vụ rất phổ biến và đang được sử dụng rộng rãi trong cộng đồng phát triển ứng dụng.

Cấu hình Traefik Ingress Controller cho cụm k3s

Cài đặt k3s

image.png k3s là một phiên bản nhẹ của Kubernetes. Với k3s, người dùng có thể tạo và quản lý các cụm Kubernetes trên các máy chủ nhỏ hơn, điều này hữu ích cho các ứng dụng đòi hỏi tính di động cao hoặc phải chạy trên các môi trường đặc biệt như IoT (Internet of Things).

Các tính năng của k3s bao gồm:

  • Tích hợp với các công cụ như Helm và kubectl để quản lý các ứng dụng Kubernetes.
  • Hỗ trợ triển khai và quản lý các ứng dụng chạy trên Kubernetes, bao gồm cả các ứng dụng đòi hỏi tính di động cao và các ứng dụng được triển khai trên các môi trường nhúng.
  • Tích hợp sẵn với một số cơ sở dữ liệu như SQLite, MySQL và PostgreSQL để lưu trữ các tài nguyên Kubernetes.
  • Tích hợp sẵn với các giải pháp lưu trữ như NFS, GlusterFS và ceph để lưu trữ dữ liệu cho các ứng dụng chạy trên Kubernetes.
  • Hỗ trợ tính năng cài đặt và cấu hình đơn giản, với khả năng triển khai k3s trong vòng vài phút.

Với các tính năng đơn giản và hiệu quả, k3s đã trở thành một giải pháp phổ biến cho việc triển khai và quản lý các ứng dụng chạy trên Kubernetes trên các môi trường có tài nguyên hạn chế.

Để cài đặt K3s, bạn có thể làm theo các bước sau:

$ curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.25.6+k3s1" sh -

Sau khi cài đặt xong, chúng ta có thể kiểm tra xem K3s đã hoạt động chưa thông qua command

➜  ~ sudo service k3s status
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-03-21 15:52:48 +07; 1 day 18h ago
       Docs: https://k3s.io
    Process: 2482 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/SUCCESS)
    Process: 2489 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
    Process: 2490 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)

trạng thái active (running) là ok. Từ bây giờ bạn có thể sử dụng k3s kubectl để tương tác với K8S cluster ở trên máy.

Bật Traefik Dashboard

Để bật Traefik Dashboard, phục vụ cho việc theo dõi các cấu hình Service, Route, Midleware trên cluster chúng ta cần bật tính năng và cấu hình domain cho nó. Đầu tiên chúng ta cần xác minh xem Traefik đã được cài đặt trên cluster chưa

➜  ~ k3s kubectl get pods -n kube-system 
NAME                                      READY   STATUS      RESTARTS       AGE   IP           NODE         NOMINATED NODE   READINESS GATES
helm-install-traefik-crd-2wgm2            0/1     Completed   0              24d   10.42.0.2    b121245-pc   <none>           <none>
helm-install-traefik-tnxpz                0/1     Completed   0              8d    10.42.0.8    b121245-pc   <none>           <none>
svclb-traefik-479c1118-l5scr              2/2     Running     12 (42h ago)   24d   10.42.0.78   b121245-pc   <none>           <none>
local-path-provisioner-79f67d76f8-mpwzs   1/1     Running     8 (42h ago)    24d   10.42.0.80   b121245-pc   <none>           <none>
traefik-66c46d954f-v4prn                  1/1     Running     6 (42h ago)    20d   10.42.0.79   b121245-pc   <none>           <none>

Pod traefik ở trạng thái running và các CRD đã được cài vào cluster là ok.

Tiếp theo chúng ta bổ sung file cấu hình cho Traefik vào k3s

apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    dashboard:
      enabled: true
      domain: "traefik.localhost"

Sau đó tiến hành restart k3s để k3s nhận file cấu hình mới này và chúng ta có thể truy cập http://traefik.localhost/dashboard/#/ để theo dõi các cấu hình Traefik

image.png

Test thử cấu hình Traefik Ingress Controller cho ứng dụng

Mình sẽ deploy 1 server Prometheus và chỏ 1 domain tới ứng dụng của mình để test hoạt động của Traefik

// Đầu tiên, cần thêm Helm chart repo của Prometheus
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

Tạo file values.yaml để cấu hình cho Prometheus

configmapReload:
  prometheus:
    ## If false, the configmap-reload container will not be deployed
    ##
    enabled: false
server:
  prefixURL: /prometheus
  ingress:
    enabled: true
    hosts:
      - 192.168.0.6.traefik.me
    path: /prometheus
    annotations:
      kubernetes.io/ingress.class: traefik
      traefik.ingress.kubernetes.io/router.entrypoints: web

  resources:
    limits:
      cpu: 500m
      memory: 512Mi
    requests:
      cpu: 500m
      memory: 512Mi
  persistentVolume:
    enabled: false


nodeExporter:
  enabled: false
pushgateway:
  enabled: false
alertmanager:
  enabled: false
kubeStateMetrics:
  enabled: false

sau đó install helm chart này vào k8s cluster của mình bằng command

$ helm upgrade --install -n argocd prometheus prometheus-community/prometheus -f values.yaml --version=15.6.0
Release "prometheus" does not exist. Installing it now.
NAME: prometheus
LAST DEPLOYED: Thu Mar 23 11:24:37 2023
NAMESPACE: argocd
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.argocd.svc.cluster.local

From outside the cluster, the server URL(s) are:
http://192.168.0.6.traefik.me
#################################################################################
######   WARNING: Persistence is disabled!!! You will lose your data when   #####
######            the Server pod is terminated.                             #####
#################################################################################


#################################################################################
######   WARNING: Pod Security Policy has been moved to a global property.  #####
######            use .Values.podSecurityPolicy.enabled with pod-based      #####
######            annotations                                               #####
######            (e.g. .Values.nodeExporter.podSecurityPolicy.annotations) #####
#################################################################################



For more information on running Prometheus, visit:
https://prometheus.io/

Kiểm tra xem Ingress của ứng dụng

$ kubectl get ing
NAME                CLASS    HOSTS                    ADDRESS      PORTS   AGE
prometheus-server   <none>   192.168.0.6.traefik.me   10.0.37.90   80      46m

như vậy là ok chúng ta đã cho phép Prometheus truy cập từ bên ngoài vào cluster thông qua domain http://192.168.0.6.traefik.me

image.png

Trên Traefik Dashboard cũng đã hiện thông tin về cấu hình này image.png image.png


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí