Τα pods του GKE έχασαν την πρόσβαση στο VPN μετά την 1.14: δύο τρόποι να διορθώσετε την πηγή
Μετά την 1.14 τα pods φτάνουν στο VPN με τις δικές τους διευθύνσεις, οπότε οι peers απορρίπτουν τις απαντήσεις. Επιλέξτε το συμβόλαιο πηγής και μετά ρυθμίστε το nonMasqueradeCIDRs ανάλογα.
Φτάνει μια αναβάθμιση και τα συστήματα στην άλλη πλευρά της σήραγγας αρχίζουν να απορρίπτουν την κίνηση των pods που δούλευε την προηγούμενη εβδομάδα. Η σήραγγα είναι ενεργή, οι κανόνες του τείχους προστασίας δεν έχουν αγγιχθεί και κανείς δεν επεξεργάστηκε την πολιτική του peer. Αυτό που άλλαξε είναι αόρατο στα αρχεία καταγραφής του cluster: η διεύθυνση πηγής που βλέπουν τώρα αυτά τα συστήματα. Αυτό το κενό εξηγεί μια βλάβη που μοιάζει με διακοπή δικτύου και συμπεριφέρεται σαν πρόβλημα δικαιωμάτων.
Υπάρχουν δύο έγκυρες απαντήσεις και σας οδηγούν σε διαφορετικά σημεία. Επιλέξτε το συμβόλαιο πηγής πριν επεξεργαστείτε ένα ConfigMap.
Ο προεπιλεγμένος κανόνας που σταμάτησε να εγκαθίσταται
Οι παλαιότερες εκδόσεις του GKE εγκαθιστούσαν έναν κανόνα masquerade που αντικαθιστούσε τις πηγές των pods με τη διεύθυνση του κόμβου όποτε ο προορισμός βρισκόταν έξω από το 10.0.0.0/8. Μια πύλη VPN μέσα σε αυτό το εύρος έβλεπε τη διεύθυνση του pod, ενώ κάθε τι πιο μακριά φαινόταν να προέρχεται από τον κόμβο. Οι peers έχτισαν λίστες επιτρεπόμενων και διαδρομές επιστροφής γύρω από τις διευθύνσεις των κόμβων, επειδή αυτό παρατηρούσαν.
Οι νεότερες εκδόσεις σταμάτησαν να εγκαθιστούν αυτόν τον προεπιλεγμένο κανόνα. Η κίνηση των pods φτάνει τώρα στην πύλη με διευθύνσεις pods, όποιος κι αν είναι ο προορισμός. Ένας peer που δρομολογεί μόνο διευθύνσεις κόμβων απορρίπτει τις απαντήσεις και καμία πλευρά δεν γράφει χρήσιμη εγγραφή στο log. Το αίτημα μπορεί να πετύχει ακόμη και στο μακρινό άκρο, και αυτό κάνει τη βλάβη μπερδεμένη στο κυνήγι.
Τίποτα δεν είναι χαλασμένο με την έννοια ενός νεκρού στοιχείου. Οι δύο πλευρές απλώς διαφωνούν για το ποια πηγή είναι νόμιμη.
Επιλέξτε την πηγή που πρέπει να βλέπει ο peer
Το να κρατήσετε τις διευθύνσεις των pods είναι το ακριβέστερο συμβόλαιο. Η μακρινή πλευρά βλέπει το φορτίο εργασίας που παρήγαγε την κίνηση, η καταγραφή παραμένει ειλικρινής και η πολιτική ανά pod γίνεται εφικτή. Το τίμημα είναι ότι ο peer πρέπει να μεταφέρει το πρόθεμα των pods.
Το να κρατήσετε τις διευθύνσεις των κόμβων είναι το φθηνότερο συμβόλαιο. Ενεργοποιήστε ξανά το masquerade για αυτόν τον προορισμό και ο peer θα συνεχίσει να βλέπει μια διεύθυνση που εμπιστεύεται ήδη.
Μία ερώτηση αποφασίζει ανάμεσά τους: τι κάνει ο peer με την πηγή; Αν καταγράφει, εφαρμόζει πολιτική ανά πηγή ή επιβάλλει στενή δρομολόγηση επιστροφής, οι διευθύνσεις των pods δικαιολογούν την επιπλέον ρύθμιση. Αν χρειάζεται μόνο να στέλνει απαντήσεις, το masquerade κοστίζει λιγότερο και δεν ζητά τίποτα από την άλλη πλευρά. Οποιαδήποτε επιλογή υπερασπίζεται, αρκεί να την καταγράψουν και οι δύο ομάδες.
Μια τρίτη επιλογή είναι συνήθως λάθος: masquerade σε όλα και απώλεια της δυνατότητας απόδοσης της κίνησης. Αποφύγετέ την εκτός αν ένας peer πραγματικά δεν μπορεί να δρομολογήσει τίποτα άλλο εκτός από διευθύνσεις κόμβων.
Στρέψτε το nonMasqueradeCIDRs στα πραγματικά εύρη
Το GKE εκτελεί το ip-masq-agent στο kube-system και το ConfigMap του απαριθμεί τους προορισμούς που παρακάμπτουν το masquerade. Για να διατηρήσετε τις πηγές των pods προς τη σήραγγα, το εύρος των pods, το υποδίκτυο των κόμβων και το τοπικό πρόθεμα ανήκουν όλα σε αυτή τη λίστα.
Αντικαταστήστε τις τιμές παραδείγματος με εύρη από το δικό σας cluster. Μην κάνετε τη λίστα ευρύτερη από όσο απαιτεί η ανάγκη, γιατί κάθε επιπλέον εγγραφή αλλάζει το τι βλέπει κάποιος άλλος προορισμός. Οι τρεις εγγραφές παρακάτω αντιπροσωπεύουν το δίκτυο των pods, το υποδίκτυο των κόμβων και το πρόθεμα πίσω από τη σήραγγα:
nonMasqueradeCIDRs:
- 10.12.0.0/14
- 10.100.0.0/16
- 172.16.0.0/12
masqLinkLocal: false
resyncInterval: 60sΜια εγγραφή 0.0.0.0/0 απενεργοποιεί το masquerade για όλους τους προορισμούς, κάτι που αλλάζει το πώς τα άσχετα φορτία εργασίας εμφανίζονται σε εξωτερικές υπηρεσίες και σπάνια είναι σκόπιμο. Ο agent ξαναδιαβάζει τη ρύθμισή του στο resyncInterval, οπότε μια επανεκκίνηση συνήθως δεν χρειάζεται. Ελέγξτε ότι το pod του agent εκτελείται και μετά ανοίξτε το προσαρτημένο αρχείο μέσα σε αυτό. Η ανάγνωση αυτού του αρχείου είναι αυτό που αποδεικνύει ότι η αλλαγή έφτασε.
Η διαδρομή απάντησης είναι το άλλο μισό
Το masquerade αλλάζει την πηγή του αιτήματος και τίποτα άλλο. Όποια πηγή κι αν λάβει ο peer, εξακολουθεί να χρειάζεται διαδρομή πίσω σε αυτήν, και το cluster εξακολουθεί να χρειάζεται διαδρομή προς τον peer.
Μια καταγραφή στην πύλη VPN διαχωρίζει γρήγορα τις δύο βλάβες. Πακέτα που φτάνουν με διευθύνσεις pods και δεν παίρνουν ποτέ απάντηση σημαίνουν ότι ο peer δεν έχει διαδρομή για το πρόθεμα των pods. Μια απάντηση που εμφανίζεται στην πύλη αλλά δεν φτάνει ποτέ στο cluster σημαίνει ότι λείπει η τοπική διαδρομή. Γράψτε το συμβόλαιο στο ticket έτσι κι αλλιώς: ποια πηγή βλέπει ο peer και σε ποιο πρόθεμα δρομολογεί την επιστροφή.
Ελέγξτε ξανά μετά από κάθε αναβάθμιση
Η προεπιλεγμένη συμπεριφορά του masquerade έχει αλλάξει ήδη μία φορά και η αντικατάσταση μιας ομάδας κόμβων μπορεί να επαναφέρει το δίκτυο του cluster. Αντιμετωπίστε το συμβόλαιο πηγής ως κάτι προς επαλήθευση και όχι ως δεδομένο.
Μετά από μια αναβάθμιση, στείλτε ένα αίτημα από ένα pod σε μια τοπική υπηρεσία και διαβάστε την πηγή που καταγράφει ο peer. Αυτή η μία παρατήρηση πιάνει μια παλινδρόμηση που μια σελίδα κατάστασης της σήραγγας θα ανέφερε ευχαρίστως ως υγιή. Η επανάληψή της κοστίζει ένα λεπτό και γλιτώνει από τον επόμενο άνθρωπο ένα βράδυ.