Ιδιωτική δικτύωση και domains .internal στο Dockup
Η ιδιωτική δικτύωση στο Dockup συνδέει services και databases ενός project μέσω ονομάτων .internal, απομονώνει τα projects και παρέχει στα preview πρόσβαση μόνο για ανάγνωση στη database.
Η ιδιωτική δικτύωση επιτρέπει σε services και managed databases μέσα στο ίδιο Dockup project να επικοινωνούν χωρίς η κίνηση μεταξύ πόρων του ίδιου project να περνά από το δημόσιο internet. Κάθε resource λαμβάνει ένα σταθερό hostname της μορφής <slug>.internal, ενώ τα ξεχωριστά projects παραμένουν απομονωμένα μεταξύ τους.
Το network ενεργοποιείται προαιρετικά. Η ενεργοποίησή του συνδέει τα υπάρχοντα resources του project χωρίς να απαιτεί άμεση αλλαγή της κίνησης της εφαρμογής, ενώ τα services λαμβάνουν internal connection variables μετά από redeployment.
Πώς μειώνει η service-to-service δικτύωση την έκθεση στο public internet;
Ένα public database endpoint είναι προσβάσιμο από το internet, ακόμη και όταν το authentication εμποδίζει τη μη εξουσιοδοτημένη χρήση. Μια private route εξαλείφει αυτή την έκθεση για την κίνηση της εφαρμογής και παρέχει στα services ένα σταθερό internal name που δεν εξαρτάται από public address.
Η ίδια αρχή ισχύει και για τις κλήσεις service-to-service. Ένα API μπορεί να καλεί έναν worker, ένα internal admin service ή ένα backend μέσω του project network αντί μέσω ενός public custom domain.
| Διαδρομή κίνησης | Public route | Private route |
|---|---|---|
| API προς PostgreSQL | Public host και port | main-db.internal |
| Web προς API | Public custom domain | api.internal |
| Worker προς Redis | Public host και port | app-redis.internal |
| Preview προς production DB | Public DB credential | Read-only internal user |
| Κλήση μεταξύ projects | Απαιτείται public endpoint | Μπλοκάρεται από την απομόνωση των projects |
Το private δεν σημαίνει χωρίς authentication. Συνεχίστε να χρησιμοποιείτε database users, service authorization και secrets. Το network καθορίζει την προσβασιμότητα· τα credentials καθορίζουν τα permissions.
Πώς ενεργοποιείτε την ιδιωτική δικτύωση ενός project;
Ενεργοποιήστε το network για το project slug:
dockup network enable production --json
Η ενέργεια συνδέει τα services και τις managed databases στο project network. Οι υπάρχοντες public listeners παραμένουν διαθέσιμοι από προεπιλογή, επομένως η υιοθέτηση μπορεί να γίνει σταδιακά.
Κάντε redeploy σε κάθε application service που πρέπει να λάβει internal environment variables:
dockup deploy production/api --wait --json
dockup deploy production/worker --wait --json
Το Dockup εισάγει connection data, όπως DATABASE_URL_INTERNAL, database-specific internal URL και host variables, καθώς και host/port values των services. Ελέγξτε τα environment keys του service χωρίς να εκθέσετε secrets:
dockup env list -s production/api --json
Μην κατασκευάζετε χειροκίνητα ένα URL από το display name. Τα resource slugs καθορίζουν το hostname <slug>.internal.
Πριν αλλάξετε το application config, επιβεβαιώστε ότι κάθε dependency βρίσκεται στο ίδιο project. Τα ξεχωριστά projects διαθέτουν ξεχωριστά networks και δεν μπορούν να κάνουν resolve ή να προσεγγίσουν το ένα το άλλο μέσω της internal διαδρομής.
Πώς αλλάζουν τα .internal domains το configuration των services;
Το internal DNS παρέχει ένα σταθερό όνομα, ενώ τα containers και τα nodes αλλάζουν από κάτω. Ένα API service με slug api είναι προσβάσιμο ως api.internal από services του ίδιου project· μια database με slug main-db είναι προσβάσιμη ως main-db.internal.
Προτιμήστε τα injected connection variables όπου είναι διαθέσιμα. Κωδικοποιούν το σωστό protocol, credentials, database name και host format. Ένα string που δημιουργήθηκε χειροκίνητα μπορεί να παραλείπει TLS, password encoding ή database parameters.
Κάντε migrate μία dependency κάθε φορά:
- Ενεργοποιήστε το network.
- Κάντε redeploy το consuming service.
- Επιβεβαιώστε ότι υπάρχει η internal variable.
- Αλλάξτε την εφαρμογή ώστε να τη χρησιμοποιεί.
- Κάντε deploy με
--wait. - Επαληθεύστε τις νέες connections.
- Παρακολουθήστε τα runtime logs και τον χρόνο απόκρισης.
- Συνεχίστε με την επόμενη dependency.
Ένα service μπορεί να διατηρεί το public custom domain του για την κίνηση των χρηστών, ενώ να χρησιμοποιεί private hostnames για backend calls. Οι public και private διαδρομές εξυπηρετούν διαφορετικά trust boundaries.
Ο οδηγός environment variables και secrets εξηγεί γιατί οι αλλαγές στις connections απαιτούν redeployment.
Πώς κάνετε μια managed database private-only;
Αφού κάθε απαιτούμενος consumer χρησιμοποιεί την internal διαδρομή, αφαιρέστε τον public listener:
dockup db private production/main-db --json
Επαναφέρετε την πρόσβαση public και private όταν χρειάζεται:
dockup db private production/main-db --off --json
Αυτή η ενέργεια στη database δημιουργεί ξανά το container, διατηρώντας τα δεδομένα. Προγραμματίστε maintenance window κατάλληλο για το workload, επιβεβαιώστε ότι υπάρχει πρόσφατο backup και δοκιμάστε το application reconnection.
Πριν την κάνετε private-only, ελέγξτε τα εξής:
- Κάθε production service που χρησιμοποιεί τη database βρίσκεται στο ίδιο project.
- Τα operational tools δεν απαιτούν το public endpoint.
- Η πρόσβαση από preview χρησιμοποιεί την υποστηριζόμενη private διαδρομή.
- Υπάρχει backup και η διαδικασία recovery είναι κατανοητή.
- Τα connection pools κάνουν retry με ασφαλή τρόπο.
- Ο ακριβής στόχος
project/dbέχει καταγραφεί.
Μια private-only database δεν μπορεί να προσεγγιστεί απευθείας από laptop operator μέσω του public internet. Χρησιμοποιήστε υποστηριζόμενη platform access και application-level diagnostics αντί να ανοίγετε ξανά τον listener χωρίς σοβαρό λόγο.
Για database operations, δείτε τον οδηγό managed PostgreSQL.
Πώς αποκτούν τα PR previews ασφαλή πρόσβαση σε production data;
Κάθε Dockup PR ή branch preview λαμβάνει το δικό του isolated deployment και URL. Σε ένα project με ιδιωτική δικτύωση, το preview συμμετέχει στο project network και μπορεί να κάνει resolve το <slug>.internal.
Το Dockup δημιουργεί αυτόματα έναν read-only user για την production managed database που χρησιμοποιεί το preview. Το preview μπορεί να κάνει query σε data με production-like δομή, αλλά δεν μπορεί να γράψει μέσω αυτού του user.
Αυτός ο σχεδιασμός μειώνει τον κίνδυνο ένα feature branch να τροποποιήσει customer records, όμως η read access εξακολουθεί να έχει συνέπειες:
- Personal ή sensitive data μπορεί να εμφανιστούν στο preview.
- Νέος application code μπορεί να καταγράψει δεδομένα που έγιναν query.
- Ένα ευάλωτο preview URL μπορεί να εκθέσει αποτελέσματα queries.
- Ακριβά queries μπορούν να επηρεάσουν το production load.
- Οι παραδοχές του schema μπορεί να διαφέρουν μεταξύ branch και production.
Ενεργοποιήστε το preview deployment μόνο βάσει reviewed policy:
dockup pr-preview production/api --on --json
dockup preview branch feature/search production/api --json
Χρησιμοποιήστε το isolated environment του preview για feature flags και secrets που δεν αφορούν τη database. Μην αντικαταστήσετε το automatic read-only credential με το production write credential.
Πώς πρέπει να παρακολουθείτε και να αντιμετωπίζετε προβλήματα στην ιδιωτική δικτύωση;
Ξεκινήστε από την τοπολογία και το configuration, αντί να θεωρήσετε αμέσως ότι υπάρχει outage στην πλατφόρμα.
| Σύμπτωμα | Πιθανή περιοχή | Έλεγχος |
|---|---|---|
| Δεν βρέθηκε το όνομα | Λάθος slug/project ή το service δεν έχει γίνει redeploy | Service list και env keys |
| Η σύνδεση απορρίφθηκε | Το resource έχει σταματήσει ή χρησιμοποιείται λάθος port | Status και DB/service logs |
| Αποτυχία authentication | Λάθος credential | Secret rotation και user |
| Το public λειτουργεί, το private όχι | Internal variable ή υιοθέτηση του network | Network enable, redeploy |
| Το preview μπορεί να κάνει read αλλά όχι write | Αναμενόμενη read-only policy | Μην αντικαταστήσετε το credential |
| Η κλήση μεταξύ projects αποτυγχάνει | Αναμενόμενη απομόνωση | Χρησιμοποιήστε public authenticated API |
Ελέγξτε τα application runtime logs:
dockup logs production/api --json
Ελέγξτε το μέγεθος της database και τα application connection errors:
dockup db size production/main-db --json
dockup logs production/api --json
Μην εκτυπώνετε ολόκληρα τα internal connection URLs σε incident notes. Μπορεί να περιέχουν credentials, παρότι το hostname από μόνο του δεν είναι secret.
Σχέδιο migration και rollback
Διατηρήστε τον public listener στην πρώτη φάση. Αν το internal deployment αποτύχει, επαναφέρετε το προηγούμενο configuration της εφαρμογής και κάντε redeploy. Κάντε τη database private-only μόνο αφού η internal διαδρομή έχει παραμείνει σταθερή.
Για να απενεργοποιήσετε ολόκληρο το project network:
dockup network disable production --json
Αυτό πρέπει να είναι συνειδητή ενέργεια rollback και όχι το πρώτο βήμα troubleshooting. Η απενεργοποίηση του network επηρεάζει κάθε συνδεδεμένο resource στο project.
Καταγράψτε τις network mutations μέσω του audit log:
dockup audit --writes --json
Checklist παραγωγής για την ιδιωτική δικτύωση
Ένα πλήρες runbook για την ιδιωτική δικτύωση περιλαμβάνει το project slug, τα service και database slugs, τα internal hostnames, τα ονόματα των injected variables, την πολιτική των public listeners, την πολιτική πρόσβασης των preview, την κατάσταση των backups, τη σειρά των redeployments και τη διαδρομή rollback.
Η χρήση CPU, RAM και disk εξακολουθεί να χρεώνεται βάσει χρήσης και να μετριέται ανά λεπτό· το private routing είναι αρχιτεκτονική επιλογή και όχι fixed instance class. Χρησιμοποιήστε το PaaS pricing explained για cost modeling.
Το Dockup CLI reference περιέχει τις τρέχουσες network και database commands. Για γενική απομόνωση deployment, δείτε τις security best practices.
Μοντελοποιήστε το service authorization ξεχωριστά από την προσβασιμότητα
Ένα internal hostname αποδεικνύει μόνο ότι ο caller βρίσκεται στο project network. Δεν αποδεικνύει ποιο service έκανε το request ούτε αν το συγκεκριμένο service επιτρέπεται να εκτελέσει την ενέργεια. Διατηρήστε το application authentication για ευαίσθητα internal APIs και τα database credentials για data access.
Χρησιμοποιήστε service-specific secrets αντί για ένα κοινόχρηστο internal token. Αν ένα preview λαμβάνει read-only database access, μην του δώσετε επίσης production service token που μπορεί να ενεργοποιήσει writes μέσω ενός API.
Μετρήστε την επίδραση του cutover
Συγκρίνετε το connection latency, το error rate και τον χρόνο απόκρισης p95 πριν και μετά την αλλαγή σε internal endpoints. Ο βασικός στόχος είναι η απομόνωση και μια σταθερή private διαδρομή· κάθε βελτίωση στο latency πρέπει να μετριέται και όχι να θεωρείται δεδομένη.
dockup uptime production/api --hours 24 --json
Διατηρήστε το observation window και το deployment ID. Έτσι η αλλαγή στην ιδιωτική δικτύωση αποκτά μετρήσιμο κριτήριο ολοκλήρωσης, αντί να τελειώνει απλώς στο «έγινε resolve το DNS».
Τεκμηριώστε την εξαίρεση της public διαδρομής
Κάποιο external integration, operator tool ή cross-project service μπορεί να χρειάζεται ακόμη public endpoint. Καταγράψτε για κάθε εξαίρεση το authentication, τον owner και την προϋπόθεση κατάργησής της. Έτσι αποφεύγετε να παραμείνει ο public listener επ’ αόριστον επειδή κανείς δεν θυμάται γιατί υπάρχει.
Ένα πλήρες rollout ιδιωτικής δικτύωσης μπορεί να είναι μερικό, όμως κάθε public path πρέπει να είναι σκόπιμο.
Ελέγχετε ξανά τις internal dependencies μετά από renames
Ένα resource rename ή replacement μπορεί να αλλάξει το slug που χρησιμοποιείται για το .internal addressing. Καταγράψτε τους consumers πριν αλλάξετε ονόματα, κάντε redeploy με τις ενημερωμένες injected variables και επαληθεύστε κάθε private connection.
Έτσι η ιδιωτική δικτύωση παραμένει σταθερή καθώς εξελίσσεται το project.
Ξεκινήστε με ένα deployment που μπορεί να επαληθευτεί
Ενεργοποιήστε τη δικτύωση σε ένα non-production project, μεταφέρετε μία dependency στο .internal endpoint της και επιβεβαιώστε τη διαδρομή rollback πριν αφαιρέσετε οποιονδήποτε public listener.
Ξεκινήστε δωρεάν στο app.dockup.ai. Το Free plan κοστίζει $0 τον μήνα, περιλαμβάνει αρχικό credit $10 και υποστηρίζει ένα workspace, τρεις databases και τρία deployments.
FAQ
Ποιο hostname χρησιμοποιούν τα resources του Dockup στο private network;
Κάθε service και managed database του ίδιου project είναι προσβάσιμο μέσω ενός σταθερού hostname της μορφής <slug>.internal.
Η ενεργοποίηση της ιδιωτικής δικτύωσης καταργεί την πρόσβαση σε public database;
Όχι. Από προεπιλογή, το network προστίθεται χωρίς να καταργεί την υπάρχουσα πρόσβαση. Χρησιμοποιήστε τη ξεχωριστή private command της database για να αφαιρέσετε τον public listener αφού οι consumers χρησιμοποιούν την internal διαδρομή.
Μπορούν διαφορετικά Dockup projects να επικοινωνούν μεταξύ τους ιδιωτικά;
Όχι. Κάθε project διαθέτει isolated network, επομένως η επικοινωνία μεταξύ projects πρέπει να χρησιμοποιεί κατάλληλο public και authenticated interface.
Μπορεί ένα PR preview να γράψει στην production database;
Σε ένα project με ιδιωτική δικτύωση, το Dockup δημιουργεί αυτόματα έναν read-only database user για το preview, επιτρέποντας reads αλλά αποτρέποντας writes μέσω αυτού του credential.
Γιατί πρέπει να κάνουν redeploy τα services αφού ενεργοποιηθεί η δικτύωση;
Το redeployment δίνει στο νέο container τις internal connection variables και επιτρέπει στην εφαρμογή να ξεκινήσει με το configuration του private endpoint.
