Το σφάλμα επικάλυψης pool του Docker δεν είναι πρόβλημα διαδρομής VPN
Το ένα σφάλμα συμβαίνει κατά την εκχώρηση, το άλλο μετά από αλλαγή διαδρομής. Διαβάστε τα υποδίκτυα IPAM πριν αγγίξετε διευθύνσεις κοντέινερ ή το τούνελ.
Το Docker αρνείται να δημιουργήσει δίκτυο με το μήνυμα ότι το pool επικαλύπτεται με άλλο σε αυτόν τον χώρο διευθύνσεων, και κάποιος αποφασίζει ότι η διαδρομή VPN πρέπει να είναι η αιτία. Δεν μπορεί να είναι. Το σφάλμα αυτό παράγεται όσο εκχωρείται ένα pool, πριν υπάρξει ούτε ένα πακέτο, και μια χειροκίνητη διαδρομή πυρήνα δεν το επηρεάζει. Το VPN μετράει ένα βήμα αργότερα, όταν ένα κοντέινερ που έχει ήδη διεύθυνση παύει να είναι προσβάσιμο αφού εμφανιστεί μια διαδρομή. Δύο προβλήματα, δύο σύνολα στοιχείων, και η ανάμειξή τους παράγει μια αλλαγή που δεν διορθώνει κανένα από τα δύο.
Δύο σφάλματα που μοιάζουν
Το σφάλμα εκχώρησης είναι αριθμητικό. Το Docker συγκρίνει το υποδίκτυο που ζητήσατε με τα υποδίκτυα που ήδη διαχειρίζεται, βρίσκει τομή και αρνείται. Τίποτα δεν τρέχει ακόμη, άρα δεν υπάρχει διαδρομή, ούτε κοντέινερ, ούτε κίνηση προς εξέταση.
Το σύμπτωμα κατά την εκτέλεση είναι ζήτημα προσβασιμότητας. Ένα κοντέινερ που απαντούσε χθες δεν απαντά τώρα, και κάτι άλλαξε στον πίνακα δρομολόγησης του κεντρικού υπολογιστή. Το κοντέινερ κρατά ακόμη τη διεύθυνσή του· το ερώτημα είναι ποια διαδρομή ακολουθεί αυτή η διεύθυνση.
Και τα δύο είναι προβλήματα σχεδίου διευθύνσεων. Μόνο το ένα είναι πρόβλημα του Docker.
Διαβάστε πρώτα τα εκχωρημένα pool
Καταγράψτε τα δίκτυα και εξετάστε όσα θα μπορούσαν να τέμνονται. Το υποδίκτυο ζει στη διαμόρφωση IPAM, και τα συνδεδεμένα κοντέινερ παρατίθενται χωριστά:
docker network ls
docker network inspect EXISTING_NETWORK
Συγκρίνετε αυτό το υποδίκτυο με το pool που ζητά το νέο δίκτυο, και θυμηθείτε ότι το Compose δημιουργεί το δικό του προεπιλεγμένο δίκτυο ανά έργο. Μια σύγκρουση με έργο που ξεχάσατε μοιάζει ακριβώς με σύγκρουση με τον δαίμονα.
Μια στατική ipv4_address σε μια υπηρεσία είναι η διεύθυνση ενός κοντέινερ, όχι ο ορισμός του pool. Η αλλαγή της δεν αφαιρεί επικάλυψη, γιατί η επικάλυψη είναι ανάμεσα σε υποδίκτυα δικτύων και όχι ανάμεσα σε κοντέινερ. Η αναφορά network-create του Docker απαιτεί μη επικαλυπτόμενα υποδίκτυα για τη συνήθη εκχώρηση μέσω γέφυρας και τεκμηριώνει πώς να επιλέξετε ένα ρητά.
Διαλέξτε ένα πρόθεμα που επιβιώνει από το VPN
Η άμεση σύγκρουση και η μελλοντική διαδρομή κρίνονται από την ίδια επιλογή, οπότε κάντε την μία φορά. Συγκρίνετε το υποψήφιο εύρος με το LAN, με κάθε προορισμό VPN που μπορεί να φτάσει ο κεντρικός υπολογιστής και με οποιοδήποτε άλλο overlay σε χρήση.
Ένα πρόθεμα που ικανοποιεί το Docker και συγκρούεται με το απομακρυσμένο δίκτυο σας δίνει ένα κοντέινερ που ξεκινά καθαρά και γίνεται μη προσβάσιμο τη στιγμή που το τούνελ σηκώνεται. Αυτό είναι το δεύτερο σφάλμα σε αυτό το άρθρο, και είναι πολύ δυσκολότερο να διαγνωστεί αργότερα παρά να αποφευχθεί τώρα.
Γράψτε τα επιλεγμένα εύρη κάπου όπου το επόμενο έργο μπορεί να τα διαβάσει. Ένα μητρώο εκχωρημένων προθεμάτων σε μία γραμμή είναι φθηνότερο από μια εβδομάδα ανεξήγητων χρονικών ορίων.
Αποσύρετε ή αλλάξτε δίκτυο σκόπιμα
Για νέο δίκτυο Compose, ορίστε το αχρησιμοποίητο πρόθεμα στη διαμόρφωση IPAM του δικτύου. Για υπάρχον έργο, σχεδιάστε την αναρίθμηση: σταθερές διευθύνσεις, εξαρτημένες υπηρεσίες και το βήμα επαναδημιουργίας του δικτύου πρέπει όλα να υπολογιστούν, γιατί η επεξεργασία YAML δεν αναριθμεί ένα δίκτυο που τρέχει.
Αν ένα παρωχημένο δίκτυο κατέχει τη συγκρουόμενη εκχώρηση, εξετάστε ποιος είναι συνδεδεμένο πριν το αφαιρέσετε. Το docker network rm αρνείται όσο υπάρχουν ενεργά endpoint, και το docker stop δέχεται ονόματα ή ID κοντέινερ αντί για όνομα δικτύου. Η διακοπή ενός κοντέινερ επίσης δεν αφαιρεί τον ορισμό δικτύου που κρατά το pool.
Ένα ευρύ prune δεν είναι διαγνωστικό εργαλείο. Φτάνει σε άσχετα έργα και καταστρέφει τα στοιχεία που επρόκειτο να συλλέξετε.
Τα προεπιλεγμένα pool βοηθούν μόνο την επόμενη εκχώρηση
Η ρύθμιση προεπιλεγμένου pool διευθύνσεων του δαίμονα βελτιώνει τις μελλοντικές αυτόματες εκχωρήσεις κρατώντας τες έξω από εύρη που δεσμεύετε. Δεν αναδιευθυνσιοδοτεί αναδρομικά δίκτυα που υπάρχουν ήδη, και δεν λύνει ρητό υποδίκτυο που επικαλύπτει άλλο ρητό υποδίκτυο.
Αντιμετωπίστε τη ρύθμιση ως ξεχωριστή, σχεδιασμένη αλλαγή με δική της επανεκκίνηση, όχι ως μέρος της επισκευής ενός έργου. Η ανάμειξη των δύο σημαίνει ότι μια επανεκκίνηση του δαίμονα πέφτει στη μέση άσχετης έρευνας. Προγραμματίστε την σε δικό της παράθυρο. Έπειτα επιβεβαιώστε ότι μια νέα αυτόματη εκχώρηση πέφτει όντως έξω από τα εύρη που δεσμεύσατε.
Μόλις η δημιουργία πετύχει, επαληθεύστε το υποδίκτυο που πραγματικά τρέχει και μετά κάντε ένα πραγματικό αίτημα εφαρμογής με το VPN στην προβλεπόμενη κατάστασή του. Αν το pool είναι έγκυρο και η πρόσβαση εξακολουθεί να αποτυγχάνει, η υπόλοιπη εργασία είναι επιλογή διαδρομής, φιλτράρισμα και διαδρομή επιστροφής. Αυτό είναι έρευνα χρόνου εκτέλεσης, και δεν κάνει το σφάλμα εκχώρησης αναδρομικά άνευ σημασίας.
Σειρά εργασίας: διαβάστε τα εκχωρημένα pool, επιλέξτε πρόθεμα που αποφεύγει και το Docker και τους προορισμούς VPN, επαναδημιουργήστε το δίκτυο σκόπιμα και μετά δοκιμάστε ένα αίτημα με το τούνελ σηκωμένο.