Εμφάνιση 1-14 από 14

Θέμα: Docker Networking

  1. #1
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.441
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Καλησπέρα,
    έχω φτιάξει ένα μηχάνημα στο οποίο φιλοξενώ διάφορα docker services. Για να έχω πρόσβαση σε αυτά έχω ένα apache (σε docker container) το οποίο λειτουργεί ως Reverse Proxy προς τα services.

    Τόσο ο proxy, όσο και τα services είναι σε ένα κοινό δίκτυο (docker network) για να μπορούν να "μιλάνε" χωρίς να έχουν τίποτα exposed προς τον host. Μόνο ο proxy κάνει bind στις πόρτες 80 και 443 του host.

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  config.png 
Εμφανίσεις:  8 
Μέγεθος:  11,4 KB 
ID: 227778

    Σε γενικές γραμμές όταν θέλω να επικοινωνήσω από container σε container το κάνω μέσα από κάποιο network.

    Το πρόβλημα που αντιμετωπίζω τώρα είναι ότι πρέπει να μιλήσουν δύο container αλλά μέσω του proxy και όχι απευθείας μέσω του docker network. Στην εικόνα το app1 πρέπει να μιλήσει με το app2 αλλά με address app2.domain.com:80 (θα πάει μέσω proxy) και όχι απλά app2:3000 (μέσω docker). Το πρόβλημα όμως είναι ότι τα request μου κάνουν timeout. Αν κάνω απλά ένα curl από το app1 στο app2.domain.com δεν παίρνω ποτέ απάντηση (ούτε deny, τίποτα), ενώ με app2:3000 μου απαντάει. Επίσης από τον host μου απαντάει κανονικά στην curl.

    Υπάρχει κάποια ρύθμιση που το μπλοκάρει ή έστω κάποιος τρόπος να κάνω troubleshoot στο τι φταίει;

    Υ.Γ. Μπορεί η συνολική διάταξη να είναι λάθος - μη βέλτιστη, είμαι ανοιχτός σε προτάσεις για να το αλλάξω. Το μόνο που θα ήθελα να αποφύγω είναι εγκαταστάσεις στον host (πχ apache) ώστε το μόνο που χρειάζεται να είναι το docker.

  2. #2
    Εγγραφή
    04-02-2019
    Μηνύματα
    164
    Downloads
    0
    Uploads
    0
    ISP
    Vodafone
    δεν βλέπω πως μπορεί να επικοινωνήσει το ένα container με το άλλο πάνω σε http. Δηλαδή εσύ στέλνεις μια αίτηση στον httpd και μετά τι; κάνεις forward στο container? δεν πρέπει να απαντήσει ένας άλλος http διακομιστής απο εκεί;
    Δεν πολυκαταλαβαίνω βέβαια τι ακριβώς κάνεις και τι εννοείς με τον όρο επικοινωνία. Μια λύση είναι τα websockets που είναι "πάνω" από το http με την προϋπόθεση ότι σε κάθε container θα στήσεις το ανάλογο end-point, αλλά γενικά μιλώντας νομίζω ότι χρειάζεσαι μια εφαρμογή message queue (rabitmq, πχ) ή ίσως kubernetes ή και apache kafka (για τα οποία όμως γνωρίζω ελάχιστα ).

  3. #3
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.441
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Σκέψου τρέχουν 3 web server. Ο ένας λειτουργεί ως proxy και οι άλλοι δύο σερβίρουν κάποιες στατικές σελίδες. Κάποια στιγμή θέλουμε να κάνουμε ένα wget από το app1 στο app2, αλλά πρέπει να χρησιμοποιήσουμε το public name, και να περάσουμε μέσα από τον proxy (app2.domain.com). Αν από το app1 κάνω wget app2:3000 δουλεύει μια χαρά. Αν κάνω wget app2.domain.com, δεν παίρνω ποτέ απάντηση και κάνει timeout.

  4. #4
    Εγγραφή
    04-02-2019
    Μηνύματα
    164
    Downloads
    0
    Uploads
    0
    ISP
    Vodafone
    Ωραία, οπότε, εγώ θα ξεκίναγα με τα log του apache στον proxy. Δες αν φθάνει εκεί η αίτηση από το app1, αν δεν φθάνει έλεγξε αν έχεις θέμα με τις dns εγγραφές (το αρχείο hosts υποθέτω), αν και λογικά θα είχες μήνυμα λάθους σε αυτή την περίπτωση. Αν βλέπεις error στο log toy proxy apache τότε έχεις θέμα με το configuration σου. Φαντάζομαι δεν "τρέχεις" καποιο network analyzer σε κάποιο container, ισως θα ήταν χρήσιμο να παρακολουθήσεις την κίνηση από τα app1 kai 2 προς τον proxy.

  5. #5
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.441
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Υπάρχει container σαν network analyzer;

    Στον proxy βλέπω δέχεται το αίτημα στην 80 και το κάνει redirect στην 443, μετά απόλυτη σιωπή... Το app2 δεν δέχεται ποτέ αίτημα. Αν καλέσω την 443 δεν βλέπω τίποτα. Δεν ξέρω αν υπάρχει τρόπος να δω τα εισερχόμενα, ακόμα και αν δεν έχουν απαντηθεί, του έχω βάλει LogLevel trace1.

  6. #6
    Εγγραφή
    04-02-2019
    Μηνύματα
    164
    Downloads
    0
    Uploads
    0
    ISP
    Vodafone
    αν το forward στην 443 σημαίνει και χρήση https τότε προσπάθησε στο wget με --no-check-certificate flag (στο διαδίκτυο το βρήκα αυτό). Αν δεν κάνεις χρήση http over ssl δες αν κόβει κάτι την 443

  7. #7
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.441
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Δεν την κόβει. Από έξω "μιλάω" κανονικά με το app2.domain.com όπως επίσης και από τον host απευθείας. Το πρόβλημα είναι αν μέσα από ένα container (app1) προσπαθήσω να καλέσω το app2.domain.com . Εκεί κάτι πάει στραβά και κάτι χάνει...

    - - - Updated - - -

    Μου πρότειναν να δοκιμάσω και το traefik που είναι για routing σε docker, μπας και καταφέρω τίποτα.

  8. #8
    Εγγραφή
    25-01-2005
    Περιοχή
    Ιωάννινα
    Ηλικία
    42
    Μηνύματα
    1.619
    Downloads
    12
    Uploads
    0
    ISP
    ΟΤΕ Conn-x
    Παράθεση Αρχικό μήνυμα από MitsakosGR Εμφάνιση μηνυμάτων
    Δεν την κόβει. Από έξω "μιλάω" κανονικά με το app2.domain.com όπως επίσης και από τον host απευθείας. Το πρόβλημα είναι αν μέσα από ένα container (app1) προσπαθήσω να καλέσω το app2.domain.com . Εκεί κάτι πάει στραβά και κάτι χάνει...

    - - - Updated - - -

    Μου πρότειναν να δοκιμάσω και το traefik που είναι για routing σε docker, μπας και καταφέρω τίποτα.
    Είναι τα 2 containers στο ίδιο virtual network bridge?
    A very minor case of serious brain damage.

  9. #9
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.441
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από riddle3 Εμφάνιση μηνυμάτων
    Είναι τα 2 containers στο ίδιο virtual network bridge?
    Ναι, είναι στο ίδιο network.

  10. #10
    Εγγραφή
    25-01-2005
    Περιοχή
    Ιωάννινα
    Ηλικία
    42
    Μηνύματα
    1.619
    Downloads
    12
    Uploads
    0
    ISP
    ΟΤΕ Conn-x
    Μάλλον χρειάζεσαι hairpin nat ώστε όταν ζητάς το app2.domain.com να το κάνει resolve στην τοπική ip/domain.

    Αυτό μπορείς να το κάνεις είτε μέσα μόνο στο container είτε σε όλο το δίκτυο και μπορείς είτε για μόνο ένα sub ή για ολόκληρο το domain (συνήθως στα περισσότερα routers θα είναι κάτι σαν rebind protection).

    Αν θες κάτι πολύ γρήγορο και εύκολο δες και την νέα δωρεάν υπηρεσία της cloudflare (βασικά έχει καιρό αλλά τώρα έγινε δωρεάν) τα cloudflare tunnels.

    Πρακτικά βάζεις την cloudflare σαν reverse proxy (με ότι αυτό συνεπάγεται).
    A very minor case of serious brain damage.

  11. #11
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.441
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Μάλλον εγώ είμαι χαζός, ώρες ώρες, αλλά και το σύστημα έχει μια κουλαμάρα...

    Όταν κάνεις bind ports σε ένα container,πάει αυτόματα και βάζει rules στο iptable για να περνάνε. Εγώ είχα ενεργοποιήσει και το ufw του Ubuntu και είχα ξεχάσει να αφήσω την 443. Το φοβερό όμως είναι ότι οι κανόνες του ufw πιάνουν μόνο όταν μιλάς από container στην public IP του host. Σε κάθε άλλη περίπτωση πιάνουν τα rules το docker...

    Για αυτό μου φαινόταν τόσο περίεργο που απέξω μίλαγα κανονικά και από μέσα όχι...

  12. #12
    Εγγραφή
    07-02-2007
    Μηνύματα
    747
    Downloads
    6
    Uploads
    0
    Αν θέλεις μπορείς να απενεργοποιήσεις το iptables manipulation που κάνει το docker. Απλά μετά πρέπει να σετάρεις το ΝΑΤ για το docker χειροκίνητα. Οδηγίες έχει εδώ: https://blog.daknob.net/debian-firewall-docker/

    Έχω κάνει ερώτηση στο SO σχετικά με τα downsides αλλά δεν πήρα απάντηση. Σε ένα VPS που το έχω δοκιμάσει δεν έχω βρει κάποιο πρόβλημα μέχρι τώρα και έχω βρει αναφορές σε διάφορα github issues ότι και άλλοι κάνουν το ίδιο. Χρησιμοποιώ σκέτο docker όμως, αν τρέχεις docker swarm ή kubernetes άλλη συζήτηση.
    https://stackoverflow.com/questions/...ptables-rules/
    Οδηγός για LaTeX στα Ελληνικά
    Οδηγός για Linux στα Ελληνικά

  13. #13
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.441
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από pmav99 Εμφάνιση μηνυμάτων
    Αν θέλεις μπορείς να απενεργοποιήσεις το iptables manipulation που κάνει το docker. Απλά μετά πρέπει να σετάρεις το ΝΑΤ για το docker χειροκίνητα. Οδηγίες έχει εδώ: https://blog.daknob.net/debian-firewall-docker/

    Έχω κάνει ερώτηση στο SO σχετικά με τα downsides αλλά δεν πήρα απάντηση. Σε ένα VPS που το έχω δοκιμάσει δεν έχω βρει κάποιο πρόβλημα μέχρι τώρα και έχω βρει αναφορές σε διάφορα github issues ότι και άλλοι κάνουν το ίδιο. Χρησιμοποιώ σκέτο docker όμως, αν τρέχεις docker swarm ή kubernetes άλλη συζήτηση.
    https://stackoverflow.com/questions/...ptables-rules/
    Θέλει ρύθμιση και τα NAT ή μόνο το firewall;
    Άλλαξα αυτή την επιλογή και προς το παρόν μόνο το firewall ρυθμίζω και όλα τα άλλα παίζουν. Ανεβοκατέβασα μερικά container (κάποια καινούργια) και είδα ότι παίζουν. Ακόμα μερικές φορές μου πειράζει το iptables βέβαια...

    Ακολούθησα αυτό:
    https://www.techrepublic.com/article...security-flaw/
    Νομίζω το ίδιο πράγμα κάνει, απλά το περνάει σε config, αντί σαν command line parameter.

  14. #14
    Εγγραφή
    07-02-2007
    Μηνύματα
    747
    Downloads
    6
    Uploads
    0
    Ναι το ίδιο είναι. Νομίζω ότι συμφωνα με τα docker docs ο προτεινόμενος τρόπος είναι είναι να φτιάξεις το αρχείο:
    Κώδικας:
    $ cat /etc/docker/daemon.json 
    {
      "iptables": false
    }
    Με αυτό θα πρέπει να δουλέψει όπως και να ξεκινήσεις τον docker daemon.

    Δεν χρησιμοποιώ UFW. Αυτά έχω βάλει στο iptables:
    Κώδικας:
    $ cat /etc/iptables/rules.v4 
    
    # vim: ft=bash
    # Generated by iptables-save v1.8.4 on Wed Mar 10 17:47:33 2021
    #
    # NAT for docker
    *nat
    :PREROUTING ACCEPT [0:0]
    :INPUT ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    #:FORWARD ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    -A POSTROUTING -o eth0 -j MASQUERADE
    COMMIT
    
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    
    # Allow localhost
    -A INPUT  -i lo -j ACCEPT
    -A OUTPUT -o lo -j ACCEPT
    
    # ICMP
    -A INPUT -p icmp -j ACCEPT
    
    # Docker
    -A FORWARD -i docker0 -o eth0    -j ACCEPT
    -A FORWARD -i eth0    -o docker0 -j ACCEPT
    
    # Incoming
    -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p tcp -m tcp --dport  22  -j ACCEPT
    -A INPUT -p tcp -m tcp --dport  80  -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 443  -j ACCEPT
    -A INPUT -j DROP
    
    # Outgoing
    -A OUTPUT -j ACCEPT
    
    # Routing
    -A FORWARD -j DROP
    
    COMMIT
    # Completed on Wed Mar 10 17:47:33 2021
    Οδηγός για LaTeX στα Ελληνικά
    Οδηγός για Linux στα Ελληνικά

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας