मैं ट्राफिक को कॉन्फ़िगर करने का प्रयास कर रहा हूं ताकि मुझे डोमेन नाम के माध्यम से सेवाओं तक पहुंच हो, और मुझे अलग-अलग पोर्ट सेट नहीं करने पड़ेंगे । उदाहरण के लिए, दो MongoDB सेवाएं, दोनों डिफ़ॉल्ट पोर्ट पर, लेकिन विभिन्न डोमेन में, example.localhost
और example2.localhost
। केवल यह उदाहरण काम करता है। मेरा मतलब है, अन्य मामले शायद काम करते हैं, लेकिन मैं उनसे कनेक्ट नहीं कर सकता, और मुझे समझ नहीं आ रहा है कि समस्या क्या है। यह शायद ट्राईफिक की समस्या भी नहीं है।
मैंने एक उदाहरण के साथ एक रिपॉजिटरी तैयार की है जो काम करता है। आपको केवल mccert के साथ अपना स्वयं का प्रमाण पत्र तैयार करना होगा । पृष्ठ त्रुटि example.localhost
देता है, 403 Forbidden
लेकिन आपको इसके बारे में चिंता नहीं करनी चाहिए, क्योंकि इस कॉन्फ़िगरेशन का उद्देश्य यह दिखाना है कि एसएसएल काम कर रहा है (पैडलॉक, ग्रीन स्टेटस)। तो ध्यान केंद्रित नहीं है 403
।
सेवा से केवल SSL कनेक्शन mongo
काम करता है। मैंने इसे रोबो 3 टी प्रोग्राम के साथ परीक्षण किया । एसएसएल कनेक्शन का चयन करने के बाद, होस्ट प्रदान करने example.localhost
और स्व-हस्ताक्षरित (या स्वयं) कनेक्शन कार्यों के लिए प्रमाण पत्र का चयन करने के लिए। और यही एकमात्र तरीका है जो उस तरह से काम करता है। के लिए कनेक्शन redis
( Redis डेस्कटॉप प्रबंधक ) और करने के लिए pgsql
( PhpStorm , DBeaver , DbVisualizer ) क्या मैं प्रमाण पत्र नहीं प्रदान करते हैं या की परवाह किए बिना काम नहीं करते हैं,। मैं एसएसएल को सेवाओं के लिए अग्रेषित नहीं करता, मैं केवल ट्राफिक से जुड़ता हूं। मैंने उस पर लंबे घंटे बिताए। मैंने इंटरनेट पर सर्च किया। मुझे अभी तक उत्तर नहीं मिला है। क्या किसी ने इसका हल निकाला है?
पुनश्च। मैं लिनक्स मिंट पर काम करता हूं, इसलिए मेरे कॉन्फ़िगरेशन को इस वातावरण में बिना किसी समस्या के काम करना चाहिए। मैं लिनक्स के लिए समाधान के लिए पूछना होगा।
यदि आप भंडार को ब्राउज़ नहीं करना चाहते हैं , तो मैं सबसे महत्वपूर्ण फाइलें संलग्न करता हूं:
डोकर-compose.yml
version: "3.7"
services:
traefik:
image: traefik:v2.0
ports:
- 80:80
- 443:443
- 8080:8080
- 6379:6379
- 5432:5432
- 27017:27017
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./config.toml:/etc/traefik/traefik.config.toml:ro
- ./certs:/etc/certs:ro
command:
- --api.insecure
- --accesslog
- --log.level=INFO
- --entrypoints.http.address=:80
- --entrypoints.https.address=:443
- --entrypoints.traefik.address=:8080
- --entrypoints.mongo.address=:27017
- --entrypoints.postgres.address=:5432
- --entrypoints.redis.address=:6379
- --providers.file.filename=/etc/traefik/traefik.config.toml
- --providers.docker
- --providers.docker.exposedByDefault=false
- --providers.docker.useBindPortIP=false
apache:
image: php:7.2-apache
labels:
- traefik.enable=true
- traefik.http.routers.http-dev.entrypoints=http
- traefik.http.routers.http-dev.rule=Host(`example.localhost`)
- traefik.http.routers.https-dev.entrypoints=https
- traefik.http.routers.https-dev.rule=Host(`example.localhost`)
- traefik.http.routers.https-dev.tls=true
- traefik.http.services.dev.loadbalancer.server.port=80
pgsql:
image: postgres:10
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
labels:
- traefik.enable=true
- traefik.tcp.routers.pgsql.rule=HostSNI(`example.localhost`)
- traefik.tcp.routers.pgsql.tls=true
- traefik.tcp.routers.pgsql.service=pgsql
- traefik.tcp.routers.pgsql.entrypoints=postgres
- traefik.tcp.services.pgsql.loadbalancer.server.port=5432
mongo:
image: mongo:3
labels:
- traefik.enable=true
- traefik.tcp.routers.mongo.rule=HostSNI(`example.localhost`)
- traefik.tcp.routers.mongo.tls=true
- traefik.tcp.routers.mongo.service=mongo
- traefik.tcp.routers.mongo.entrypoints=mongo
- traefik.tcp.services.mongo.loadbalancer.server.port=27017
redis:
image: redis:3
labels:
- traefik.enable=true
- traefik.tcp.routers.redis.rule=HostSNI(`example.localhost`)
- traefik.tcp.routers.redis.tls=true
- traefik.tcp.routers.redis.service=redis
- traefik.tcp.routers.redis.entrypoints=redis
- traefik.tcp.services.redis.loadbalancer.server.port=6379
config.toml
[tls]
[[tls.certificates]]
certFile = "/etc/certs/example.localhost.pem"
keyFile = "/etc/certs/example.localhost-key.pem"
बनाएँ और चलाएँ
mkcert example.localhost # in ./certs/
docker-compose up -d
स्टेप बाई स्टेप तैयार करें
- Mkcert स्थापित करें (
mkcert -install
CA के लिए भी चलाएँ ) - मेरा कोड क्लोन किया
- में
certs
फ़ोल्डर रनmkcert example.localhost
- द्वारा कंटेनर प्रारंभ करें
docker-compose up -d
- पृष्ठ खोलें https: //example.localhost/ और जांचें कि क्या यह सुरक्षित कनेक्शन है
- तो पता http: //example.localhost/ पहुंच योग्य नहीं है, जोड़ने
127.0.0.1 example.localhost
के लिए/etc/hosts
प्रमाणपत्र:
- जनता:
./certs/example.localhost.pem
- निजी:
./certs/example.localhost-key.pem
- सीए:
~/.local/share/mkcert/rootCA.pem
परीक्षण MongoDB
- रोबो 3 टी स्थापित करें
- नया कनेक्शन बनाएँ:
- पता:
example.localhost
- एसएसएल प्रोटोकॉल का उपयोग करें
- CA प्रमाणपत्र:
rootCA.pem
(या स्व-हस्ताक्षरित प्रमाणपत्र)
- पता:
- परीक्षण उपकरण:
टेस्ट रेडिस
- RedisDesktopManager स्थापित करें
- नया कनेक्शन बनाएँ:
- पता:
example.localhost
- एसएसएल
- सार्वजनिक कुंजी:
example.localhost.pem
- निजी चाबी:
example.localhost-key.pem
- प्राधिकरण:
rootCA.pem
- पता:
- परीक्षण उपकरण:
अब तक:
- आईपी के माध्यम से पोस्टग्रैज से कनेक्ट कर सकते हैं (ट्राफिक से जानकारी)
jdbc:postgresql://172.21.0.4:5432/postgres?sslmode=disable
jdbc:postgresql://172.21.0.4:5432/postgres?sslfactory=org.postgresql.ssl.NonValidatingFactory
टेलेट की कोशिश करें (आईपी हर डॉकटर को फिर से शुरू करता है):
> telnet 172.27.0.5 5432
Trying 172.27.0.5...
Connected to 172.27.0.5.
Escape character is '^]'.
^]
Connection closed by foreign host.
> telnet example.localhost 5432
Trying ::1...
Connected to example.localhost.
Escape character is '^]'.
^]
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8
Connection: close
400 Bad RequestConnection closed by foreign host.
यदि मैं सीधे पोस्टग्रेज से कनेक्ट करता हूं, तो डेटा अच्छा है। यदि मैं ट्रैफिक से जुड़ता हूं तो कनेक्शन बंद करते समय मेरा खराब अनुरोध है। मुझे नहीं पता कि इसका क्या मतलब है और क्या इसका मतलब कुछ होना चाहिए।
Connections to redis (Redis Desktop Manager) ... do not work
, लेकिन स्क्रीनशॉट से पता चलता है Successful connection
- आप निम्न स्तर पर परीक्षण क्यों नहीं कर रहे हैं curl, openssl, telnet, ...
? netstat
यदि आप उन ऐप पोर्ट को वास्तव में 127.0.0.1
इंटरफ़ेस पर ट्रैफ़िक के लिए बाँध रहे हैं, तो आप उनका परीक्षण क्यों नहीं कर रहे हैं ?
I can't connect to them
-> आपने इसका परीक्षण कैसे किया और त्रुटि क्या थी?