Score:0

ข้อผิดพลาดของ Kubernetes ในการสร้างเนื้อหา PKI: ใบรับรองไม่ถูกต้อง

ธง mn

ฉันมีปัญหาในการเข้าร่วมโหนดผู้ปฏิบัติงานของฉันในการกำหนดค่าหลักสามรายการเป็นที่น่าสังเกตว่าฉันรู้น้อยมากเกี่ยวกับด้านเครือข่ายของสิ่งนี้ (ฉันควรอธิบายเหมือนฉันอายุห้าขวบ เพื่อที่ฉันจะได้แน่ใจว่าไม่ได้พลาดอะไรไป)

ฉันทำตามคำแนะนำที่: https://dockerlabs.collabnix.com/kubernetes/beginners/Install-and-configure-a-multi-master-Kubernetes-cluster-with-kubeadm.html ด้วยการเปลี่ยนแปลงเล็กน้อย - ที่อยู่ IP นั้นแตกต่างกันและการกำหนดค่าสำหรับ kubeadm.k8s.io/v1alpha3 ไม่รองรับโดย K8 ปัจจุบัน ฉันได้อัปเดตเพื่อใช้ kubeadm.k8s.io/v1beta3 แม้ว่าแท็กสองแท็กจากการกำหนดค่าเริ่มต้นดูเหมือนจะไม่มีความคล้ายคลึงกัน (apiServerCertSANs และ apiServerExtraArgs) และฉันไม่รู้ว่าสิ่งเหล่านั้นจำเป็นหรือไม่ เวอร์ชัน Kubectl ที่ฉันมีคือ 1.24.0

มาสเตอร์เริ่มต้นด้วยข้อความ:

W0510 09:17:54.102466 8717 initconfiguration.go:306] ข้อผิดพลาด unmarshaling configuration schema.GroupVersionKind{Group:"kubeadm.k8s.io", เวอร์ชัน:"v1beta3", ชนิด:"ClusterConfiguration"}: ข้อผิดพลาดในการถอดรหัสอย่างเข้มงวด: ฟิลด์ที่ไม่รู้จัก " apiServerExtraArgs" ฟิลด์ที่ไม่รู้จัก "apiserver-cert-extra-sans" [init] ใช้เวอร์ชัน Kubernetes: v1.24.0 [preflight] การตรวจสอบก่อนการบิน [preflight] การดึงรูปภาพที่จำเป็นสำหรับการตั้งค่าคลัสเตอร์ Kubernetes [preflight] อาจใช้เวลาหนึ่งหรือสองนาที ขึ้นอยู่กับความเร็วของการเชื่อมต่ออินเทอร์เน็ตของคุณ [preflight] คุณยังสามารถดำเนินการนี้ล่วงหน้าได้โดยใช้ 'kubeadm config images pull' [ใบรับรอง] การใช้โฟลเดอร์ certificateDir "/etc/kubernetes/pki" [certs] กำลังสร้างใบรับรองและคีย์ "ca" [certs] กำลังสร้างใบรับรองและคีย์ "apiserver" [certs] apiserver ที่ให้บริการใบรับรองได้รับการลงชื่อสำหรับชื่อ DNS [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local master1] และ IPs [10.96.0.1 10.50.0.50 10.50.0.10] [certs] กำลังสร้างใบรับรองและคีย์ "apiserver-kubelet-client" [certs] กำลังสร้างใบรับรองและคีย์ "front-proxy-ca" [certs] กำลังสร้างใบรับรองและคีย์ "front-proxy-client" [certs] โหมด etcd ภายนอก: ข้ามการสร้างผู้ออกใบรับรอง etcd/ca [certs] โหมด etcd ภายนอก: ข้ามการสร้างใบรับรอง etcd/เซิร์ฟเวอร์ [certs] โหมด etcd ภายนอก: ข้ามการสร้างใบรับรอง etcd/peer [ใบรับรอง] โหมด etcd ภายนอก: ข้ามการสร้างใบรับรองไคลเอ็นต์ etcd/healthcheck [certs] โหมด etcd ภายนอก: ข้ามการสร้างใบรับรอง apiserver-etcd-client [ใบรับรอง] กำลังสร้างคีย์ "sa" และคีย์สาธารณะ [kubeconfig] การใช้โฟลเดอร์ kubeconfig "/etc/kubernetes" [kubeconfig] กำลังเขียนไฟล์ "admin.conf" kubeconfig [kubeconfig] กำลังเขียนไฟล์ "kubelet.conf" kubeconfig [kubeconfig] กำลังเขียนไฟล์ "controller-manager.conf" kubeconfig [kubeconfig] กำลังเขียนไฟล์ kubeconfig "scheduler.conf" [kubelet-start] การเขียนไฟล์สภาพแวดล้อม kubelet พร้อมแฟล็กไปยังไฟล์ "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] กำลังเขียนการกำหนดค่า kubelet ไปยังไฟล์ "/var/lib/kubelet/config.yaml" [kubelet-start] การเริ่มต้น kubelet [ระนาบควบคุม] การใช้โฟลเดอร์รายการ "/etc/kubernetes/manifests" [control-plane] การสร้างรายการ Pod แบบคงที่สำหรับ "kube-apiserver" [control-plane] การสร้างรายการ Pod แบบคงที่สำหรับ "kube-controller-manager" [control-plane] การสร้างรายการ Pod แบบคงที่สำหรับ "kube-scheduler" [wait-control-plane] กำลังรอให้ kubelet บูตเครื่องควบคุมเป็น Pods แบบคงที่จากไดเร็กทอรี "/etc/kubernetes/manifests" อาจใช้เวลาถึง 4m0 วินาที [apiclient] ส่วนประกอบระนาบควบคุมทั้งหมดมีความสมบูรณ์หลังจาก 6.521293 วินาที [upload-config] จัดเก็บการกำหนดค่าที่ใช้ใน ConfigMap "kubeadm-config" ในเนมสเปซ "kube-system" [kubelet] การสร้าง ConfigMap "kubelet-config" ในเนมสเปซ kube-system ด้วยการกำหนดค่าสำหรับ kubelets ในคลัสเตอร์ [ใบรับรองการอัปโหลด] การข้ามเฟส โปรดดู --upload-certs [mark-control-plane] การทำเครื่องหมายโหนด master1 เป็นระนาบควบคุมโดยการเพิ่มป้ายกำกับ: [node-role.kubernetes.io/control-plane node.kubernetes.io/exclude-from-external-load-balancers] [mark-control-plane] การทำเครื่องหมายโหนด master1 เป็นระนาบควบคุมโดยการเพิ่ม taints [node-role.kubernetes.io/master:NoSchedule node-role.kubernetes.io/control-plane:NoSchedule] [bootstrap-token] ใช้โทเค็น: 1w1x1s.7qwcr1m1e5hj3yp3 [bootstrap-token] การกำหนดค่าโทเค็น bootstrap, ConfigMap ข้อมูลคลัสเตอร์, บทบาท RBAC [bootstrap-token] กฎ RBAC ที่กำหนดค่าเพื่ออนุญาตให้โทเค็น Node Bootstrap รับโหนด [bootstrap-token] กำหนดค่ากฎ RBAC เพื่ออนุญาตให้โหนด Bootstrap โทเค็นโพสต์ CSR เพื่อให้โหนดได้รับใบรับรองระยะยาว [bootstrap-token] กฎ RBAC ที่กำหนดค่าเพื่อให้ตัวควบคุม csrapprover อนุมัติ CSR จากโหนด Bootstrap Token โดยอัตโนมัติ [bootstrap-token] กฎ RBAC ที่กำหนดค่าเพื่ออนุญาตการหมุนเวียนใบรับรองสำหรับใบรับรองไคลเอ็นต์โหนดทั้งหมดในคลัสเตอร์ [bootstrap-token] การสร้าง ConfigMap "cluster-info" ในเนมสเปซ "kube-public" [kubelet-finalize] กำลังอัปเดต "/etc/kubernetes/kubelet.conf" เพื่อชี้ไปที่ใบรับรองและคีย์ไคลเอ็นต์ kubelet ที่หมุนได้ [ส่วนเสริม] ใช้ส่วนเสริมที่จำเป็น: CoreDNS [ส่วนเสริม] ใช้ส่วนเสริมที่จำเป็น: kube-proxy

ระนาบควบคุม Kubernetes ของคุณเริ่มต้นสำเร็จแล้ว!

แต่ทั้งสามรายการอยู่ในโหนด (ตามที่ NotReady ยอมรับ แต่ฉันเชื่อว่าเป็นเพราะฉันไม่ได้ปรับใช้บางอย่างเช่น Calico) และฉันได้มาถึงจุดที่พยายามเพิ่มในโหนดผู้ปฏิบัติงาน การรันคำสั่ง join ที่ให้มาก่อนทำให้ฉันได้รับข้อผิดพลาด:

[preflight] การตรวจสอบก่อนการบิน [preflight] การอ่านการกำหนดค่าจากคลัสเตอร์... [preflight] FYI: คุณสามารถดูไฟล์ปรับแต่งนี้ด้วย 'kubectl -n kube-system get cm kubeadm-config -o yaml' ข้อผิดพลาดในการดำเนินการช่วงพรีไฟลต์: เงื่อนไขอย่างน้อยหนึ่งข้อสำหรับการโฮสต์อินสแตนซ์ระนาบควบคุมใหม่ไม่ตรงตามเงื่อนไข

[ความล้มเหลวในการโหลดใบรับรองสำหรับ CA: ไม่สามารถโหลดไฟล์ใบรับรอง /etc/kubernetes/pki/ca.crt: เปิด /etc/kubernetes/pki/ca.crt: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว คีย์การโหลดล้มเหลวสำหรับบัญชีบริการ: ไม่สามารถโหลดไฟล์คีย์ส่วนตัว /etc/kubernetes/pki/sa.key: open /etc/kubernetes/pki/sa.key: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว > > ความล้มเหลวในการโหลดใบรับรองสำหรับ front-proxy CA: can' t โหลดไฟล์ใบรับรอง /etc/kubernetes/pki/front-proxy-ca.crt: เปิด /etc/kubernetes/pki/front-proxy-ca.crt: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว]

โปรดตรวจสอบว่า:

  • คลัสเตอร์มีที่อยู่ controlPlaneEndpoint ที่เสถียร
  • มีการจัดเตรียมใบรับรองที่ต้องใช้ร่วมกันระหว่างอินสแตนซ์ระนาบควบคุม

หากต้องการดูการติดตามสแต็กของข้อผิดพลาดนี้ให้ดำเนินการด้วย --v=5 หรือสูงกว่า

ในการแก้ไขปัญหานี้ ฉันได้คัดลอกใบรับรองจากต้นแบบคนใดคนหนึ่งไปยังผู้ปฏิบัติงานที่ /etc/kubernetes/pki/ ฉันรันการรวมอีกครั้งและได้รับข้อผิดพลาดต่อไปนี้:

[preflight] การตรวจสอบก่อนการบิน [preflight] การอ่านการกำหนดค่าจากคลัสเตอร์... [preflight] FYI: คุณสามารถดูไฟล์ปรับแต่งนี้ด้วย 'kubectl -n kube-system get cm kubeadm-config -o yaml' [การบินล่วงหน้า] ดำเนินการตรวจสอบก่อนการบินก่อนที่จะเริ่มต้นอินสแตนซ์เครื่องบินควบคุมใหม่ ข้อผิดพลาดในการดำเนินการช่วงพรีไฟลต์: [พรีไฟลต์] เกิดข้อผิดพลาดร้ายแรงบางอย่าง: [ข้อผิดพลาด ExternalEtcdClientCertificates]: ไม่มี /etc/etcd/ca.pem [ข้อผิดพลาด ExternalEtcdClientCertificates]: ไม่มี /etc/etcd/kubernetes.pem [ข้อผิดพลาด ExternalEtcdClientCertificates]: ไม่มี /etc/etcd/kubernetes-key.pem [preflight] หากคุณรู้ว่าคุณกำลังทำอะไรอยู่ คุณสามารถทำการตรวจสอบโดยไม่เป็นอันตรายถึงชีวิตได้ --ignore-preflight-errors=... หากต้องการดูการติดตามสแต็กของข้อผิดพลาดนี้ให้ดำเนินการด้วย --v=5 หรือสูงกว่า

อีกครั้งฉันคัดลอกใบรับรองจากอาจารย์ที่ /ฯลฯ/ฯลฯ/ . ในที่สุด ฉันได้รับข้อผิดพลาดนี้:

[preflight] การตรวจสอบก่อนการบิน [preflight] การอ่านการกำหนดค่าจากคลัสเตอร์... [preflight] FYI: คุณสามารถดูไฟล์ปรับแต่งนี้ด้วย 'kubectl -n kube-system get cm kubeadm-config -o yaml' [การบินล่วงหน้า] ดำเนินการตรวจสอบก่อนการบินก่อนที่จะเริ่มต้นอินสแตนซ์เครื่องบินควบคุมใหม่ [preflight] การดึงรูปภาพที่จำเป็นสำหรับการตั้งค่าคลัสเตอร์ Kubernetes [preflight] อาจใช้เวลาหนึ่งหรือสองนาที ขึ้นอยู่กับความเร็วของการเชื่อมต่ออินเทอร์เน็ตของคุณ [preflight] คุณยังสามารถดำเนินการนี้ล่วงหน้าได้โดยใช้ 'kubeadm config images pull' [ใบรับรอง] การใช้โฟลเดอร์ certificateDir "/etc/kubernetes/pki" [ใบรับรอง] โดยใช้ใบรับรองและคีย์ "front-proxy-client" ที่มีอยู่ ขั้นตอนการดำเนินการข้อผิดพลาด control-plane-prepare/certs: เกิดข้อผิดพลาดในการสร้างสินทรัพย์ PKI: ล้มเหลวในการเขียนหรือตรวจสอบใบรับรอง "apiserver": ใบรับรอง apiserver ไม่ถูกต้อง: x509: ใบรับรองถูกต้องสำหรับ kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes .default.svc.cluster.local, master2 ไม่ใช่ worker1 หากต้องการดูการติดตามสแต็กของข้อผิดพลาดนี้ให้ดำเนินการด้วย --v=5 หรือสูงกว่า

หากฉันคัดลอกใบรับรองจากต้นแบบที่ระบุ แสดงว่าถูกต้องสำหรับต้นแบบนั้น (master2 ด้านบน) ฉันจะสร้าง/ใช้ใบรับรองกับผู้ปฏิบัติงานได้อย่างไร เนื่องจากดูเหมือนว่าสิ่งเหล่านี้ถูกสร้างขึ้นโดยคำสั่ง INIT แทนที่จะเป็นคำสั่ง JOIN

ในฐานะที่เป็นวิธีแก้ปัญหาที่เป็นไปได้ฉันดูที่การปิด SSL ภายในตามโพสต์นี้ https://stackoverflow.com/questions/60970744/how-to-run-kubernetes-without-ssl-network แต่ฉันไม่พบส่วนที่เกี่ยวข้องใน YAML ของฉันที่จะแก้ไข ฉันอยากจะทำงานด้วย SSL ถ้าทำได้ แต่ฉันเปิดรับวิธีปิดการใช้งานหากจำเป็น

โพสต์คำตอบ

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