Score:0

/var/lib/kubelet/pki/kubelet.crt หมดอายุ จะต่ออายุได้อย่างไร

ธง cn

เดอะ คูเบอร์เนเตส คลัสเตอร์ใน 1.21.2 เดอะ คูเบเลต ยังอยู่ใน 1.21.2

คูเบเลต --version
Kubernetes v1.21.2

รุ่น kubeadm
รุ่น kubeadm: &version.Info {หลัก:"1", รอง:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"สะอาด", BuildDate:"2021-06-16T12:57: 56Z", GoVersion:"go1.16.5", คอมไพเลอร์:"gc", แพลตฟอร์ม:"linux/amd64"}

เมื่อฉันพยายามที่จะ "kl รับไม่" ฉันได้รับข้อผิดพลาดด้านล่าง

kl รับไม่
ข้อผิดพลาด: คุณต้องลงชื่อเข้าใช้เซิร์ฟเวอร์ (ไม่ได้รับอนุญาต)
**หมายเหตุ: kl เป็นนามแฝงของ kubectl**
ฉันตรวจสอบ /var/lib/kubelet/pki/kubelet.crt แล้ว และหมดอายุแล้ว

ใน kubelet.crt ผู้ออกอยู่ด้านล่าง

เรื่อง: CN=aparapu@1591592441
        เรื่องข้อมูลคีย์สาธารณะ:
            อัลกอริทึมคีย์สาธารณะ: rsaEncryption

ต้องการความช่วยเหลือในการต่ออายุ kubelet.crt นี้

in flag
สวัสดี shaktirath ยินดีต้อนรับสู่ S.F. หากไม่ทราบเพิ่มเติมเกี่ยวกับวิธีการจัดเตรียมโหนดของคุณ จะไม่มีใครสามารถพูดได้ว่า _แน่นอน_ แต่ในกรณีส่วนใหญ่_ `rm -rf /var/lib/kubelet && rm -rf /etc/kubernetes && systemctl restart kubelet.service` จะทำให้ kubelet ไป ย้อนกลับไปตามขั้นตอนการร้องขอใบรับรองเริ่มต้น และ apiserver จะแจ้งให้คุณทราบหรืออนุมัติคำขอใบรับรองของ Node โดยอัตโนมัติ อย่าลังเลที่จะใช้ `mv` แทน `rm` และเลือกที่จะหยุด kubelet ก่อน
shaktirath avatar
cn flag
เหตุใดจึงต้องลบ /etc/kubernetes ฉันจัดเตรียมโหนดผ่าน kubeadm ซึ่งมีอยู่ในเอกสารประกอบของ kubernetes
shaktirath avatar
cn flag
เพียงเพิ่มอีกหนึ่งสิ่ง kubeadm ต่ออายุใบรับรองไม่ได้มีไว้สำหรับ /var/lib/kubelet/kubelet.crt หากคุณยังแน่ใจ โปรดแจ้งรายละเอียดขั้นตอนให้ฉันทราบ
Mikołaj Głodziak avatar
id flag
สวัสดี @shaktirath ถ้าฉันเข้าใจคำถามของคุณดี [การต่ออายุใบรับรองด้วยตนเอง](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#manual-certificate-renewal) น่าจะช่วยคุณได้ ลองเรียกใช้ `kubeadm certs ต่ออายุ'
shaktirath avatar
cn flag
ลิงค์ด้านบนนี้ไม่ได้พูดถึงวิธีการต่ออายุ /var/lib/kubelet/kubelet.crt ฉันลองลิงค์ด้านล่างด้วย แต่น่าเสียดายที่ kubectl ของฉันไม่ทำงาน https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#kubelet-serving-certs
Mikołaj Głodziak avatar
id flag
คุณตั้งค่าคลัสเตอร์ของคุณอย่างไร คุณใช้โลหะเปล่าหรือผู้ให้บริการคลาวด์หรือไม่? ดูที่[ปัญหาที่คล้ายกันนี้](https://github.com/kubernetes/kubeadm/issues/2186)
shaktirath avatar
cn flag
ใช่. กลุ่มของฉันประกอบด้วยโลหะเปลือย
Score:1
ธง my

ฉันพบปัญหานี้ในฟอรัมอื่นๆ มากมาย และในที่สุดฉันก็พบวิธีแก้ปัญหาที่ได้ผลจากฉัน

ประการแรก ปัญหาของฉันเกิดจากใบรับรองเท่านั้น /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 ถูกใช้และชี้ไปที่ใบรับรองที่หมุนเวียนล่าสุด

อ้างอิง:

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา