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!