ฉันพบปัญหานี้ในฟอรัมอื่นๆ มากมาย และในที่สุดฉันก็พบวิธีแก้ปัญหาที่ได้ผลจากฉัน
ประการแรก ปัญหาของฉันเกิดจากใบรับรองเท่านั้น /var/lib/kubelet/pki/kubelet.crt
ซึ่งฉันเห็นว่าหมดอายุด้วย:
เสียงสะท้อน -n | openssl s_client -เชื่อมต่อ localhost:10250 2>&1 | sed -ne '/-เริ่มต้นใบรับรอง-/,/-สิ้นสุดใบรับรอง-/p' | opensl x509 -text -noout | grep -A 2 ความถูกต้อง
หรือ
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet.crt -ข้อความ -noout | grep -A 2 ความถูกต้อง
ขั้นแรก คุณต้องเปิดใช้งาน --rotate-certificates=จริง
และ --rotate-server-certificates=true
ใน kubelet ของคุณ ในกรณีของฉัน ฉันติดตั้งคลัสเตอร์โดยใช้ คูบีด
เพื่อให้ฉันสามารถแก้ไข /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
และเพิ่มสิ่งต่อไปนี้ใน KUBELET_EXTRA_ARGS
:
สภาพแวดล้อม = "KUBELET_EXTRA_ARGS=--rotate-certificates=true --rotate-server-certificates=true --tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
โดยทั่วไปเป็นเพียงการเพิ่มการตั้งค่าสถานะเหล่านี้ในการเรียกใช้ kubelet /usr/bin/kubelet --rotate-certificates=true --rotate-server-certificates=true
.
และโหลดซ้ำและรีสตาร์ท kubelet ด้วย:
sudo systemctl daemon โหลดซ้ำ
sudo service kubelet รีสตาร์ท
หลังจากรีสตาร์ทฉันเห็นบางอย่างเช่น 14114 log.go:172] http: ข้อผิดพลาด TLS handshake จาก 20.0.0.13:57738: ไม่มีใบรับรองการให้บริการสำหรับ kubelet
ซึ่งระบุว่าใบรับรองจำเป็นต้องเพิ่มและอนุมัติ
ประการที่สอง เราต้องอนุมัติ ความรับผิดชอบต่อสังคม
จาก kubernetes (นี่คือสิ่งที่ฉันไม่เคยดูมาก่อน...):
kubectl รับ csr
จะเห็นใบรับรองรอการอนุมัติ ดังนั้นเพียงแค่อนุมัติ:
ใบรับรอง kubectl อนุมัติ csr-dlcf6
และตอนนี้คลัสเตอร์ของคุณควรมีการต่ออายุใบรับรองเซิร์ฟเวอร์ kubelet หากต้องการยืนยันอีกครั้ง:
เสียงสะท้อน -n | openssl s_client -เชื่อมต่อ localhost:10250 2>&1 | sed -ne '/-เริ่มต้นใบรับรอง-/,/-สิ้นสุดใบรับรอง-/p' | opensl x509 -text -noout | grep -A 2 ความถูกต้อง
หมายเหตุบางส่วน:
- เราได้เปิดใช้งานการหมุนเวียนสำหรับทั้งไคลเอนต์และเซิร์ฟเวอร์ การหมุนเวียนไคลเอนต์ยังเป็นส่วนหนึ่งของสคริปต์การต่ออายุใบรับรองอัตโนมัติ (https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/)
- หลังจากที่เราเปิดใช้งานการหมุนแล้ว
/var/lib/kubelet/pki/kubelet.crt
ไม่ได้ใช้อีกต่อไป แทนลิงก์สัญลักษณ์ /var/lib/kubelet/pki/kubelet-server-current.pem
ถูกใช้และชี้ไปที่ใบรับรองที่หมุนเวียนล่าสุด
อ้างอิง: