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