Bạn đang gặp khó khăn khi triển khai FortiADC Ingress Controller trên cụm RKE2? Bài viết này sẽ cung cấp cho bạn hướng dẫn chi tiết từng bước để xác định và giải quyết các vấn đề thường gặp, đảm bảo hệ thống của bạn hoạt động trơn tru và hiệu quả. Chúng ta sẽ đi sâu vào cấu hình, kết nối và tính tương thích để bạn có thể tự tin triển khai FortiADC trong môi trường Kubernetes của mình.
IngressClass là yếu tố then chốt để FortiADC Ingress Controller nhận diện và quản lý các tài nguyên Ingress. Đảm bảo rằng IngressClass của bạn được định nghĩa chính xác và khớp với những gì mà controller mong đợi. Nếu không, controller sẽ không thể quản lý các Ingress resource. Điều này giống như việc bạn đưa chìa khóa sai cho người gác cổng, họ sẽ không thể mở cửa cho bạn.
Kiểm tra định nghĩa IngressClass của bạn bằng cách sử dụng lệnh kubectl get ingressclass
. Hãy chắc chắn rằng trường controller
được đặt thành fortinet.com/ingress-controller
.
Ví dụ:
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: fadc spec: controller: fortinet.com/ingress-controller
Đồng thời, đảm bảo rằng tài nguyên Ingress của bạn tham chiếu đến IngressClass này. Trường ingressClassName
trong Ingress cần phải khớp với tên của IngressClass.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress namespace: fortiadc-system spec: ingressClassName: fadc rules: - host: nginx.local http: paths: - path: / pathType: Prefix backend: service: name: nginx port: number: 80
Lưu ý: Trường ingressClassName
được ưu tiên hơn annotation kubernetes.io/ingress.class
đã lỗi thời. Việc sử dụng annotation cũ có thể gây ra các hành vi không mong muốn.
FortiADC Ingress Controller dựa vào các annotation cụ thể trong tài nguyên Ingress để hoạt động chính xác. Các annotation này cung cấp thông tin cần thiết như địa chỉ IP của FortiADC, secret xác thực và chi tiết về virtual server. Thiếu các annotation này, controller sẽ không biết cách cấu hình FortiADC để xử lý lưu lượng truy cập.
Dưới đây là ví dụ về các annotation cần thiết:
metadata: annotations: fortiadc-ip: "192.0.2.1" # Thay thế bằng IP của FortiADC fortiadc-login: "fad-login" # Tên của Kubernetes secret chứa thông tin đăng nhập FortiADC virtual-server-ip: "203.0.113.1" # IP của virtual server mong muốn virtual-server-interface: "port1" # Interface trên FortiADC
Đảm bảo rằng secret fad-login
tồn tại trong cùng namespace và chứa username
và password
chính xác để truy cập FortiADC. Bạn có thể kiểm tra secret bằng lệnh kubectl get secret fad-login -n
. Hãy cẩn thận khi hiển thị nội dung của secret, vì nó chứa thông tin nhạy cảm.
Việc không có lưu lượng truy cập trên port 443 cho thấy Ingress Controller không cố gắng giao tiếp với FortiADC. Điều này có thể do cấu hình sai trong các biến môi trường của controller hoặc sự cố với thông tin đăng nhập được cung cấp. Nếu controller không thể kết nối với FortiADC, nó sẽ không thể cấu hình các virtual server.
Các bước để xác minh:
fad-login
để xác nhận nó chứa thông tin đăng nhập hợp lệ.kubectl logs deployment/fortiadc-ingress-controller -n fortiadc-system
diagnose sniffer packet any 'host [controller_ip] and port 443' 4 0 l
. Thay thế [controller_ip]
bằng địa chỉ IP của node đang chạy Ingress Controller.Đảm bảo rằng các phiên bản của FortiADC và Ingress Controller tương thích với nhau. Ví dụ: một số tính năng trong FortiADC Ingress Controller phiên bản 2.0.x yêu cầu FortiADC phiên bản 7.4.0 trở lên. Kiểm tra các phiên bản bạn đang sử dụng và tham khảo tài liệu của FortiADC Ingress Controller để biết chi tiết về khả năng tương thích. Việc sử dụng các phiên bản không tương thích có thể dẫn đến các lỗi không mong muốn.
kubectl
và Kubernetes ServerPhiên bản kubectl
của bạn là 1.31.2, trong khi server là 1.29.9. Điều này vượt quá độ lệch phiên bản nhỏ được hỗ trợ là ±1. Cân nhắc điều chỉnh phiên bản kubectl
cho phù hợp với phiên bản server để tránh các vấn đề tương thích tiềm ẩn. Độ lệch phiên bản quá lớn có thể dẫn đến các lỗi không rõ ràng trong quá trình tương tác với Kubernetes API.
Đôi khi, sự cố có thể phát sinh do các thành phần chưa sẵn sàng. Đặc biệt, nếu bạn đang sử dụng Rancher, hãy đảm bảo rằng rke2-ingress-nginx-controller
đã được triển khai hoàn toàn trước khi tiếp tục. Bạn có thể kiểm tra trạng thái bằng lệnh sau:
kubectl rollout status daemonset -n kube-system rke2-ingress-nginx-controller --timeout=60s
Bạn có thể sử dụng vòng lặp while
để liên tục kiểm tra trạng thái cho đến khi DaemonSet sẵn sàng:
while ! kubectl rollout status daemonset -n kube-system rke2-ingress-nginx-controller --timeout=60s; do sleep 2 ; done
Bằng cách làm theo các bước trên, bạn có thể chẩn đoán và khắc phục hầu hết các sự cố liên quan đến FortiADC Ingress Controller trên cụm RKE2. Hãy nhớ kiểm tra kỹ nhật ký và tài liệu để biết thêm thông tin chi tiết và giải pháp cụ thể cho môi trường của bạn.
Bài viết liên quan