Điểm:0

Keepalived sẽ không chuyển tiếp lưu lượng đến nút BACKUP sau khi thiết lập cụm Kubernetes

lá cờ cn

Cấu trúc hệ thống:

  • 10.10.1.86: Nút chính Kubernetes
  • 10.10.1.87: Công nhân Kubernetes 1 nút; giữ nguyên nút CHÍNH
  • 10.10.1.88: Kubernetes worker 2 node; giữ nguyên nút SAO LƯU
  • 10.10.1.90: VIP, sẽ nạp số dư vào .87 & .88; thực hiện bởi giữ nguyên.

Cụm Kubernetes này là một môi trường dành cho nhà phát triển, đang thử nghiệm thu thập nhật ký luồng mạng.

Những gì tôi muốn đạt được là:

  1. Tất cả đầu ra nhật ký luồng mạng của bộ định tuyến/chuyển đổi đầu tiên thành .90
  2. Sau đó sử dụng giữ nguyên cân bằng tải (lb_kind: NAT) đến .87 & .88, là hai công nhân Kubernetes.
  3. Nút Cổng Dịch vụ để bắt các lưu lượng truy cập này vào cụm Kubernetes và thực hiện các công việc phân tích dữ liệu còn lại.
  • Cái gì đó như:
        | {Mạng hệ điều hành} | {Mạng Kubernetes}

                                K8s Worker -> filebeat -> logstash (triển khai)
                              /
<dữ liệu> -> [VIP] cân bằng tải
                              \ 
                                K8s Worker -> filebeat -> logstash (triển khai)
  • filebeat.yml (đã kiểm tra rằng lưu lượng truy cập đều ổn sau filebeat, vì vậy tôi sử dụng tập tin đầu ra để thu hẹp nguyên nhân gốc rễ.)
# mèo filebeat.yml
tập tinbeat.inputs:

- loại: tcp
  max_message_size: 10MiB
  máy chủ: "0.0.0.0:5100"

- loại: udp
  max_message_size: 10KiB
  máy chủ: "0.0.0.0:5150"




#output.logstash:
# máy chủ: ["10.10.1.87:30044", "10.10.1.88:30044"]
đầu ra. tập tin:
  đường dẫn: "/tmp/"
  tên tệp: tmp-filebeat.out

Kubernetes

  • Master và Worker là 3 máy ảo trong env riêng của tôi; không phải bất kỳ nhà cung cấp GCP hoặc AWS nào.
  • Phiên bản:
# phiên bản kubectl
Phiên bản máy khách: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31: 21Z", GoVersion:"go1.16.1", Trình biên dịch:"gc", Nền tảng:"linux/amd64"}
Phiên bản máy chủ: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:25: 06Z", GoVersion:"go1.16.1", Trình biên dịch:"gc", Nền tảng:"linux/amd64"}
  • Dịch vụ
# mèo logstash.service.yaml
phiên bản api: v1
loại: Dịch vụ
metadata:
  tên: dịch vụ logstash
thông số kỹ thuật:
  loại: NútPort
  bộ chọn:
    ứng dụng: logstash
  cổng:
    - cổng: 9514
      tên: cổng tcp
      cổng mục tiêu: 9514
      nútPort: 30044
  • Khi dữ liệu nhận được trong Kubernetes, tất cả đều hoạt động tốt.
  • Đó là số dư tải VIP không chuyển tiếp.

conf giữ nguyên

!Tệp cấu hình cho keepalived
global_defs {
  router_id proxy1 # `proxy 2` tại nút khác
}


vrrp_instance VI_1 {
  trạng thái MASTER # `BACKUP` tại nút khác
  giao diện ens160
  virtual_router_id 41
  ưu tiên 100 # `50` tại nút khác
  quảng cáo_int 1
  virtual_ipaddress {
    10.10.1.90/23
  }
}

virtual_server 10.10.1.90 5100 {
  độ trễ_loop 30
  lb_algo rr
  lb_kind NAT
  giao thức TCP
  kiên trì_thời gian chờ 0

  real_server 10.10.1.87 5100 {
    trọng lượng 1
  }
  real_server 10.10.1.88 5100 {
    trọng lượng 1
  }
}
virtual_server 10.10.1.90 5150 {
  độ trễ_loop 30
  lb_algo rr
  lb_kind NAT
  giao thức UDP
  kiên trì_thời gian chờ 0

  real_server 10.10.1.87 5150 {
    trọng lượng 1
  }
  real_server 10.10.1.88 5150 {
    trọng lượng 1
  }

Nó hoạt động Trước khi thiết lập cụm Kubernetes

  • Cả hai .87 & .88 đã cài đặt giữ nguyên, và rr (RoundRobin) cân bằng tải hoạt động tốt (TCP và UDP).
  • Dừng lại giữ nguyên dịch vụ (systemctl dừng keepalived) khi thiết lập cụm kubernetes, đề phòng.

Đã xảy ra sự cố sau khi thiết lập cụm Kubernetes

  • Đã tìm thấy nút MASTER duy nhất đó .87 có thể chuyển tiếp lưu lượng truy cập, VIP không thể chuyển tiếp tới nút SAO LƯU .88.
  • Dữ liệu được chuyển tiếp từ MASTER được kubernetes bắt thành công Nút Cổng và triển khai.

Kiểm tra vấn đề bằng nc:

  • nc: chỉ những người nắm giữ VIP (MASTER node) mới có thể chuyển tiếp lưu lượng, khi rr chuyển tiếp tới BACKUP, nó chỉ hiển thị thời gian chờ.
  • cũng được thử nghiệm bởi nc-l 5100 trên cả hai máy chủ, chỉ nút MASTER có kết quả.
# tiếng vang "kiểm tra" | nc 10.10.1.90 5100
# tiếng vang "kiểm tra" | nc 10.10.1.90 5100
Ncat: Hết thời gian kết nối.
# tiếng vang "kiểm tra" | nc 10.10.1.90 5100
# tiếng vang "kiểm tra" | nc 10.10.1.90 5100
Ncat: Hết thời gian kết nối.

Một số thông tin

  • phiên bản gói
# rpm -qa |grep keepalived
keepalived-1.3.5-19.el7.x86_64
  • Kubernetes CNI: hoa vải
# kubectl get pod -n kube-system
TÊN TÌNH TRẠNG SẴN SÀNG KHỞI ĐỘNG LẠI TUỔI
calico-kube-controllers-b656ddcfc-wnkcj 1/1 Chạy 2 78d
calico-node-vnf4d 1/1 Chạy 8 78d
calico-node-xgzd5 1/1 Đang chạy 1 78d
calico-nút-zt25t 1/1 Chạy 8 78d
coredns-558bd4d5db-n6hnn 1/1 Chạy 2 78d
coredns-558bd4d5db-zz2rb 1/1 Chạy 2 78d
etcd-a86.axv.bz 1/1 Chạy 2 78d
kube-apiserver-a86.axv.bz 1/1 Chạy 2 78d
kube-controller-manager-a86.axv.bz 1/1 Chạy 2 78d
kube-proxy-ddwsr 1/1 Chạy 2 78d
kube-proxy-hs4dx 1/1 Chạy 3 78d
kube-proxy-qg2nq 1/1 Chạy 1 78d
kube-scheduler-a86.axv.bz 1/1 Chạy 2 78d
  • ipvsadm (kết quả tương tự trên .87, .88)
# ipvsadm -ln
Máy chủ ảo IP phiên bản 1.2.1 (size=4096)
Prot LocalAddress:Cờ bộ lập lịch cổng
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.1.90:5100rr
  -> 10.10.1.87:5100 Mặt nạ 1 0 0
  -> 10.10.1.88:5100 Mặt nạ 1 0 0
UDP 10.10.1.90:5150rr
  -> 10.10.1.87:5150 Mặt nạ 1 0 0
  -> 10.10.1.88:5150 Mặt nạ 1 0 0
  • Selinux luôn luôn dễ dãi
  • Nếu dừng lại tường lửa, vẫn không hoạt động.
  • hệ thống Sự khác biệt:
# trước:
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.all.chuyển tiếp = 0
net.ipv4.conf.all.route_localnet = 0
net.ipv4.conf.default.forwarding = 0
net.ipv4.conf.lo.chuyển tiếp = 0
net.ipv4.ip_forward = 0

# sau đó
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.chuyển tiếp = 1
net.ipv4.conf.all.route_localnet = 1
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.lo.chuyển tiếp = 1
net.ipv4.ip_forward = 1

Không biết bây giờ có kiểm tra thêm được không, xin tư vấn giúp, xin cảm ơn!

Mikołaj Głodziak avatar
lá cờ id
Bạn đã thiết lập cụm của mình như thế nào? Bạn đã sử dụng phiên bản Kubernetes nào? Bạn đã sử dụng một số nhà cung cấp đám mây hay bạn đã sử dụng kim loại trần? Bạn đã định cấu hình mạng bên trong cụm của mình như thế nào? Vui lòng đính kèm tệp yaml. Bạn đã kiểm tra mọi thứ trên Kubernetes như thế nào?
Kenting avatar
lá cờ cn
Xin lỗi về điều đó (Sau khi kiểm tra `nc`, tôi chắc chắn rằng đã xảy ra sự cố trong quá trình cân bằng tải VIP cho nút SAO LƯU, vì vậy tôi đã không đính kèm Thông tin Kubernetes.); Đã cập nhật dịch vụ `NodePort`. Cảm ơn bạn!
Mikołaj Głodziak avatar
lá cờ id
Vấn đề của bạn bây giờ đã được giải quyết chưa?
Kenting avatar
lá cờ cn
Không, tôi vừa cập nhật thêm thông tin về Kubernetes.Vấn đề vẫn chưa được giải quyết; giải pháp thay thế mà tôi có thể thử là chỉ sử dụng VIP, thay vì cân bằng tải (máy chủ ảo - máy chủ thực).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.