Folosim GCP și Cloud DNS pentru a ne gestiona domeniul și încerc să rezolv aceste cazuri de utilizare:
- Aveți înregistrări private pentru lucruri precum baze de date care pot fi rezolvate numai în rețeaua companiei (VPC-ul nostru).
- Ignorați înregistrările publice cu IP-uri private pentru rutare alternativă în rețeaua companiei.
- Să fie capabil să emită provocări DNS01 și să rezolve înregistrările în rețeaua noastră și în mod public. Avem nevoie de acest lucru datorită modului în care funcționează cert-manager (pe care îl folosim pentru a emite certificate cu letsencrypt).
Am încercat să rezolv acest lucru cu o zonă publică și privată (AKA, split-horizon DNS), totuși, această soluție rezolvă doar cazurile de utilizare 1 și 2. Și rezolvă doar cazul de utilizare 2 dacă ne asigurăm că zona privată are o copie a toate înregistrările din zona publică (dacă nu există un omolog privat).
Cazul de utilizare 3 nu este îndeplinit cu această soluție, deoarece serverul nostru cert-manager creează înregistrările în zona publică și apoi nu le poate rezolva în zona publică. Datorită specificului configurației noastre, personalizarea certificat-manager pentru a rezolva ambele zone printr-o configurație locală nu este ideală. De asemenea, ar fi dificil să se creeze înregistrările pe ambele zone, deci din nou nu este soluția ideală.
Ceea ce aș dori este ca zona privată să trimită cereri către cea publică dacă nu are o înregistrare pentru o anumită solicitare. Există vreo modalitate de a face acest lucru, în special folosind GCP Cloud DNS?
Idealul
nslookup -> zonă privată -> zonă publică
Momentan avem
nslookup -> zonă privată -> eroare (NXDOMAIN) dacă nu există înregistrare
De exemplu,
# În timp ce sunt pe laptop
> nslookup ws1.example.com
...
Nume: ws1.example.com
Adresă: 34.111.111.111 # IP public pentru server web
# În timpul rețelei GCP
> nslookup db.example.com
...
Nume: db.example.com
Adresă: 10.10.0.2 # IP privată pentru o bază de date
> nslookup ws1.example.com
...
Nume: ws1.example.com
Adresă: 10.0.0.10 # IP privat (din zona privată) pentru server web
Acest lucru funcționează bine pentru cazurile de utilizare 1 și 2, dar când încercăm să rezolvăm o înregistrare care există doar în zona publică...
# În timp ce sunt pe laptop
> nslookup ws1.example.com
...
Nume: ws1.example.com
Adresă: 34.111.111.111 # IP public pentru server web
> nslookup ws2.example.com # Avem această înregistrare doar în zona publică
...
Nume: ws2.example.com
Adresă: 34.111.111.112 # IP public pentru alt server web
# În timp ce sunteți în VPC-ul GCP
> nslookup ws1.example.com
...
Nume: ws1.example.com
Adresă: 10.0.0.1 # IP privat (override) pentru server web
> nslookup ws2.example.com # Avem această înregistrare doar în zona publică
...
** serverul nu poate găsi ws2.example.com: NXDOMAIN # Nu se rezolvă. Ar trebui să se uite la zona privată apoi publică și să rezolve la 34.111.111.112.
Orice sugestii?
Ca o soluție, deocamdată, am trecut la utilizarea provocărilor HTTP01 pentru cert-manager, dar am prefera să folosim DNS01 dacă este posibil.