Score:0

Keepalived จะไม่ส่งต่อการรับส่งข้อมูลไปยังโหนดสำรองหลังจากการตั้งค่าคลัสเตอร์ Kubernetes

ธง cn

โครงสร้างระบบ:

  • 10.10.1.86: โหนดหลัก Kubernetes
  • 10.10.1.87: Kubernetes ผู้ปฏิบัติงาน 1 โหนด; รักษาชีวิต โหนดหลัก
  • 10.10.1.88: โหนดผู้ปฏิบัติงาน Kubernetes 2; รักษาชีวิต โหนดสำรอง
  • 10.10.1.90: VIP, จะโหลดยอดไปที่ .87 & .88; ดำเนินการโดย รักษาชีวิต.

คลัสเตอร์ Kubernetes นี้เป็น dev env กำลังทดสอบการรวบรวมบันทึก netflow

สิ่งที่ฉันต้องการบรรลุคือ:

  1. บันทึกเราเตอร์ / สวิตช์ netflow ทั้งหมดส่งออกครั้งแรกไปที่ .90
  2. จากนั้นใช้ รักษาชีวิต เพื่อโหลดบาลานซ์ (lb_ชนิด: แนท) ถึง .87 & .88ซึ่งเป็นพนักงาน Kubernetes สองคน
  3. มี โหนดพอร์ต บริการจับทราฟฟิกเหล่านี้ไปยังคลัสเตอร์ Kubernetes และทำงานแยกวิเคราะห์ข้อมูลที่เหลือ
  • สิ่งที่ต้องการ:
        | {เครือข่ายระบบปฏิบัติการ} | {เครือข่าย Kubernetes}

                                K8s Worker -> filebeat -> logstash (การปรับใช้)
                              /
<ข้อมูล> -> [VIP] โหลดบาลานซ์
                              \ 
                                K8s Worker -> filebeat -> logstash (การปรับใช้)
  • filebeat.yml (ได้ทดสอบแล้วว่าทราฟฟิกทุกอย่างเรียบร้อยดีหลังจากใช้ filebeat ดังนั้นฉันจึงใช้ ไฟล์ ส่งออกไปยังสาเหตุหลักที่แคบลง)
# cat filebeat.yml
filebeat.inputs:

- ประเภท: tcp
  max_message_size: 10MiB
  โฮสต์: "0.0.0.0:5100"

- ประเภท: udp
  max_message_size: 10KiB
  โฮสต์: "0.0.0.0:5150"




#output.logstash:
# โฮสต์: ["10.10.1.87:30044", "10.10.1.88:30044"]
ไฟล์เอาต์พุต:
  เส้นทาง: "/tmp/"
  ชื่อไฟล์: tmp-filebeat.out

Kubernetes

  • Master และ Workers เป็น VM 3 เครื่องใน env ส่วนตัวของฉัน ไม่ใช่ผู้ให้บริการ GCP หรือ AWS รายใดเลย
  • รุ่น:
#รุ่นkubectl
เวอร์ชันไคลเอนต์: version.Info{หลัก:"1", รอง:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"สะอาด", BuildDate:"2021-04-08T16:31: 21Z", GoVersion:"go1.16.1", คอมไพเลอร์:"gc", แพลตฟอร์ม:"linux/amd64"}
เวอร์ชันเซิร์ฟเวอร์: version.Info{หลัก:"1", รอง:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"สะอาด", BuildDate:"2021-04-08T16:25: 06Z", GoVersion:"go1.16.1", คอมไพเลอร์:"gc", แพลตฟอร์ม:"linux/amd64"}
  • บริการ
# cat logstash.service.yaml
api เวอร์ชัน: v1
ชนิด:บริการ
ข้อมูลเมตา:
  ชื่อ: บริการ logstash
ข้อมูลจำเพาะ:
  ประเภท: NodePort
  ตัวเลือก:
    แอพ: logstash
  พอร์ต:
    - พอร์ต: 9514
      ชื่อ: tcp-พอร์ต
      พอร์ตเป้าหมาย: 9514
      โหนดพอร์ต: 30044
  • เมื่อข้อมูลเข้าสู่ Kubernetes ทุกอย่างก็ทำงานได้ดี
  • มันเป็นยอดโหลดวีไอพีที่ไม่ได้ส่งต่อ

คอนเฟิร์ม Keepalive

ไฟล์คอนฟิกูเรชันสำหรับ Keepalive
global_defs {
  router_id proxy1 # `proxy 2` ที่โหนดอื่น
}


vrrp_instance VI_1 {
  ระบุ MASTER # `BACKUP` ที่โหนดอื่น
  อินเทอร์เฟซ ens160
  virtual_router_id41
  ลำดับความสำคัญ 100 # `50` ที่อีกโหนด
  advert_int 1
  virtual_ipaddress {
    10.10.1.90/23
  }
}

virtual_server 10.10.1.90 5100 {
  ดีเลย์_ลูป30
  lb_algo rr
  lb_kind แนท
  โปรโตคอล TCP
  การคงอยู่_หมดเวลา 0

  เซิร์ฟเวอร์จริง 10.10.1.87 5100 {
    น้ำหนัก 1
  }
  เซิร์ฟเวอร์จริง 10.10.1.88 5100 {
    น้ำหนัก 1
  }
}
virtual_server 10.10.1.90 5150 {
  ดีเลย์_ลูป30
  lb_algo rr
  lb_kind แนท
  โปรโตคอล UDP
  การคงอยู่_หมดเวลา 0

  เซิร์ฟเวอร์จริง 10.10.1.87 5150 {
    น้ำหนัก 1
  }
  เซิร์ฟเวอร์จริง 10.10.1.88 5150 {
    น้ำหนัก 1
  }

ใช้งานได้ก่อนการตั้งค่าคลัสเตอร์ Kubernetes

  • ทั้งคู่ .87 & .88 ได้ติดตั้ง รักษาชีวิต, และ โหลดบาลานซ์ (RoundRobin) ทำงานได้ดี (TCP และ UDP)
  • หยุด รักษาชีวิต บริการ (systemctl หยุด Keepalive) เมื่อจะตั้งค่าคลัสเตอร์ kubernetes ในกรณี

ปัญหาเกิดขึ้นหลังจากการตั้งค่าคลัสเตอร์ Kubernetes

  • พบว่ามีเพียงโหนด MASTER เท่านั้น .87 สามารถส่งต่อการรับส่งข้อมูลได้ VIP ไม่สามารถส่งต่อไปยังโหนดสำรองได้ .88.
  • ข้อมูลที่ส่งต่อจาก MASTER ถูกจับสำเร็จโดย kubernetes โหนดพอร์ต และการปรับใช้

โจทย์ทดสอบโดย เอ็นซี:

  • เอ็นซี: เฉพาะผู้ถือ VIP (โหนด MASTER) เท่านั้นที่สามารถส่งต่อทราฟฟิกได้ เมื่อใด ส่งต่อไปยัง BACKUP จะแสดงหมดเวลา
  • ยังทดสอบโดย nc -l 5100 บนเซิร์ฟเวอร์ทั้งสอง โหนด MASTER เท่านั้นที่ได้รับผลลัพธ์
# echo "ทดสอบ" | nc 10.10.1.90 5100
# echo "ทดสอบ" | nc 10.10.1.90 5100
Ncat: การเชื่อมต่อหมดเวลา
# echo "ทดสอบ" | nc 10.10.1.90 5100
# echo "ทดสอบ" | nc 10.10.1.90 5100
Ncat: การเชื่อมต่อหมดเวลา

ข้อมูลบางอย่าง

  • รุ่นแพ็คเกจ
# rpm -qa |grep keepalive
keepalive-1.3.5-19.el7.x86_64
  • Kubernetes CNI: ผ้าดิบ
# kubectl รับ pod -n kube-system
สถานะพร้อมชื่อเริ่มอายุใหม่
ผ้าดิบ-kube-controllers-b656ddcfc-wnkcj 1/1 วิ่ง 2 78d
ผ้าดิบโหนด vnf4d 1/1 วิ่ง 8 78d
ผ้าดิบโหนด xgzd5 1/1 วิ่ง 1 78d
ผ้าดิบโหนด zt25t 1/1 วิ่ง 8 78d
coredns-558bd4d5db-n6hnn 1/1 กำลังวิ่ง 2 78d
coredns-558bd4d5db-zz2rb 1/1 วิ่ง 2 78d
etcd-a86.axv.bz 1/1 วิ่ง 2 78d
kube-apiserver-a86.axv.bz 1/1 กำลังทำงาน 2 78d
kube-controller-manager-a86.axv.bz 1/1 กำลังทำงาน 2 78d
kube-proxy-ddwsr 1/1 กำลังรัน 2 78d
kube-proxy-hs4dx 1/1 วิ่ง 3 78d
kube-proxy-qg2nq 1/1 กำลังทำงาน 1 78d
kube-scheduler-a86.axv.bz 1/1 กำลังทำงาน 2 78d
  • ipvsadm (ผลลัพธ์เดียวกันบน .87, .88)
# ipvsadm -ln
IP Virtual Server เวอร์ชัน 1.2.1 (size=4096)
Prot LocalAddress: ธงตัวกำหนดตารางเวลาพอร์ต
  -> ที่อยู่ระยะไกล: น้ำหนักพอร์ตไปข้างหน้า ActiveConn InActConn
TCP 10.10.1.90:5100 rr
  -> 10.10.1.87:5100 มาสค 1 0 0
  -> 10.10.1.88:5100 มาสค 1 0 0
UDP 10.10.1.90:5150 rr
  -> 10.10.1.87:5150 มาสค 1 0 0
  -> 10.10.1.88:5150 มาสค 1 0 0
  • เซลินุกซ์อยู่เสมอ อนุญาต
  • ถ้าหยุด ไฟร์วอลล์ยังไม่ทำงานเช่นกัน
  • ระบบ ความแตกต่าง:
# ก่อน:
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.all.forwarding = 0
net.ipv4.conf.all.route_localnet = 0
net.ipv4.conf.default.forwarding = 0
net.ipv4.conf.lo.forwarding = 0
net.ipv4.ip_forward = 0

# หลังจาก
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.route_localnet = 1
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.lo.forwarding = 1
net.ipv4.ip_forward = 1

ไม่แน่ใจว่าตอนนี้สามารถเช็คอะไรเพิ่มเติมได้อีกหรือไม่ โปรดแนะนำ ขอบคุณ!

Mikołaj Głodziak avatar
id flag
คุณตั้งค่าคลัสเตอร์ของคุณอย่างไร คุณใช้ Kubernetes เวอร์ชันใด คุณใช้ผู้ให้บริการคลาวด์หรือคุณใช้โลหะเปล่าหรือไม่? คุณกำหนดค่าเครือข่ายภายในคลัสเตอร์ของคุณอย่างไร โปรดแนบไฟล์ yaml คุณทดสอบทุกอย่างบน Kubernetes ได้อย่างไร
Kenting avatar
cn flag
ขออภัย (หลังจากการทดสอบ 'nc' ฉันแน่ใจว่ามีบางอย่างผิดพลาดในการจัดสรรภาระงาน VIP ไปยังโหนดสำรอง ดังนั้นฉันจึงไม่ได้แนบข้อมูล Kubernetes) ; อัปเดตบริการ 'NodePort' แล้ว ขอขอบคุณ!
Mikołaj Głodziak avatar
id flag
ตอนนี้ปัญหาของคุณได้รับการแก้ไขแล้วหรือยัง
Kenting avatar
cn flag
ไม่ ฉันเพิ่งอัปเดตข้อมูลเพิ่มเติมเกี่ยวกับ Kubernetesปัญหายังไม่ได้รับการแก้ไข วิธีแก้ปัญหาที่ฉันสามารถลองได้คือใช้เฉพาะ VIP แทนโหลดบาลานซ์ (เซิร์ฟเวอร์เสมือน - เซิร์ฟเวอร์จริง)

โพสต์คำตอบ

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