Các pod GKE mất quyền truy cập VPN sau 1.14: hai cách sửa nguồn
Sau 1.14 các pod đến VPN bằng địa chỉ của chính chúng, nên các peer loại bỏ phản hồi. Chọn hợp đồng nguồn, sau đó đặt nonMasqueradeCIDRs cho khớp.
Một bản nâng cấp đến, và các hệ thống ở phía bên kia đường hầm bắt đầu từ chối lưu lượng pod vốn hoạt động tuần trước. Đường hầm vẫn hoạt động, các quy tắc tường lửa không bị động tới, và không ai sửa chính sách của peer. Thứ đã thay đổi không hiện ra trong nhật ký của cụm: địa chỉ nguồn mà các hệ thống đó thấy bây giờ. Khoảng trống đó giải thích một sự cố trông như mất mạng nhưng lại hành xử như vấn đề quyền.
Có hai câu trả lời hợp lệ, và chúng đưa bạn đến những nơi khác nhau. Chọn hợp đồng nguồn trước khi sửa một ConfigMap.
Quy tắc mặc định không còn được cài đặt
Các bản phát hành GKE trước đây cài một quy tắc masquerade thay nguồn pod bằng địa chỉ nút bất cứ khi nào đích nằm ngoài 10.0.0.0/8. Một cổng VPN trong dải đó thấy địa chỉ pod, trong khi mọi thứ xa hơn trông như đến từ nút. Các peer xây danh sách cho phép và tuyến quay về quanh địa chỉ nút vì đó là điều họ quan sát được.
Các bản phát hành sau đó ngừng cài quy tắc mặc định ấy. Lưu lượng pod giờ đến cổng với địa chỉ pod, bất kể đích là gì. Một peer chỉ định tuyến địa chỉ nút sẽ loại bỏ phản hồi, và không bên nào ghi một mục nhật ký hữu ích. Yêu cầu thậm chí có thể thành công ở đầu xa, và đó là điều khiến sự cố này khó truy.
Không có gì hỏng theo nghĩa một thành phần đã chết. Hai bên chỉ đơn giản không đồng ý nguồn nào là hợp pháp.
Chọn nguồn mà peer nên thấy
Giữ địa chỉ pod là hợp đồng chính xác hơn. Phía xa thấy khối lượng công việc đã tạo ra lưu lượng, nhật ký vẫn trung thực, và chính sách theo từng pod trở nên khả thi. Cái giá là peer phải mang tiền tố pod.
Giữ địa chỉ nút là hợp đồng rẻ hơn. Bật lại masquerade cho đích đó và peer tiếp tục thấy một địa chỉ mà nó đã tin.
Một câu hỏi quyết định giữa hai lựa chọn: peer làm gì với nguồn? Nếu nó ghi nhật ký, áp chính sách theo nguồn hoặc buộc định tuyến quay về hẹp, địa chỉ pod biện minh cho cấu hình thêm. Nếu nó chỉ cần gửi phản hồi, masquerade tốn ít hơn và không đòi hỏi gì ở phía bên kia. Cả hai lựa chọn đều bảo vệ được miễn là cả hai nhóm ghi lại.
Lựa chọn thứ ba thường là sai lầm: masquerade mọi thứ và mất khả năng quy trách nhiệm lưu lượng. Hãy tránh nó trừ khi một peer thực sự không thể định tuyến gì khác ngoài địa chỉ nút.
Trỏ nonMasqueradeCIDRs vào các dải thật
GKE chạy ip-masq-agent trong kube-system, và ConfigMap của nó liệt kê các đích bỏ qua masquerade. Để giữ nguồn pod về phía đường hầm, dải pod, mạng con của nút và tiền tố nội bộ đều thuộc danh sách đó.
Thay các giá trị mẫu bằng dải từ cụm của bạn. Đừng làm danh sách rộng hơn mức yêu cầu, vì mỗi mục thêm vào đều thay đổi điều mà một đích khác thấy. Ba mục dưới đây đại diện cho mạng pod, mạng con của nút và tiền tố phía sau đường hầm:
nonMasqueradeCIDRs:
- 10.12.0.0/14
- 10.100.0.0/16
- 172.16.0.0/12
masqLinkLocal: false
resyncInterval: 60sMột mục 0.0.0.0/0 tắt masquerade cho mọi đích, điều này thay đổi cách các khối lượng công việc không liên quan hiện ra với dịch vụ bên ngoài và hiếm khi là chủ ý. Agent đọc lại cấu hình của nó tại resyncInterval, nên thường không cần khởi động lại. Kiểm tra pod của agent có đang chạy không, rồi mở tệp được gắn bên trong nó. Chính việc đọc tệp đó chứng minh thay đổi đã đến.
Đường phản hồi là nửa còn lại
Masquerade thay đổi nguồn của yêu cầu và không gì khác. Bất kể peer nhận nguồn nào, nó vẫn cần một tuyến quay lại đó, và cụm vẫn cần một tuyến về phía peer.
Một bản bắt gói tại cổng VPN tách nhanh hai sự cố. Các gói đến với địa chỉ pod và không bao giờ nhận phản hồi nghĩa là peer thiếu tuyến cho tiền tố pod. Một phản hồi xuất hiện tại cổng nhưng không bao giờ tới cụm nghĩa là thiếu tuyến nội bộ. Dù thế nào hãy ghi hợp đồng vào phiếu: peer thấy nguồn nào, và nó định tuyến phản hồi về tiền tố nào.
Kiểm tra lại sau mỗi lần nâng cấp
Hành vi mặc định của masquerade đã thay đổi một lần, và việc thay thế một nhóm nút có thể đặt lại mạng của cụm. Hãy coi hợp đồng nguồn là thứ cần xác minh chứ không phải giả định.
Sau khi nâng cấp, gửi một yêu cầu từ pod đến một dịch vụ nội bộ và đọc nguồn mà peer ghi nhật ký. Chỉ quan sát đó bắt được một hồi quy mà một trang trạng thái đường hầm sẽ vui vẻ báo là khỏe mạnh. Lặp lại tốn một phút và tiết kiệm cho người tiếp theo một buổi tối.