Phước

Phước

2023-09-05 10:25:07

Kubectl with the error x509: certificate has expired or is not yet valid

Xử lý sự cố

  • Vấn đề:

    Chứng chỉ K3s đã được lưu vào bộ nhớ cache không được xóa khi automatically rotated.

    K3s tạo ra các internal certificates với thời hạn sử dụng 1 năm. Khi khởi động lại dịch vụ K3s, chứng chỉ hết hạn hoặc sắp hết hạn trong vòng 90 ngày sẽ tự động được rotated. Tuy nhiên, phiên bản K3s được sử dụng với App Host không xóa bỏ bộ nhớ cache chứng chỉ đã lưu, dẫn đến cùng một vấn đề. Do đó, bộ nhớ cache cần được xóa bỏ thủ công.

  • Triệu chứng:

    Sử dụng công cụ dòng lệnh kubectl gây ra lỗi sau đây:

​Unable to connect to the server: x509: certificate has expired or is not yet valid

Chú ý: Các ứng dụng hiện đang chạy vẫn tiếp tục hoạt động mà không gặp vấn đề gì

  • ​​​Nguyên nhân: 

    Phiên bản K3s hiện tại được sử dụng (v1.18) không xóa bỏ bộ nhớ cache chứng chỉ. Vì vậy, ngay cả khi chứng chỉ được xoay vòng sau khi khởi động lại K3s, vấn đề vẫn tiếp tục tồn tại.

  • Chẩn đoán vấn đề:

    Các thay đổi vào ứng dụng hiện có sử dụng nền tảng SOAR không thành công. Điều này bao gồm các thay đổi tệp, thay đổi thông tin bí mật (secrets), triển khai (deploy) hoặc hủy triển khai (undeploy), và yêu cầu nâng cấp (upgrade).

    Trạng thái ứng dụng mới vẫn ở trạng thái 'Deploying' (Đang triển khai). Một tooltip yêu cầu người dùng chạy lệnh "sudo appHostPackageLogs". Chạy lệnh này hoặc bất kỳ lệnh nào bắt đầu bằng "kubectl" đều gây ra lỗi sau đây:

#: kubectl get pods -A
Unable to connect to the server: x509: certificate has expired or is not yet valid

    Bạn có thể kiểm tra dữ liệu hết hạn của cached certificates trong bộ đệm ẩn bằng cách chạy lệnh sau trên máy chủ Máy chủ ứng dụng:

​openssl s_client -connect localhost:6443 -showcerts < /dev/null 2>&1 | openssl x509 -noout -enddate
  • Giải quyết vấn đề:

​​    Như một biện pháp phòng ngừa, chúng ta backup thư mục TLS.

sudo tar -czvf /var/lib/rancher/k3s/server/apphost-cert.tar.gz /var/lib/rancher/k3s/server/tls

    Xóa tệp sau.

sudo rm /var/lib/rancher/k3s/server/tls/dynamic-cert.json

   Xóa cached certificates trong bộ nhớ cache khỏi kubernetes secret.

sudo kubectl --insecure-skip-tls-verify=true delete secret -n kube-system k3s-serving

   Khởi động lại dịch vụ K3s rotate certificates.

sudo systemctl restart k3s

   Xác minh rằng lệnh kubectl hoạt động.

sudo kubectl get pods -A

   Ngoài ra, bạn có thể xác minh rằng tất cả các internal certificates của K3s không còn expired nữa.

sudo su; for i in `ls /var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done

   Hoặc run

curl -v -k https://localhost:6443 [https://localhost:6443] //xác nhận cert mới đã được renew

 

Kubectl with the error x509: certificate has expired or is not yet valid
1 Likes1 Comments
Cnit09

Cnit09

good job