Score:2

archlinux: kubernetes - coredns ทำงานไม่ถูกต้อง

ธง in

ฉันติดตั้ง kubernetes แล้ว v1.23.0 โดยมี Arch Linux เป็นการกระจาย คลัสเตอร์ประกอบด้วยมาสเตอร์และโหนด ระบบบูธเป็น VM ที่ใช้ KVM

เมื่อพ็อดต้องการสร้างการสืบค้น DNS พ็อดจะได้รับการหมดเวลาเมื่อบริการส่งต่อคำขอไปยังอินสแตนซ์พ็อดของ coredns ซึ่งทำงานบนโหนด kubernetes อื่น

ดังนั้นฉันจึงสงสัยว่าผู้ให้บริการเครือข่ายทำงานไม่ถูกต้องหรือไม่ได้ตั้งค่าบางอย่าง (โมดูลเคอร์เนล, sysctl, ect) เนื่องจากเมื่อคำขอถูกส่งต่อไปยังอินสแตนซ์ coredns pod ที่รันอยู่ในเครื่อง ไคลเอนต์จะได้รับการตอบกลับ นี่คือขั้นตอนการดีบักของฉัน:

  1. ก่อนที่ฉันจะเริ่มดีบัก ฉันเพิ่มระดับบันทึกของ coredns โดยการเพิ่ม บันทึก ไปยัง configmap ของ coredns
# kubectl รับ -n configmaps ระบบ kube coredns -o yaml
api เวอร์ชัน: v1
ข้อมูล:
  คอร์ไฟล์: |
    .:53 {
        บันทึก
        ข้อผิดพลาด
        สุขภาพ {
           ลาเมดดัค 5s
        }
        พร้อม
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           พ็อดไม่ปลอดภัย
           Fallthrough ใน addr.arpa ip6.arpa
           ttl 30
        }
        โพรมีธีอุส :9153
        ซึ่งไปข้างหน้า . /etc/resolv.conf {
           max_concurrent 1,000
        }
        แคช 30
        ห่วง
        โหลดใหม่
        โหลดบาลานซ์
    }
  1. ฉันปรับใช้เป็นการดีบักสภาพแวดล้อมคอนเทนเนอร์เครือข่ายของฉันด้วยเครื่องมือเครือข่ายเช่น ขุด, nslookup และอื่น ๆ เพื่อทดสอบอินสแตนซ์ coredns ต่างๆ
kubectl ใช้ -f https://raw.githubusercontent.com/volker-raschek/network-tools/master/network-tools.yml
  1. มีพ็อดและบริการต่อไปนี้ของ coredns:
kubectl รับพ็อด บริการ -n kube-system -l k8s-app=kube-dns -o กว้าง
ชื่อ พร้อม สถานะ เริ่มใหม่ อายุ IP โหนด โหนดที่ได้รับการเสนอชื่อ เกตส์ความพร้อม
pod/coredns-64897985d-cgxmv 1/1 กำลังทำงาน 0 24 ชม. 10.85.0.4 archlinux-x86-64-000 <ไม่มี> <ไม่มี>
pod/coredns-64897985d-l9ftl 1/1 กำลังทำงาน 0 24 ชม. 10.85.0.3 archlinux-x86-64-001 <ไม่มี> <ไม่มี>

ประเภทชื่อ CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
บริการ/kube-dns ClusterIP 10.96.0.10 <ไม่มี> 53/UDP,53/TCP,9153/TCP 24 ชม. k8s-app=kube-dns
  1. ดำเนินการเชลล์ในพ็อดเครือข่ายของฉันและพยายามค้นหาที่อยู่ IP ของ กูเกิล.คอม ผ่านทาง แกนกลาง บริการ. วิธีการจดจำคำสั่งนั้นใช้เวลาต่างกัน ขออภัย ฉันไม่สามารถทำซ้ำข้อผิดพลาดการหมดเวลาผ่านบริการ:
# kubectl exec เครื่องมือเครือข่าย -- เวลาขุด A google.com @ 10.96.0.10 +short
142.250.185.238
จริง 0m 5.02s
ผู้ใช้ 0m 0.02s
ระบบ 0m 0.00s
# kubectl exec เครื่องมือเครือข่าย -- เวลาขุด A google.com @ 10.96.0.10 +short
142.250.185.238
จริง 0m 0.03s
ผู้ใช้ 0m 0.01s
ระบบ 0m 0.00s
# kubectl exec เครื่องมือเครือข่าย -- เวลาขุด A google.com @ 10.96.0.10 +short
142.250.185.238
จริง 0m 10.03s
ผู้ใช้ 0m 0.01s
ระบบ 0m 0.01s
  1. ตอนนี้ฉันจำกัดการสืบค้นไว้ที่คอร์คอร์นส์พ็อดต่างๆ สังเกตว่าฝัก coredns-64897985d-cgxmv ด้วยไอพี 10.85.0.4 กำลังทำงานบนโหนดอื่น

พ็อด/coredns-64897985d-l9ftl / 10.85.0.3

kubectl exec เครื่องมือเครือข่าย -- เวลาขุด A google.com @ 10.85.0.3 +short
142.251.36.206
จริง 0m 0.09s
ผู้ใช้ 0m 0.00s
ระบบ 0m 0.01s

พ็อด/coredns-64897985d-cgxmv / 10.85.0.4

นี่คือข้อผิดพลาดการหมดเวลาเมื่อใช้อย่างชัดเจน แกนกลาง พ็อดของโหนดอื่น

# kubectl exec เครื่องมือเครือข่าย -- เวลาขุด A google.com @ 10.85.0.4 +short

; <<>> DiG 9.16.20 <<>> A google.com @10.85.0.4 +short
;; ตัวเลือกส่วนกลาง: +cmd
;; หมดเวลาการเชื่อมต่อ; ไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้

คำสั่งออกโดยสถานะไม่เป็นศูนย์ 9
จริง 0m 15.02s
ผู้ใช้ 0m 0.02s
ระบบ 0m 0.00s
คำสั่งสิ้นสุดด้วยรหัสทางออก 9
  1. บันทึกต่อไปนี้เขียนโดย แกนกลาง ฝัก:

พ็อด/coredns-64897985d-l9ftl / 10.85.0.3

# บันทึก kubectl -n ระบบ kube coredns-64897985d-l9ftl 
.:53
[INFO] ปลั๊กอิน/โหลดซ้ำ: กำลังรันการกำหนดค่า MD5 = db32ca3650231d74073ff4cf814959a7
CoreDNS-1.8.6
ลินุกซ์/amd64, go1.17.1, 13a9191
[INFO] กำลังโหลดซ้ำ
[INFO] ปลั๊กอิน/สุขภาพ: เข้าสู่โหมดลาเมดัคเป็นเวลา 5 วินาที
[INFO] ปลั๊กอิน/โหลดซ้ำ: กำลังรันการกำหนดค่า MD5 = 3d3f6363f05ccd60e0f885f0eca6c5ff
[INFO] การโหลดซ้ำเสร็จสมบูรณ์
[INFO] 127.0.0.1:54962 - 9983 "HINFO IN 4683476401105705616.5032820535498752139.udp 57 false 512" NXDOMAIN qr,rd,ra 132 0.058383302s
[INFO] 10.85.0.1:24999 - 26748 "A IN google.com. udp 51 false 4096" NOERROR qr,rd,ra 1549 0.070006969s
[INFO] 10.85.0.1:6142 - 9467 "A IN google.com. udp 51 false 4096" NOERROR qr,aa,rd,ra 1549 0.000959536s
[INFO] 10.85.0.1:2544 - 20425 "A IN google.com. udp 51 false 4096" NOERROR qr,aa,rd,ra 1549 0.00065977s
[INFO] 10.85.0.1:26782 - 372 "A IN google.com. udp 51 false 4096" NOERROR qr,aa,rd,ra 1549 0.001292768s
[INFO] 10.85.0.1:62687 - 27302 "ใน google.com.udp 51 เท็จ 4096" 
...

พ็อด/coredns-64897985d-cgxmv / 10.85.0.4

# บันทึก kubectl -n ระบบ kube coredns-64897985d-cgxmv
.:53
[INFO] ปลั๊กอิน/โหลดซ้ำ: กำลังรันการกำหนดค่า MD5 = db32ca3650231d74073ff4cf814959a7
CoreDNS-1.8.6
ลินุกซ์/amd64, go1.17.1, 13a9191
[INFO] กำลังโหลดซ้ำ
[INFO] ปลั๊กอิน/สุขภาพ: เข้าสู่โหมดลาเมดัคเป็นเวลา 5 วินาที
[INFO] ปลั๊กอิน/โหลดซ้ำ: กำลังรันการกำหนดค่า MD5 = 3d3f6363f05ccd60e0f885f0eca6c5ff
[INFO] การโหลดซ้ำเสร็จสมบูรณ์

เพื่อให้ปัญหาแคบลง ฉันติดตั้งคลัสเตอร์ใหม่ผ่าน ansible และติดตั้งผ้าดิบแทนผ้าสักหลาดโดยใช้คำสั่งด้านล่าง มีปัญหาเดียวกันอยู่ที่นั่น

$ หางเสือติดตั้งโครงการผ้าดิบ calico/tigera-operator --version v3.21.3

ฉันใช้ คู่มือการติดตั้ง kubeadm เพื่อเริ่มต้นคลัสเตอร์ ฉันดำเนินการต่อไปนี้ kubeadmin เริ่มต้น คำสั่งเพื่อเริ่มต้นคลัสเตอร์:

$ kubeadm เริ่มต้น \
  --apiserver-advertise-address=192.168.179.101 \
  --apiserver-cert-extra-sans=api.example.com \
  --control-plane-endpoint=192.168.179.100 \
  --cri-socket=unix://var/run/crio/crio.sock \
  --pod-network-cidr=10.244.0.0/16 \
  --อัปโหลด-ใบรับรอง

โมดูลเคอร์เนล br_netfilter และมีการกำหนดคุณสมบัติ sysctl แต่ปัญหายังคงมีอยู่ ฉันอยู่ที่จุดสิ้นสุดของแนวทางการแก้ปัญหาของฉันและต้องการคำแนะนำจากผู้เชี่ยวชาญที่นี่ ด้านล่างนี้คือรายการโมดูลเคอร์เนลของฉัน การตั้งค่า sysctl และข้อมูลอื่นๆ

ฉันหวังว่าจะมีคนช่วยฉันได้

ข้อมูลเคอร์เนล

$ uname -a
Linux archlinux-x86-64-000 5.10.90-1-lts #1 SMP วันพุธที่ 5 มกราคม 2022 13:07:40 +0000 x86_64 GNU/Linux

โมดูลเคอร์เนล

$ lsmod | เรียงลำดับ
ac97_bus 16384 1 snd_soc_core
aesni_intel 372736 0
agpgart 53248 4 intel_agp,intel_gtt,ttm,drm
atkbd 36864 0
bpf_preload 16384 0
บริดจ์ 274432 1 br_netfilter
br_netfilter 32768 0
cec 61440 1 drm_kms_helper
cfg80211 983040 0
crc16 16384 1 ต่อ 4
crc32c_generic 16384 0
crc32c_intel 24576 3
crc32_pclmul 16384 0
crct10dif_pclmul 16384 1
cryptd 24576 2 crypto_simd,ghash_clmulni_intel
crypto_simd 16384 1 aesni_intel
drm 577536 5 drm_kms_helper,qxl,drm_ttm_helper,ttm
drm_kms_helper 278528 3 qxl
drm_ttm_helper 16384 1 qxl
ต่อ4 933888 1
ล้มเหลว 16384 1 net_failover
ไขมัน 86016 1 vไขมัน
fb_sys_fops 16384 1 drm_kms_helper
ฟิวส์ 167936 1
ghash_clmulni_intel 16384 0
glue_helper 16384 1 aesni_intel
i2c_i801 36864 0
i2c_smbus 20480 1 i2c_i801
i8042 36864 0
intel_agp 24576 0
intel_gtt 24576 1 intel_agp
intel_pmc_bxt 16384 1 iTCO_wdt
intel_rapl_common 28672 1 intel_rapl_msr
intel_rapl_msr 20480 0
ip6_udp_tunnel 16384 1 vxlan
ip_set 57344 0
ip_tables 32768 0
ipt_REJECT 16384 0
ip_vs 184320 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
ip_vs_rr 16384 0
ip_vs_sh 16384 0
ip_vs_wrr 16384 0
irqbypass 16384 1 kvm
iTCO_vendor_support 16384 1 iTCO_wdt
iTCO_wdt 16384 0
jbd2 151552 1 ต่อ 4
จอยเดฟ 28672 0
kvm 933888 1 kvm_intel
kvm_intel 331776 0
ledtrig_audio 16384 1 snd_hda_codec_generic
libcrc32c 16384 4 nf_conntrack,nf_nat,nf_tables,ip_vs
libps2 20480 2 atkbd,psmouse
llc 16384 2 สะพาน,stp
lpc_ich 28672 0
mac_hid 16384 0
mbcache 16384 1 ต่อ 4
ขนาดโมดูลที่ใช้โดย
เมาส์เดฟ 24576 0
net_failover 24576 1 virtio_net
nf_conntrack 172032 6 xt_conntrack,nf_nat,xt_nat,nf_conntrack_netlink,xt_MASQUERADE,ip_vs
nf_conntrack_netlink 57344 0
nf_defrag_ipv4 16384 1 nf_conntrack
nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
nf_nat 57344 3 xt_nat,nft_chain_nat,xt_MASQUERADE
nfnetlink 20480 4 nft_compat,nf_conntrack_netlink,nf_tables,ip_set
nf_reject_ipv4 16384 1 ipt_REJECT
nf_tables 249856 183 nft_compat,nft_counter,nft_chain_nat
nft_chain_nat 16384 7
nft_compat 20480 122
nft_counter 16384 84
nls_iso8859_1 16384 0
ซ้อนทับ 147456 18
pcsspkr 16384 0
psmouse 184320 0
qemu_fw_cfg 20480 0
qxl 73728 0
แร็ป 16384 0
rfkill 28672 2 cfg80211
rng_core 16384 1 virtio_rng
serio 28672 6 serio_raw,atkbd,psmouse,i8042
serio_raw 20480 0
snd 114688 8 snd_hda_codec_generic,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_timer,snd_compress,snd_soc_core,snd_pcm
snd_compress 32768 1 snd_soc_core
snd_hda_codec 172032 2 snd_hda_codec_generic,snd_hda_intel
snd_hda_codec_generic 98304 1
snd_hda_core 110592 3 snd_hda_codec_generic,snd_hda_intel,snd_hda_codec
snd_hda_intel 57344 0
snd_hwdep 16384 1 snd_hda_codec
snd_intel_dspcfg 28672 1 snd_hda_intel
snd_pcm 147456 7 snd_hda_intel,snd_hda_codec,soundwire_intel,snd_compress,snd_soc_core,snd_hda_core,snd_pcm_dmaengine
snd_pcm_dmaengine 16384 1 snd_soc_core
snd_soc_core 327680 1 soundwire_intel
snd_timer 49152 1 snd_pcm
ซาวด์คอร์ 16384 1 snd
soundwire_bus 90112 3 soundwire_intel,soundwire_generic_allocation,soundwire_cadence
soundwire_cadence 36864 1 soundwire_intel
soundwire_generic_allocation 16384 1 soundwire_intel
soundwire_intel 45056 1 snd_intel_dspcfg
stp 16384 1 สะพาน
ระยะส่องกล้อง 16384 1 drm_kms_helper
sysfillrect 16384 1 drm_kms_helper
sysimgblt 16384 1 drm_kms_helper
ttm 114688 2 qxl,drm_ttm_helper
udp_tunnel 20480 1 vxlan
usbhid 65536 0
วธ 32768 0
วีแฟต 24576 0
virtio_balloon 24576 0
virtio_blk 20480 2
virtio_console 40960 0
virtio_net 61440 0
virtio_pci 28672 0
virtio_rng 16384 0
วีเอ็กซ์แลน 77824 0
xhci_pci 20480 0
xhci_pci_renesas 20480 1 xhci_pci
x_tables 53248 11 xt_conntrack,xt_statistic,nft_compat,xt_tcpudp,xt_addrtype,xt_nat,xt_comment,ipt_REJECT,ip_tables,xt_MASQUERADE,xt_mark
xt_addrtype 16384 2
xt_comment 16384 64
xt_conntrack 16384 13
xt_mark 16384 12
xt_MASQUERADE 20480 6
xt_nat 16384 7
xt_statistic 16384 3
xt_tcpudp 20480 15

ระบบ

เปิดคุณสมบัติ sysctl ถังขยะ. เกินจำนวนอักขระสูงสุดสำหรับความผิดพลาดของเซิร์ฟเวอร์

Mikolaj S. avatar
cn flag
คุณช่วยอธิบายสิ่งนี้ได้ไหม ->"เมื่อพ็อดต้องการสร้างการสืบค้น DNS เป็น coredns มันจะได้รับการหมดเวลาเมื่อบริการส่งต่อคำขอไปยังอินสแตนซ์พ็อดของ coredns ที่ทำงานอยู่ภายนอก" คุณสร้างแบบสอบถาม DNS เป็น CoreDNS ได้อย่างไร คุณรู้ได้อย่างไรว่าหมดเวลา คุณช่วยตรวจสอบบันทึกของ CoreDNS pods (`kubectl logs --namespace=kube-system -l k8s-app=kube-dns`) ได้ไหม
Volker Raschek avatar
in flag
@MikolajS. ฉันเปลี่ยนคำอธิบายของปัญหาและเพิ่มข้อมูลเพิ่มเติม
Mikolaj S. avatar
cn flag
คุณช่วยแชร์แฟล็กที่คุณใช้สำหรับคำสั่ง `kubeadm init` ได้ไหม โดยเฉพาะอย่างยิ่ง คุณใช้แฟล็ก `--pod-network-cidr` หรือไม่ คุณติดตั้ง Calico CNI อย่างไร - มีวิธีแก้ไขที่เป็นไปได้สองสามวิธี คุณใช้วิธีใด คุณระบุ [pod CIDR สำหรับ Calico ด้วย](https://projectcalico.docs.tigera.io/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-on-nodes) ที่ถูกต้องหรือไม่
Volker Raschek avatar
in flag
สวัสดี @MikolajS ฉันเปลี่ยนคำอธิบายอีกครั้งและเพิ่มคำสั่ง `kubeadm init` ใช่ ฉันใช้ธง `--pod-network-cidr` และติดตั้งผ้าดิบผ่านหางเสือ ไม่มีการเปลี่ยนแปลงค่าต่างๆ .yaml และไม่ได้กำหนดตัวแปรสภาพแวดล้อม `CALICO_IPV4POOL_CIDR`
Volker Raschek avatar
in flag
ในการติดตั้ง kubernetes แพ็คเกจ `iptables` จะต้องถูก [แทนที่](https://github.com/archlinux/svntogit-community/blob/packages/kubernetes/trunk/PKGBUILD#L14) โดย `iptables-nft` . การเปลี่ยนแปลงไม่ได้ทำให้เกิดข้อจำกัด? ฉันพบโพสต์ต่อไปนี้เกี่ยวกับการปิดใช้งานโมดูล iptables https://mihail-milev.medium.com/no-pod-to-pod-communication-on-centos-8-kubernetes-with-calico-56d694d2a6f4
Mikolaj S. avatar
cn flag
ขอบคุณสำหรับข้อมูลทั้งหมด ฉันจะพยายามจำลองปัญหาของคุณและตรวจสอบว่าสามารถทำอะไรได้บ้าง
Mikolaj S. avatar
cn flag
คุณตรวจสอบทั้ง `iptables` ที่ติดตั้ง (ฉันหมายถึงรุ่นเก่าและรุ่น nft) หรือไม่ คุณสามารถรันคำสั่ง `iptables -v` ได้หรือไม่?
Volker Raschek avatar
in flag
สวัสดี @MikolajS. ฉันพบวิธีแก้ปัญหาว่าทำไมผ้าดิบและปลั๊กอิน cni อื่น ๆ ไม่ทำงาน นี่คือการอภิปรายเกี่ยวกับปัญหาของรันไทม์ crio พื้นฐาน https://github.com/cri-o/cri-o/issues/2885#issuecomment-1015732983
Score:1
ธง cn

การโพสต์คำตอบ wiki ของชุมชนตามหัวข้อ GitHub - ไฟล์ที่รวมอยู่ใน CentOS RPM รบกวนการทำงานของ CNI และหน้า ArchLinux wiki - คริโอ-โอ. อย่าลังเลที่จะขยาย


ปัญหานี้เป็นที่รู้จักและอธิบายไว้ใน ArchLinux วิกิ:

คำเตือน: Arch ติดตั้งปลั๊กอินที่จัดทำโดย ปลั๊กอิน cni ไปทั้งคู่ /usr/lib/cni และ /opt/cni/bin แต่ปลั๊กอินอื่นๆ ส่วนใหญ่ (เช่น การปรับใช้ในคลัสเตอร์ ปลั๊กอินที่จัดการโดย kubelet ฯลฯ) โดยค่าเริ่มต้นจะติดตั้งเฉพาะในไดเร็กทอรีที่สองเท่านั้น

CRI-O ได้รับการกำหนดค่าให้ค้นหาปลั๊กอินในไดเร็กทอรีแรกเท่านั้น และเป็นผลให้ปลั๊กอินใดๆ ในไดเร็กทอรีที่สองไม่สามารถใช้งานได้หากไม่มีการเปลี่ยนแปลงการกำหนดค่าบางอย่าง

วิธีแก้ปัญหาถูกนำเสนอใน โพสต์นี้โดยผู้ใช้ bart0sh:

ฉันใช้วิธีแก้ปัญหาต่อไปนี้:

  • ติดตั้ง ไคร-โอ
  • ลบทุกอย่างออกจาก /etc/cni/net.d
  • ติดตั้งโหนดด้วย kubeadm
  • ติดตั้งปลั๊กอิน cni (คลื่น ผ้าสักหลาด ผ้าดิบ ฯลฯ)

และ การกำหนดค่าเพิ่มเติมที่นำเสนอโดยผู้ใช้ volker-raschek:

นอกเหนือจากการกำหนดค่า CNI ภายใต้ /etc/cni/net.d,ส่วนขยายของ plugin_dirs ทรัพย์สินหายไปใน crio.conf การกำหนดค่าเนื่องจาก คริโอ ดูเหมือนไม่เข้าตา /opt/cni สำหรับปลั๊กอินที่เปิดตัวตามค่าเริ่มต้น ฉันสร้างไฟล์ดรอปอิน

$cat /etc/crio/crio.conf.d/00-plugin-dir.conf
[crio.network]
plugin_dirs = [
 "/opt/cni/bin/",
 "/usr/lib/cni",
]

โพสต์คำตอบ

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