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à:
- 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
- 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.
- Có
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.
| {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"}
# 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
# rpm -qa |grep keepalived
keepalived-1.3.5-19.el7.x86_64
# 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!