Δρομολόγια Terraform Client VPN με περισσότερα CIDR από υποδίκτυα
Η συσχέτιση, το δρομολόγιο και η εξουσιοδότηση είναι ξεχωριστά αντικείμενα. Αντιστοιχίστε κάθε CIDR προορισμού σε ένα συσχετισμένο υποδίκτυο αντί να ευρετηριάζετε μια συντομότερη λίστα υποδικτύων.
Ένας φορητός υπολογιστής συνδέεται στο τελικό σημείο Client VPN, και το terraform apply εξακολουθεί να αποτυγχάνει σε έναν πόρο δρομολογίου. Η διαμόρφωση έχει συνήθως περισσότερα CIDR προορισμού από συσχετισμένα υποδίκτυα, και το μπλοκ δρομολογίου επιλέγει στόχο με ευρετήριο. Αυτό υποθέτει ότι οι δύο συλλογές είναι παράλληλες. Δεν είναι, και η αποτυχία εμφανίζεται κατά την εφαρμογή και όχι κατά την ανασκόπηση.
Ονομάστε το αντικείμενο που αποτυγχάνει
Εμπλέκονται τρεις πόροι και ο καθένας απαντά σε διαφορετικό ερώτημα. Η συσχέτιση τοποθετεί τη διεπαφή δικτύου του τελικού σημείου σε ένα υποδίκτυο. Το δρομολόγιο λέει ποιο πρόθεμα προορισμού παραδίδεται σε ένα υποδίκτυο-στόχο. Ο κανόνας εξουσιοδότησης λέει ποιοι χρήστες μπορούν να φτάσουν σε ποιο πρόθεμα. Ένα δρομολόγιο που δείχνει σε υποδίκτυο που δεν συσχετίστηκε ποτέ αποτυγχάνει ακόμη και όταν υπάρχουν και τα δύο αντικείμενα, επειδή ο στόχος πρέπει να ανήκει σε αυτό το τελικό σημείο.
Καταγράψτε πρώτα τις συσχετίσεις: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.
Θυμηθείτε το τοπικό δρομολόγιο του VPC
Η πρώτη συσχέτιση προσθέτει ένα τοπικό δρομολόγιο για ολόκληρο το VPC, οπότε κάθε υποδίκτυο σε αυτό το VPC είναι ήδη προσβάσιμο χωρίς πόρο δρομολογίου. Πρόσθετα δρομολόγια υπάρχουν για ομότιμα VPC, συνδέσεις Transit Gateway και προθέματα on-premises που δεν ανήκουν στο VPC. Γι' αυτό ένα τελικό σημείο με τρεις συσχετίσεις μπορεί νόμιμα να φέρει επτά καταχωρίσεις προορισμού.
Μετρήστε τους προορισμούς που βρίσκονται έξω από το VPC πριν προσθέσετε δρομολόγια. Αν αυτός ο αριθμός είναι μικρότερος από τη λίστα CIDR, η λίστα περιγράφει υποδίκτυα που δεν χρειάζονται καθόλου δρομολόγιο.
Αντικαταστήστε το ευρετήριο με έναν χάρτη
Το τύλιγμα του ευρετηρίου σε τελεστή υπολοίπου σιωπά το σφάλμα και διατηρεί το λάθος μοντελοποίησης. Ένας προορισμός που δεν μπορεί να επιτευχθεί μέσω του επιλεγμένου στόχου εξακολουθεί να μη μεταφέρει κίνηση, όσο καθαρά κι αν εφαρμόζεται το σχέδιο. Αποθηκεύστε τη σχέση αντ' αυτού, και αφήστε το Terraform να την ελέγξει πριν δημιουργήσει οτιδήποτε. Το παρακάτω μπλοκ είναι ενδεικτικό και χρησιμοποιεί τα ορίσματα δρομολογίου τελικού σημείου του παρόχου.
variable "client_vpn_destinations" {
description = "Destination CIDR mapped to an associated subnet key"
type = map(string)
}
resource "aws_ec2_client_vpn_route" "this" {
for_each = var.client_vpn_destinations
client_vpn_endpoint_id = aws_ec2_client_vpn_endpoint.this.id
destination_cidr_block = each.key
target_vpc_subnet_id = aws_subnet.private[each.value].id
lifecycle {
precondition {
condition = contains(keys(aws_subnet.private), each.value)
error_message = "Route target must be a subnet key in the associated map."
}
}
}
Με τον χάρτη δίπλα στη λίστα συσχετίσεων, η προσθήκη προορισμού επιβάλλει απόφαση για το ποιο υποδίκτυο τον φέρει. Αυτή είναι η συζήτηση που έκρυβε το ευρετήριο.
Μια διαφορετική αποτυχία παράγει ανούσιες τιμές αντί για σφάλμα ευρετηρίου. Η μετάδοση δομής χαμηλού επιπέδου εκεί όπου αναμένεται διεπαφή υψηλότερου επιπέδου αφήνει τα πεδία που διαβάζει το API μη συμπληρωμένα, και το CIDR που προκύπτει είναι άχρηστο. Το Terraform δείχνει την ίδια μορφή όταν φτάνει συμβολοσειρά εκεί όπου αναμένεται αντικείμενο. Ελέγξτε το σχήμα του παρόχου για τον τύπο ορίσματος.
Αποδείξτε το από έναν πελάτη
Εκτελέστε το terraform validate και ένα σχέδιο σε πραγματική κατάσταση πριν την εφαρμογή. Στη συνέχεια, συγκρίνετε τη λίστα δικτύων-στόχων του τελικού σημείου με τον χάρτη αντί να εμπιστεύεστε ένα επιτυχημένο apply.
Η δοκιμή αποδοχής είναι ένας συνδεδεμένος πελάτης που φτάνει σε κάθε προβλεπόμενο πρόθεμα.
Ο κανόνας εξουσιοδότησης είναι το σημείο όπου πολλές ρυθμίσεις σταματούν νωρίς. Έχει εύρος ενός CIDR προορισμού και μιας ομάδας, και ένα δρομολόγιο χωρίς αντίστοιχη εξουσιοδότηση παράγει συνδεδεμένο πελάτη που δεν μπορεί να φτάσει στο πρόθεμα. Ελέγξτε και τα δύο αντικείμενα για κάθε πρόθεμα, γιατί ένα apply που δημιουργεί το δρομολόγιο και ξεχνά τον κανόνα φαίνεται πλήρες. Δοκιμάστε με έναν χρήστη μέσα στην ομάδα και έναν έξω από αυτήν.
Όταν ένα πρόθεμα αποτυγχάνει, συγκρίνετε την καταχώριση δρομολογίου του με τον κανόνα εξουσιοδότησης. Η απούσα εξουσιοδότηση και το απόν δρομολόγιο μοιάζουν στο αρχείο καταγραφής του πελάτη και διορθώνονται σε διαφορετικούς πόρους.