ฉันติดตั้งคลัสเตอร์ k8s 1.23.3 บน raspberry pi สี่ตัวที่กำลังรัน raspberrypi OS 11 (บูลส์อาย) แขน64; โดยส่วนใหญ่ติดตาม คู่มือนี้.
สาระสำคัญของมันคือระนาบควบคุมถูกสร้างขึ้นโดยใช้คำสั่งนี้
kubeadm init --token={some_token} --kubernetes-version=v1.23.3 --pod-network-cidr=10.1.0.0/16 --service-cidr=10.11.0.0/16 --control-plane-endpoint= 10.0.4.16 --node-name=rpi-1-1
จากนั้นฉันก็สร้างของฉันเอง ตรวจสอบ kube
เนมสเปซ วางการปรับใช้ของ echo-เซิร์ฟเวอร์ เข้าไปและสร้างบริการสำหรับมัน
อย่างไรก็ตาม, ฉันไม่สามารถเข้าถึง IP คลัสเตอร์ของบริการจากโหนดใดๆ ทำไม คำขอหมดเวลาในขณะที่คำขอไปยัง IP คลัสเตอร์ของพ็อดทำงานได้ดี
ฉันสงสัยว่าของฉัน kube-พร็อกซี
ไม่ทำงานเท่าที่ควร ด้านล่างนี้คือสิ่งที่ฉันตรวจสอบจนถึงตอนนี้
$ kubectl รับบริการ -n kube-verify -o=wide
ประเภทชื่อ CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
echo-server ClusterIP 10.11.213.180 <ไม่มี> 8080/TCP 24h app=echo-server
$ kubectl รับพ็อด -n kube-system -o=wide
ชื่อ พร้อม สถานะ เริ่มใหม่ อายุ IP โหนด โหนดที่ได้รับการเสนอชื่อ เกตส์ความพร้อม
coredns-64897985d-47gpr 1/1 วิ่ง 1 (69m มาแล้ว) 41h 10.1.0.5 rpi-1-1 <ไม่มี> <ไม่มี>
coredns-64897985d-nf55w 1/1 Running 1 (69m ago) 41h 10.1.0.4 rpi-1-1 <ไม่มี> <ไม่มี>
etcd-rpi-1-1 1/1 Running 2 (69m ago) 41h 10.0.4.16 rpi-1-1 <ไม่มี> <ไม่มี>
kube-apiserver-rpi-1-1 1/1 วิ่ง 2 (69m ที่แล้ว) 41h 10.0.4.16 rpi-1-1 <ไม่มี> <ไม่มี>
kube-controller-manager-rpi-1-1 1/1 Running 2 (69m ago) 41h 10.0.4.16 rpi-1-1 <ไม่มี> <ไม่มี>
kube-flannel-ds-5467m 1/1 Running 1 (69m ago) 28h 10.0.4.17 rpi-1-2 <ไม่มี> <ไม่มี>
kube-flannel-ds-7wpvz 1/1 Running 1 (69m ago) 28h 10.0.4.18 rpi-1-3 <ไม่มี> <ไม่มี>
kube-flannel-ds-9chxk 1/1 Running 1 (69m ago) 28h 10.0.4.19 rpi-1-4 <ไม่มี> <ไม่มี>
kube-flannel-ds-x5rvx 1/1 วิ่ง 1 (69m ที่แล้ว) 29h 10.0.4.16 rpi-1-1 <ไม่มี> <ไม่มี>
kube-proxy-8bbjn 1/1 กำลังดำเนินการ 1 (69m ที่แล้ว) 28h 10.0.4.17 rpi-1-2 <ไม่มี> <ไม่มี>
kube-proxy-dw45d 1/1 กำลังทำงาน 1 (69m ที่แล้ว) 28h 10.0.4.18 rpi-1-3 <ไม่มี> <ไม่มี>
kube-proxy-gkkxq 1/1 กำลังทำงาน 2 (69m ที่แล้ว) 41h 10.0.4.16 rpi-1-1 <ไม่มี> <ไม่มี>
kube-proxy-ntl5w 1/1 กำลังทำงาน 1 (69m ที่แล้ว) 28h 10.0.4.19 rpi-1-4 <ไม่มี> <ไม่มี>
kube-scheduler-rpi-1-1 1/1 วิ่ง 2 (69m ที่แล้ว) 41h 10.0.4.16 rpi-1-1 <ไม่มี> <ไม่มี>
$ kubectl บันทึก kube-proxy-gkkxq -n kube-system
I0220 13:52:02.281289 1 node.go:163] ดึงข้อมูลโหนด IP สำเร็จ: 10.0.4.16
I0220 13:52:02.281535 1 server_others.go:138] "ตรวจพบโหนด IP" address="10.0.4.16"
I0220 13:52:02.281610 1 server_others.go:561] "โหมดพร็อกซีที่ไม่รู้จัก สมมติว่าเป็นพร็อกซี iptables" proxyMode=""
I0220 13:52:02.604880 1 server_others.go:206] "ใช้ iptables Proxier"
I0220 13:52:02.604966 1 server_others.go:213] "kube-proxy ทำงานในโหมด dual-stack" ipFamily=IPv4
I0220 13:52:02.605026 1 server_others.go:214] "กำลังสร้าง dualStackProxier สำหรับ iptables"
I0220 13:52:02.605151 1 server_others.go:491] "Detect-local-mode ตั้งค่าเป็น ClusterCIDR แต่ไม่มีการกำหนด CIDR ของคลัสเตอร์ IPv6 ค่าเริ่มต้นเป็น no-op detection-local สำหรับ IPv6"
I0220 13:52:02.606905 1 server.go:656] "ข้อมูลเวอร์ชัน" version="v1.23.3"
W0220 13:52:02.614777 1 sysinfo.go:203] โทโพโลยีของโหนดไม่พร้อมใช้งาน โดยให้โทโพโลยี CPU
I0220 13:52:02.619535 1 conntrack.go:52] "การตั้งค่า nf_conntrack_max" nf_conntrack_max=131072
I0220 13:52:02.620869 1 conntrack.go:100] "ตั้งค่า sysctl" รายการ="net/netfilter/nf_conntrack_tcp_timeout_close_wait" ค่า=3600
I0220 13:52:02.660947 1 config.go:317] "กำลังเริ่มต้นตัวควบคุมการกำหนดค่าบริการ"
I0220 13:52:02.661015 1 shared_informer.go:240] กำลังรอแคชซิงค์สำหรับการกำหนดค่าบริการ
I0220 13:52:02.662669 1 config.go:226] "การเริ่มต้นตัวควบคุมการกำหนดค่าส่วนปลาย"
I0220 13:52:02.662726 1 shared_informer.go:240] กำลังรอแคชเพื่อซิงค์สำหรับการกำหนดค่าส่วนปลาย
I0220 13:52:02.762734 1 shared_informer.go:247] มีการซิงค์แคชสำหรับการกำหนดค่าบริการ
I0220 13:52:02.762834 1 shared_informer.go:247] มีการซิงค์แคชสำหรับการกำหนดค่าส่วนปลาย
สิ่งที่ฉันสังเกตเห็นนี่คือว่า โทโพโลยีของโหนดไม่พร้อมใช้งาน
ดังนั้นฉันจึงเจาะลึกการกำหนดค่า kube-proxy เพิ่มเติม แต่ไม่มีอะไรโดดเด่นสำหรับฉัน
หากมีปัญหากับโทโพโลยีของโหนดในคลัสเตอร์ของฉัน โปรดแนะนำแหล่งข้อมูลบางอย่างเกี่ยวกับวิธีแก้ปัญหานี้ให้ฉัน เนื่องจากฉันไม่พบสิ่งที่มีความหมายจากข้อความแสดงข้อผิดพลาดนี้
$ kubectl อธิบาย configmap kube-proxy -n kube-system
ชื่อ: kube-proxy
เนมสเปซ: ระบบ kube
ป้ายกำกับ: app=kube-proxy
คำอธิบายประกอบ: kubeadm.kubernetes.io/component-config.hash: sha256:edce433d45f2ed3a58ee400690184ad033594e8275fdbf52e9c8c852caa7124d
ข้อมูล
====
config.conf:
----
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
bindAddressHardFail: เท็จ
การเชื่อมต่อลูกค้า:
ยอมรับเนื้อหาประเภท: ""
ระเบิด: 0
ชนิดของเนื้อหา: ""
kubeconfig: /var/lib/kube-proxy/kubeconfig.conf
qps: 0
คลัสเตอร์CIDR: 10.1.0.0/16
configSyncPeriod: 0 วินาที
คอนแทร็ก:
maxPerCore: null
นาที: เป็นโมฆะ
tcpCloseWaitTimeout: null
tcpEstablishedTimeout: null
ตรวจจับโหมดท้องถิ่น: ""
enableProfiling: เท็จ
healthzBindAddress: ""
ชื่อโฮสต์โอเวอร์ไรด์: ""
iptables:
สวมหน้ากากทั้งหมด: เท็จ
มาสเคอเรดบิต: null
minSyncPeriod: 0 วินาที
ระยะเวลาซิงค์: 0 วินาที
IPV:
ไม่รวม CIDRs: null
minSyncPeriod: 0 วินาที
กำหนดการ: ""
ARRP ที่เข้มงวด: เท็จ
ระยะเวลาซิงค์: 0 วินาที
tcpFinTimeout: 0 วินาที
tcpTimeout: 0 วินาที
udpTimeout: 0 วินาที
ประเภท: KubeProxyConfiguration
เมตริกBindAddress: ""
โหมด: ""
nodePortAddresses: null
oomScoreAdj: null
ช่วงพอร์ต: ""
showHiddenMetricsForVersion: ""
udpIdleTimeout: 0 วินาที
เคอร์เนล:
enableDSR: เท็จ
ชื่อเครือข่าย: ""
แหล่งที่มาวีไอพี: ""
kubeconfig.conf:
----
api เวอร์ชัน: v1
ประเภท: การกำหนดค่า
คลัสเตอร์:
- กลุ่ม:
ผู้ออกใบรับรอง: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
เซิร์ฟเวอร์: https://10.0.4.16:6443
ชื่อ: ค่าเริ่มต้น
บริบท:
- บริบท:
คลัสเตอร์: ค่าเริ่มต้น
เนมสเปซ: ค่าเริ่มต้น
ผู้ใช้: ค่าเริ่มต้น
ชื่อ: ค่าเริ่มต้น
บริบทปัจจุบัน: ค่าเริ่มต้น
ผู้ใช้:
- ชื่อ: ค่าเริ่มต้น
ผู้ใช้:
ไฟล์โทเค็น: /var/run/secrets/kubernetes.io/serviceaccount/token
ข้อมูลไบนารี
====
เหตุการณ์: <ไม่มี>
$ kubectl -n kube-system exec kube-proxy-gkkxq cat /var/lib/kube-proxy/kubeconfig.conf
kubectl exec [POD] [COMMAND] เลิกใช้แล้วและจะถูกลบออกในเวอร์ชันอนาคต ใช้ kubectl exec [POD] -- [COMMAND] แทน
api เวอร์ชัน: v1
ประเภท: การกำหนดค่า
คลัสเตอร์:
- กลุ่ม:
ผู้ออกใบรับรอง: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
เซิร์ฟเวอร์: https://10.0.4.16:6443
ชื่อ: ค่าเริ่มต้น
บริบท:
- บริบท:
คลัสเตอร์: ค่าเริ่มต้น
เนมสเปซ: ค่าเริ่มต้น
ผู้ใช้: ค่าเริ่มต้น
ชื่อ: ค่าเริ่มต้น
บริบทปัจจุบัน: ค่าเริ่มต้น
ผู้ใช้:
- ชื่อ: ค่าเริ่มต้น
ผู้ใช้:
ไฟล์โทเค็น: /var/run/secrets/kubernetes.io/serviceaccount/token
เดอะ โหมด
ค่าเริ่มต้นเป็น iptables
ตามที่บันทึกด้านบนยืนยัน
ฉันยังเปิดใช้งานการส่งต่อ IP บนโหนดทั้งหมด
$ sudo sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1