Chúng tôi đang chạy các ứng dụng của mình trong cụm Kubernetes(1.11) được cài đặt thông qua KOps. (Cụm DEV/QA của chúng tôi được kế thừa từ nhân viên không còn ở công ty nữa)
Hầu hết mọi thứ hoạt động tốt nhưng đôi khi sau khi triển khai,
một số nhóm đưa ra lỗi từ chối kết nối. Chúng tôi biết được vì Nginx đang phàn nàn về lỗi 502 từ phần phụ trợ.
Đôi khi nó sẽ tự động hoạt động trở lại, nhưng một lần nữa nó sẽ bắt đầu báo lỗi. Khởi động lại nhóm sẽ giải quyết vấn đề.
Nó sẽ hoạt động tốt cho đến lần triển khai tiếp theo, sau đó sự cố lại xảy ra.
Chúng tôi đã so sánh nhật ký hệ thống với cụm khác nhưng mọi thứ trông giống nhau.
Nhật ký TCPDUMPS của IP của POD
11:06:47.387766 IP 100.96.13.22.57778 > 100.96.12.137.http-alt: Flags [S], seq 1515889791, win 26883, tùy chọn [mss 8961,sackOK,TS val 132113284 ecr 0,nop,wscale 9], chiều dài 0
11:06:47.387775 IP 100.96.13.22.57778 > 100.96.12.137.http-alt: Flags [S], seq 1515889791, win 26883, tùy chọn [mss 8961,sackOK,TS val 132113284 ecr 0,nop,wscale 9], chiều dài 0
11:06:47.387777 IP 100.96.13.22.57778 > 100.96.12.137.http-alt: Flags [S], seq 1515889791, win 26883, tùy chọn [mss 8961,sackOK,TS val 132113284 ecr 0,nop,wscale 9], chiều dài 0
11:06:47.387781 IP 100.96.12.137.http-alt > 100.96.13.22.57778: Flags [R.], seq 0, ack 1515889792, win 0, độ dài 0
11:06:47.387781 IP 100.96.12.137.http-alt > 100.96.13.22.57778: Flags [R.], seq 0, ack 1, win 0, độ dài 0
11:06:47.387785 IP 100.96.12.137.http-alt > 100.96.13.22.57778: Flags [R.], seq 0, ack 1, win 0, độ dài 0
Như đã thấy trong nhật ký, nhóm Ingress-nginx(100.96.13.22) cố gắng kết nối với nhóm ứng dụng web (100.96.12.137) nhưng kết nối với các nhóm được đặt lại ngay lập tức.
Điều tra của chúng tôi:
Sau khi tìm hiểu về cách thức hoạt động của mạng kubernetes (Mạng cầu nối, cặp VETH),
(https://medium.com/practo-engineering/networking-with-kubernetes-1-3db116ad3c98
https://stackoverflow.com/questions/37860936/find-out- which-network-interface-belongs-to-docker-container
https://www.digitalocean.com/community/tutorials/how-to-inspect-kubernetes-networking#finding-and-entering-pod-network-namespaces
)
Theo đó, giao diện nhóm được kết nối thông qua cặp VETHÂ với giao diện cầu nối Nút
Mọi lưu lượng truy cập từ hoặc đến nhóm đều đi qua cây cầu này (trong trường hợp của chúng tôi là cbr0)
Xử lý sự cố:
Chúng tôi đã nhận được ID vùng chứa nhóm bị ảnh hưởng bằng cách chạyÂ
docker ps
Nhận ID tiến trình của Pod
docker kiểm tra --format '{{ .State.Pid }}' container-ID
Nhận thông tin chi tiết về Mạng Pods
nsenter -t container-pid -n ip addr
đầu ra:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 trạng thái qdisc noqueue nhóm UNKNOWN mặc định qlen 1
liên kết/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
máy chủ phạm vi inet 127.0.0.1/8 lo
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
inet6 ::1/128 máy chủ phạm vi
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
3: eth0@if380852: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 trạng thái qdisc noqueue nhóm LÊN mặc định
liên kết/ether 0a:58:64:60:0d:27 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 100.96.13.39/24 phạm vi toàn cầu eth0
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
liên kết phạm vi inet6 fe80::e4cd:81ff:fe96:2914/64
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
eth0@if380852Â là giao diện mạng nhóm
380852Â là số liên kết VETH
0a:58:64:60:0d:27Â là địa chỉ mac của nhóm
Nhận thông tin chi tiết về cặp VETH của nhóm
địa chỉ ip | grep 380852
đầu ra:380852: vethd49cda8b@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue master cbr0 trạng thái Nhóm LÊN mặc định
Đây vethd49cda8b là nhóm VETH ID
Bây giờ kiểm tra các chi tiết cầu
Lấy bảng mac cầu:
brctl showmacs cbr0 | grep 0a:58:64:60:0d:27
đầu ra:27 0a:58:64:60:0d:27 không 1,44
Đây 27Â là PORT của giao diện VETHÂ
Đã kiểm tra chi tiết VETHÂ của Cảng
brctl showstp cbr0 | grep "(27)"
đầu ra:
veth488082e8 (27)
Chúng ta có thể thấy rằng Cổng 27 thuộc về giao diện VETH khác, Đầu ra dự kiến sẽ là:
ID VETH của POD (PORT trong bảng bridge)
vethd49cda8b (27)
Hãy lấy PORT thực tế của giao diện VETH của POD
brctl showstp cbr0 | grep vethd49cda8b
đầu ra:
vethd49cda8b (52)
Chúng ta có thể thấy rằng lưu lượng truy cập vào các nhóm đang bị mất do cổng sai trong bảng cầu mac
Bảng MAC cầu sẽ hiển thị cổng là 52 cho địa chỉ MAC của vùng chứa, nhưng nó đang hiển thị 27
Nhưng sau một thời gian, nó sẽ tự động hiển thị đúng cổng, giúp giải quyết vấn đề kết nối của chúng tôi.
Có thể biết những gì cập nhật bảng cầu không? và làm thế nào để tránh cập nhật sai?
Làm thế nào chúng ta có thể khắc phục sự cố thêm?
Có ai phải đối mặt với các vấn đề tương tự.
Cảm ơn trước, thực sự đánh giá cao bất kỳ sự giúp đỡ.