Docker Swarm + nginx-proxy Nem akar együttműködni

Fórumok

Sziasztok,

 

Van egy 3 Node-os Swarm-om, amiben futtatok egy szolgaltatast, amit betettem nginx-proxy moge (https://github.com/nginx-proxy/nginx-proxy)

 

Amig a ket szolgaltatas egy node-on van, nincs is semmi gond, viszont ha elvandorolnak, akkor 503-as hibat kapok. Ez alapvetoen egy ismert hianyossag az nginx-proxy-nal, de paran irtak, h sikerult megkerulniuk a dolgot. (sajnos nekem nem). Jelenleg bindeltem a ket service-t hogy egy node-on fusson, csak ez igy a swarm ertelmet veszi el... (foleg h a tobbi szolgaltatasom is betennem nginx-proxy moge) Traefik-et is neztem, de azt nem sikerult eletre kelteni. (plusz az nginx szimpatikusabb lenne)

 

Itt a yaml ha segit:

version: '3.6'

services:
  nginx-proxy:
    image: hun25-21v:5000/nginxproxy/nginx-proxy:1.4-alpine
    ports:
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - 'nginx-proxy_config:/etc/nginx/certs'
#    environment:
    networks:
      - proxy
    deploy:
      placement:
        constraints:
          - node.labels.nginx_proxy==true

networks:
  proxy:
    external: true

volumes:
  nginx-proxy_config:
    external: true
    name: nginx-proxy_config 

 

version: '3.6'
services:
    test_service:
        container_name: test_service
        image: hun25-21v:5000/test_service:latest
        environment:
            - VIRTUAL_HOST=test_service.domain.com
            - VIRTUAL_PORT=3000
        deploy:
          placement:
            constraints:
              - node.labels.nginx_proxy==true
        restart: always
        networks:
           - proxy
networks:
  proxy:
    external: true

Hozzászólások

Ha Swarm-ozol, akkor ajánlom figyelmedbe ezt az oldalt: https://geek-cookbook.funkypenguin.co.nz/docker-swarm/

Itt van rengeteg setup swarm-hoz.


Traefik Setup: https://geek-cookbook.funkypenguin.co.nz/docker-swarm/traefik/

 

Nálam megy rendesen az nginx is. A lényeg, hogy minden node-on fusson a HA miatt.

Illetve az nginx config-ból az adott service-t a belső címen címezd és a többit megoldja neked a swarm.

Azaz a proxy pass-od-ban valami lyesmi legyen:

 proxy_pass http://SERVICE-NAME:BELSŐ-PORT;

Amúgy vannak olyan image-ek NGINX-ből amik felvannak rá készítve és a service-ekre felaggatott TAG-ek alapján belövik neked az nginx config-ot.

Ez is ilyen, de vannak limitációi. Pl.: egy service-re csak 1 forwardot tud.

https://github.com/garutilorenzo/docker-swarm-ingress

Remélem tudtam segíteni.

docker network create --driver=overlay --ingress my_ingress_network
docker service create --name my_service --network my_ingress_network my_image
docker service create --name proxy --network my_ingress_network --publish 80:80 --publish 443:443 my_proxy_image

Az overlay típusú network a lényeg. Hozzá kell tennem: én nem szeretem a swarm-ot, nekem már többször összedőlt a networkingje.
Éppen folyamatban is van a "leszállás" róla, egyik helyen vm-ekbe (és azon belül sima docker-compose) másik helyen kubernetes irányba.
 

nem akarja ezzel sem... azt irja, az ingress network megy, de nincs mappelve domain...

 

version: "3.8"
services:
  nginx:
    image: garutilorenzo/docker-swarm-ingress:latest
    ports:
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - proxy
    secrets:
      - domain.com.key
      - domain.com.crt
    environment:
      PROXY_MODE: ssl-term-bridg
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
      placement:
        constraints: [node.role == manager]

secrets:
  domain.com.key:
    external: true
  domain.com.crt:
    external: true

networks:
  proxy:
    external: true
    name: proxy

 

version: '3.6'
services:
    test:
        container_name: test
        ports:
            - 3000:3000
        image: hun25-21v:5000/test:latest
        restart: always
        labels:
          ingress.host: domain.com
          ingress.port: 3000
        networks:
           - proxy
networks:
  proxy:
    external: true

Milyen hálózati problémáid voltak a swarm-al?

Én csak Host OS upgrade-nél futottam bele eddig. Ott a probléma az volt, hogy a Swarm az IPTABLES-t piszkálja ahogy elviekben a compose is.

Ott volt valami change a Host OS részéről és összeborult.

 

Még kb. 5 éve próbálkoztam vanilla K8S-el. Ott 8 hónap alatt 8x állt meg a networking.
Ott mindig megdögölött az ARP komponens és emiatt rossz címekre oldott fel.
Nálam a kis/home projektek akkor költöztek vissza swarm-ra.

odáig vezettem vissza hogy restartkor nem volt mindegy hogy restartkor egy bizonyos docker networkben a service (jwilder-féle proxy) vagy valami más indult el. Ha nem a proxy indult el (és foglalta el a 443-as portot) akkor nem tudott proxyzni.
Aztán lehet persze hogy az ingress configom nem volt teljesen oké, eléggé összetákolt motyó volt amúgyis (vegyesen service-k és compose).
Az tette be a kaput amikor egy docker upgrade után valami megkattant az overlayfs-ben és semmi se indult el, na akkor már mindegy volt hogy hova állítom vissza a backupot, ezért aztán "szétraktam".

Így most sokkal kevesebb a terhelés az egyes overlayfs-eken (és nem is zfs van hanem ext4). Külön-külön lehet upgradelni, béke.

Ja és nincs annyi (se service se erőforrás) hogy megérné a kubernetes.