Προσθέτετε τη δημόσια διεύθυνση του VPN του γραφείου στη λίστα επιτρεπόμενων του διακομιστή AKS API και το kubectl λειτουργεί. Μια εβδομάδα αργότερα αποτυγχάνει η κλιμάκωση ενός node pool, μια εργασία CI δεν μπορεί να φτάσει το cluster και η πύλη εμφανίζει σφάλμα που δεν αναφέρει τίποτα για περιοχές IP. Κανείς δεν άλλαξε τη λίστα. Ο έλεγχος που ενεργοποιήσατε είναι ένα φίλτρο δημόσιων IP μπροστά από τον διακομιστή API και δεν ξέρει ποιος καλεί, μόνο από ποια διεύθυνση ήρθε η κλήση. Το VPN είναι μία διεύθυνση ανάμεσα σε αρκετές που χρειάζεται το cluster και σπάνια είναι αυτή που σπάει πρώτη.

Η λίστα επιτρεπόμενων ταιριάζει διεύθυνση, όχι πρόσωπο

--api-server-authorized-ip-ranges δέχεται μπλοκ CIDR, όχι χρήστες ή ομάδες. Όταν το αίτημα ενός προγραμματιστή φεύγει από τον διακομιστή VPN προς το Azure, η διεύθυνση προέλευσης στον διακομιστή API είναι η δημόσια έξοδος του διακομιστή VPN. Έτσι κάθε άτομο σε αυτό το VPN μοιράζεται μία καταχώριση και οποιοσδήποτε εκτός VPN απορρίπτεται πριν καν συμβεί η πιστοποίηση.

Αυτό σημαίνει επίσης ότι η καταχώριση δέχεται περισσότερους ανθρώπους από όσους σκοπεύετε. Ένας εργολάβος με πρόσβαση VPN, ένα προσωπικό φορητό στον ίδιο συγκεντρωτή και ένας παραβιασμένος λογαριασμός φτάνουν όλοι από την ίδια διεύθυνση. Η εξουσιοδότηση του cluster δεν αλλάζει, οπότε ο έλεγχος πρόσβασης βάσει ρόλων εξακολουθεί να αποφασίζει τι μπορεί να κάνει ο καλών, αλλά η λίστα επιτρεπόμενων δεν είναι έλεγχος ταυτότητας και δεν πρέπει ποτέ να περιγράφεται ως τέτοιος.

Αυτό που σπάει πρώτο συνήθως δεν είναι το kubectl

Η λίστα επιτρεπόμενων ισχύει για το δημόσιο τελικό σημείο του διακομιστή API, οπότε οτιδήποτε εκτός των καταχωρισμένων διευθύνσεων σταματά αμέσως να λειτουργεί. Τα προφανή θύματα είναι το δεύτερο γραφείο χωρίς διαδρομή VPN, ένας εκτελεστής CI σε φιλοξενούμενη ροή και ένα φορητό που ξέχασε να συνδεθεί. Αυτά αναγνωρίζονται εύκολα γιατί κάποιος άνθρωπος περιμένει.

Η λιγότερο προφανής περίπτωση είναι ο αυτοματισμός που οδηγεί το Azure ή τα δικά σας εργαλεία. Κάποιες λειτουργίες που ξεκινά η πλατφόρμα φτάνουν στον διακομιστή API από διευθύνσεις που δεν είναι το VPN σας, και όταν μία από αυτές αρχίζει να αποτυγχάνει αμέσως μετά το αυστηρότερο φιλτράρισμα της λίστας, ο χρόνος είναι το στοιχείο. Μην υποθέσετε ότι η λίστα είναι πλήρης επειδή η διαδραστική πρόσβαση λειτουργεί· ελέγξτε τι απαιτεί η λειτουργία για την περιοχή και τις συνδρομές σας πριν συμπεράνετε ότι το cluster είναι χαλασμένο.

Η υπογραφή της αποτυχίας βοηθά. Αν το αίτημα δεν φτάσει ποτέ στην πιστοποίηση, είναι το φίλτρο. Αν πιστοποιηθεί και μετά λάβει σφάλμα δικαιωμάτων, το φίλτρο έκανε τη δουλειά του και το πρόβλημα είναι ο έλεγχος πρόσβασης βάσει ρόλων, τον οποίο η λίστα επιτρεπόμενων δεν αγγίζει ποτέ.

Χτίστε ολόκληρη τη λίστα με μία εντολή

Η παράμετρος ενημέρωσης αντικαθιστά ολόκληρη τη λίστα αντί να προσθέτει καταχώριση, οπότε μια εντολή που μεταφέρει μόνο τη διεύθυνση VPN απορρίπτει σιωπηλά ό,τι άλλο υπήρχε. Διαβάστε πρώτα την τρέχουσα τιμή, κρατήστε την και στείλτε την ένωση:

az aks show -g rg-app -n aks-prod \
  --query apiServerAccessProfile.authorizedIpRanges -o tsv

az aks update -g rg-app -n aks-prod \
  --api-server-authorized-ip-ranges 203.0.113.10/32,198.51.100.0/24

Χρησιμοποιήστε μια δεσμευμένη δημόσια IP για τον διακομιστή VPN πριν βασιστείτε σε αυτό. Μια δυναμική διεύθυνση αλλάζει στην επανασύνδεση και κάθε αλλαγή κλειδώνει σιωπηλά την ομάδα έξω από το cluster μέχρι κάποιος να ενημερώσει τη λίστα από δίκτυο που επιτρέπεται ακόμη. Αν έχετε δύο σημεία εξόδου VPN για πλεονασμό, καταγράψτε και τα δύο, γιατί το φίλτρο δεν έχει έννοια προτιμώμενης διαδρομής.

Τακτοποιήστε την αλλαγή ώστε η πρώτη επιτρεπόμενη προσπάθεια να είναι και η δοκιμή. Ανακοινώστε τη νέα λίστα, εφαρμόστε την και συνδεθείτε αμέσως από το VPN· κάνοντάς το με την αντίθετη σειρά αφήνετε ένα παράθυρο όπου κανείς δεν μπορεί να φτάσει τον διακομιστή API για να διορθώσει ένα τυπογραφικό σε μπλοκ CIDR.

Τι δεν κάλυψε ποτέ η λίστα επιτρεπόμενων

Δεν κάνει τον διακομιστή API ιδιωτικό. Ένα ιδιωτικό cluster χρησιμοποιεί ιδιωτικό τελικό σημείο και ιδιωτικό DNS, και η λίστα εξουσιοδοτημένων περιοχών δεν είναι ο έλεγχος που το αντικαθιστά. Δεν αλλάζει επίσης τι μπορεί να κάνει ένας επιτρεπόμενος καλών, οπότε ένα διερρηγμένο kubeconfig διαχειριστή λειτουργεί ακόμη από οποιαδήποτε επιτρεπόμενη διεύθυνση. Αντιμετωπίστε το διαπιστευτήριο ως το όριο ασφαλείας και τη λίστα ως ευκολία δικτύου.

Δεν έχει καμία σχέση με τα φορτία εργασίας. Τα Pods και τα Services συνεχίζουν να λειτουργούν με τη λίστα ενεργή, και η πρόσβαση σε μια εφαρμογή μέσω VPN είναι ξεχωριστό πρόβλημα: ένα Service που έχει μόνο cluster IP χρειάζεται ακόμη εσωτερικό εξισορροπητή φορτίου, ingress ή port-forward πριν μπορέσει ένα φορητό να το ανοίξει. Η ανάμειξη αυτών των δύο σχεδίων παράγει ένα δελτίο αλλαγής που ισχυρίζεται ότι περιορίζει τους προγραμματιστές και στην πραγματικότητα δεν περιορίζει τίποτα στις εφαρμογές.

Επαληθεύστε και από τις δύο πλευρές και μετά εκτελέστε μία πραγματική λειτουργία

Δοκιμάστε με νέο πελάτη στο VPN και με πελάτη εκτός αυτού. Η προσπάθεια από έξω πρέπει να απορρίπτεται στον διακομιστή API, όχι στην επίλυση ονομάτων· αν το όνομα δεν επιλύεται, δοκιμάζετε το DNS και δεν μάθατε τίποτα για το φίλτρο. Στη συνέχεια εκτελέστε μια λειτουργία που δεν είναι διαδραστική κλήση kubectl, όπως κλιμάκωση node pool ή έλεγχο αναβάθμισης, και επιβεβαιώστε ότι ολοκληρώνεται αντί να υποθέσετε ότι θα ολοκληρωθεί.

Κρατήστε την προηγούμενη τιμή της λίστας καταγεγραμμένη δίπλα στην αλλαγή και ξαναδιαβάστε την ενεργή τιμή μετά την ενημέρωση αντί να εμπιστεύεστε την εντολή που πληκτρολογήθηκε. Η τεκμηρίωση του AKS για τις εξουσιοδοτημένες περιοχές IP απαριθμεί τις υποστηριζόμενες παραμέτρους και τις απαιτήσεις πλατφόρμας που ανήκουν στην ίδια λίστα, και αυτό είναι το μέρος που οι περισσότερες περιγραφές δελτίων παραλείπουν.

Σχετικά άρθρα