Η επικίνδυνη εκδοχή αυτής της αλλαγής είναι μία μόνο εντολή που αλλάζει το endpoint και κλειδώνει όλους τους διαχειριστές ταυτόχρονα. Η ασφαλής εκδοχή κρατά και τις δύο διαδρομές ανοιχτές, αποδεικνύει ότι η ιδιωτική λειτουργεί από το VPN και μόνο τότε αποσύρει το δημόσιο endpoint. Θεωρήστε δεδομένο ένα υπάρχον cluster, ένα εγκεκριμένο tunnel προς το VPC του και ένα kubeconfig που ήδη λειτουργεί· το ζητούμενο είναι ιδιωτική πρόσβαση στο API του Kubernetes, όχι ιδιωτικά nodes και όχι νέο μοντέλο δικαιωμάτων. Κάθε βήμα παρακάτω έχει έναν έλεγχο όπου μπορείτε να αποτύχετε με ασφάλεια.

1. Καταγράψτε το endpoint και κρατήστε δρόμο επιστροφής

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

aws eks describe-cluster --region REGION --name CLUSTER \
  --query 'cluster.{endpoint:endpoint,public:resourcesVpcConfig.endpointPublicAccess,private:resourcesVpcConfig.endpointPrivateAccess,cidrs:resourcesVpcConfig.publicAccessCidrs}'

Τα REGION και CLUSTER εδώ είναι placeholders. Σημειώστε τι δείχνει τώρα η ιδιωτική σημαία, γιατί ένα cluster που δημιουργήθηκε με ήδη ενεργή ιδιωτική πρόσβαση χρειάζεται διαφορετικό πρώτο βήμα από ένα που δεν την είχε ποτέ. Κρατήστε τουλάχιστον μία εγκεκριμένη διαδρομή διαχείρισης ανοιχτή κατά τη μετάβαση· ένα VPN που εξαρτάται από την προσβασιμότητα του ίδιου cluster δεν είναι διαδρομή ανάκτησης.

2. Ενεργοποιήστε την ιδιωτική πρόσβαση με τη διαδρομή δικτύου έτοιμη

Το να ανάψετε τη σημαία είναι το εύκολο μισό. Το tunnel χρειάζεται διαδρομή προς τις ιδιωτικές διευθύνσεις του endpoint, και η ομάδα ασφαλείας του cluster χρειάζεται TCP 443 από την πηγή που παρουσιάζει πραγματικά το VPN. Ένας συσχετισμός Client VPN, μια πύλη site-to-site και ένα peered VPC μπορούν όλα να παρουσιάσουν διαφορετικές διευθύνσεις πηγής, γι’ αυτό χρησιμοποιήστε το μοντέλο που αναπτύξατε αντί για ένα γενικό ιδιωτικό εύρος.

aws eks update-cluster-config --region REGION --name CLUSTER \
  --resources-vpc-config endpointPublicAccess=true,endpointPrivateAccess=true

aws eks describe-update --region REGION --name CLUSTER --update-id UPDATE_ID

Η ενημέρωση είναι ασύγχρονη. Ερωτάτε το id ενημέρωσης μέχρι να αναφέρει επιτυχία αντί να περιμένετε έναν σταθερό αριθμό δευτερολέπτων και να υποθέσετε. Αφήστε την κίνηση των nodes και του control plane ήσυχη όσο το κάνετε αυτό: το να αντικαταστήσετε ολόκληρη την ομάδα ασφαλείας του cluster με έναν κανόνα για τον φορητό σας είναι ο τρόπος που ένα λειτουργικό data plane γίνεται δεύτερο περιστατικό.

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

3. Αποδείξτε ότι ο σταθμός εργασίας χρησιμοποίησε την ιδιωτική διαδρομή

Με ενεργά και τα δύο endpoints, ένα επιτυχές kubectl get ns δεν αποδεικνύει τίποτα για το ποιο απάντησε. Αναλύστε το hostname του endpoint και ελέγξτε αν η διεύθυνση που λάβατε ανήκει στο ιδιωτικό ή στο δημόσιο εύρος. Αν το συνδεδεμένο δίκτυό σας δεν λαμβάνει την ιδιωτική όψη μέσω DNS, η εντολή θα πετύχει μέσω του δημόσιου endpoint και θα αποσύρετε τη δημόσια διαδρομή με ψευδή στοιχεία. Αυτός είναι ο πιο συνηθισμένος τρόπος που αυτή η μετάβαση πάει στραβά, και μοιάζει ακριβώς με επιτυχία.

nslookup HASH.gr7.REGION.eks.amazonaws.com
kubectl cluster-info
kubectl get ns --request-timeout=10s

Κρατήστε το hostname και την επικύρωση πιστοποιητικού ακριβώς όπως είναι. Η αντικατάσταση με ιδιωτική IP στο kubeconfig και η παράλειψη της επαλήθευσης TLS δεν είναι η μετάβαση που περιγράψατε στο αρχείο αλλαγής, και θα αποτύχει ξανά τη στιγμή που το endpoint περιστραφεί.

4. Αποσύρετε τη δημόσια πρόσβαση σκόπιμα

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

aws eks update-cluster-config --region REGION --name CLUSTER \
  --resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true

Στη λειτουργία μόνο ιδιωτικής πρόσβασης, το δημόσιο όνομα DNS αναλύεται στις ιδιωτικές διευθύνσεις του endpoint από μέσα στο VPC, οπότε η ανάλυση και η προσβασιμότητα παύουν να είναι το ίδιο πράγμα. Οτιδήποτε βασιζόταν στη δημόσια διεύθυνση, συμπεριλαμβανομένων των CI runners ή ενός φορητού σε άλλο δίκτυο, χρειάζεται τώρα τη δική του διαδρομή εισόδου.

5. Κρατήστε χωριστές την πολιτική δικτύου και την πολιτική ταυτότητας

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

Τίποτα από αυτά δεν αλλάζει το IAM ή το Kubernetes RBAC. Οι ρυθμίσεις endpoint είναι διοικητική ενέργεια, και οι απλοί χρήστες δεν θα πρέπει να λαμβάνουν άδεια να χαλαρώσουν το όριο μόνο για να φτάσουν στο API. Γράψτε την τελική κατάσταση, την ημερομηνία και τη διαδρομή ανάκτησης στο runbook, και μετά δοκιμάστε τη διαδρομή ανάκτησης μία φορά όσο είναι ακόμα εύκολο.

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