Sziasztok,
Kis segitseget szeretnek kerni az alabbi setuppal kapcsolatban.
- Adott a termek. Java alkalmazas <-> Postrgresql kapcsolattal. docker-compose-ban 2 kontener. Semmi extra.
- Adott a teszt gep. Ezen van melle egy Traefik v2.8 egy masik compose-ban.
- A virtualis "proxy" networkre kapcsolodik az app.
A teszt gepen parhuzamosan fut a dev, qa, staging kornyezet. Ebben az esetben mar 4 compose fut. 3 termek es 1 traefik.
A termek kontenereken van treafik label amiken keresztul ra tudnak nezi a fejlesztok a webes feluletre. Ez a konfig
traefik.enable: 'true' traefik.http.routers.termek{{termek_env}}.rule: Host(`{{termek_host_name}}`) traefik.http.routers.termek-{{termek_env}}.entrypoints: websecure traefik.http.routers.termek-{{termek_env}}.tls: 'true' traefik.http.routers.termek-{{termek_env}}.service: termek-{{termek_env}} traefik.http.services.termek-{{termek_env}}.loadbalancer.server.port: "80" traefik.docker.network: 'proxy'
Viszont most kitalaltak a fejleszoink hogy szeretnenek kivulrol is az adatbazisokhoz kapcsolodni.
A terv az hogy van 3 kulonobozo domain a tesztgepre iranyitva tehat
termek_host_name_dev
termek_host_name_qa
termek_host_name_staging
es attol fuggoen hogy melyikre kapcsolodnanak az 5432 porton, azt a postgresql-t erjek el
MEgprobaltam hasonlo modon kivitelezni mint ahogyan azt a https kapcsolattal tettem.
Uj Entrypoint a Traefik konfigban: postgres-db: address: :5432 Hozzaadtam az uj portot a Traefik compose-hoz image: traefik:v2.8 ports: - "80:80" - "443:443" - "5432:5432" Probaltam az albbi labelekkel traefik.enable: 'true' traefik.docker.network: "proxy" traefik.tcp.routers.dev-db.rule: HostSNI(`myhost-name`) traefik.tcp.routers.dev-db.entrypoints: postgres-db traefik.tcp.routers.dev-db.service: dev-db traefik.tcp.routers.dev-db.tls: "true" traefik.tcp.services.dev-db.loadbalancer.server.port: "5432" Namost ez igy nem mukodik. Nem erem el a postgres-t csak ha kiveszem a tls-t es a HostSNI(`*`) ra atallitom. Igy viszont csak egy db-t erek el mert nem tudok routolni domain nev alapjan. Azt nem szeretnem hogy a dev 5432 a qa 5433 a staging pedig 5434 porton uljon. Azt probalom elerni hogy domain alapjan tudjak routolni de valahogy nagyon nem akarja. A postgresql-ben beallitottam az ssl tanusitvanyt es hasznalja is szepen. psql (14.8 (Ubuntu 14.8-0ubuntu0.22.04.1), server 14.7 (Debian 14.7-1.pgdg110+1)) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. Probaltam mar direktben a Traefik-nel is probelkoni de nem sok sikerrel https://community.traefik.io/t/forward-http-s-to-postgresql-container-in-docker-swarm-compose-possible/18938/11 Otlet esetleg
Update:
Traefik v3.0.0-beta2 kepes mar ilyenre.
sima psql cli is tartalmazza az SNI-t szoval siman mukodik minden. CSak egy napba tel mire ratlaltam az image-ra :D
Hozzászólások
Hát, a HTTP protokollon kívül elég kevés protokoll tartalmaz FQDN neveket az azonosításhoz... A PostgreSQL szerintem pont nem ismer ilyent, ott IP cím és portszám van, slussz. Ergo azonos IP címen, azonos porton nem lesz elérhető több PostgreSQL példány az FQDN-től függően. Az 5243-re érkező csomagokban nincs FQDN, ami alapján szortírozni lehetne.
Ezt sima router oldali port átirányítással tudod megoldani, de akkor a külső címen különböző portok fognak az egyes belső DB példányokhoz tartozni.
Viszont én semmi módon nem tennék ki DB szerver portot publikus IP címre... Nem is értem a mai világban, mikor mindent is feltörnek és titkosítanak, és mindenki vesz le mindent a publikus elérhetőségekről, hogyan jut ez az eszükbe.
VPN-ezzenek be, és szépen "belső" hálózati címeken érjék el a DB példányokat.
Minden belso halozaton van/lesz. Semmi sem elerheto kivulrol. Ezek teszt rendszerek csak van vmi szamomra black box developer dolog amiert hozza akarnak ferni kivulrol is
Szoval nem nagyon van semmi opciom ugy tunik arra, hogy tobb domian nevet hostoljak ugyanarrol a geprol es a megcimzett compose-nak dobjam tovabb a forgalmat.
Nem vagyok otthon a PostgreSQL protokollban ennyire sojnos hogy tudjam en is avalaszt 100%-ra
Az adatbázis szerver forgalmát nem tudod HTTP proxy-val kezelni, hiszen az nem HTTP protokollt használ. A megoldás az, hogy más-más portokra publikálod ki az adott PostgreSQL instance-et (ha egy IP-n kell lenniük).
Postgres forgalmat nem lehet host alapon routolni, az csak http protokollon mukodik.
Mas-mas portra kell kiraknod a postgreseket.
Vmi ilyesmire gondoltam
https://stackoverflow.com/questions/61113433/is-it-possible-to-redirect…
Nade ott is azt írják, hogy SNI. Ha van SNI, minden van. Ha nincs, nincs.
Igen, ha a PGSQL kliens amit használnak az tudja az SNI-t, akkor elméletben lehetséges. A LIBPQ kliens állítólag tudja.
ha pl navicatot hasznalnak, annak van http(+php)tunnelje. csak a tunnel lassa mindharom kornyezetet (network). vagy akkor 3x kell kulon-kulon kiajanlani a tunnelt.
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
Ha psql ssl kapcsolat jó, akkor be lehet lőni egy nginx stream nonterminated ssl proxyt a portra, ami header preload + az sni alapján szét tudja dobni a megfelelő szerverhez a kapcsolatot.
Aktiv googlizas utan ugy tunik a 3.0 beta Traefik-kal mukodhet
https://github.com/dbeaver/dbeaver/issues/7758
🤞