mengembalikan master kubeadm yang hancur

Dec 30 2020

Saya membuat cluster kubernetes 1-master 2-pekerja menggunakan kubeadm 1.20 dan mencadangkan etcd. Saya menghancurkan master dengan sengaja untuk melihat pengujian bagaimana mengembalikan cluster ke status berjalan.

Kubernetes version: 1.20
Installation method: kubeadm
Host OS: windows 10 pro
Guest OS: ubuntu 18 on virtual box 6
CNI and version: weave-net
CRI and version: docker 19

Saya sebagian berhasil karena rahasia yang saya buat sebelum menghancurkan master terlihat setelah pemulihan etcd, sehingga bagian itu tampaknya berfungsi.

NAMUN pod inti tidak diizinkan untuk membuat permintaan ke server api, berdasarkan log pod inti:

[INFO] plugin/ready: Still waiting on: "kubernetes"
E1229 21:42:25.892580       1 reflector.go:178] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:125: Failed to list *v1.Namespace: Unauthorized
E1229 21:42:29.680620       1 reflector.go:178] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:125: Failed to list *v1.Endpoints: Unauthorized
[INFO] plugin/ready: Still waiting on: "kubernetes"
E1229 21:42:39.492521       1 reflector.go:178] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:125: Failed to list *v1.Service: Unauthorized

Saya menduga itu ada hubungannya dengan token akun layanan jadi ada langkah yang saya lewatkan untuk mengotorisasi pod untuk mengautentikasi ke api-server setelah penggantian etcd db.

Apa yang saya lewatkan?

Jawaban

2 coderanger Dec 30 2020 at 13:38

Jika Anda hanya mencadangkan konten Etcd maka kubeadm akan menghasilkan sertifikat baru yang digunakan untuk menandatangani JWT ServiceAccount. Token lama tidak akan lagi diverifikasi. Karena hal ini umumnya tidak dilakukan selama pemeliharaan rutin, menurut saya pengontrol SA tidak tahu untuk menerbitkan ulang token. Jika Anda menghapus semua rahasia yang mendasarinya, ia harus melakukan penerbitan ulang.