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.
 

zászló, zászló, szív

A halozat overlay tipusu, de igy sem megy sajnos. A gond, hogy elv az nginx proxy azt figyeli, hogy a sajat docker konteneren indul-e el valami service, a tobbin nem nezi... Itt leirjak, 5 eve gond mar ez...

 

https://github.com/nginx-proxy/nginx-proxy/issues/97

 

Kozben probalkozom megint a Traefik-el, de ott meg 404 es hiba folyamatosan.... Illetve mintha nem latna a crt-t sem... pedig ho helyre mutat, ha belepek a kontenerbe, ott van.

version: '3.8'
services:
    traefik:
        image: traefik:v2.10
        ports:
          - target: 443
            published: 443
            protocol: tcp
            mode: host

        command:
          - --providers.docker.swarmMode=true
          - --providers.docker.exposedByDefault=false
          - --providers.docker.network=proxy
          - --providers.file.filename=/data/traefik/config.yml
          - --providers.file.watch=true
          - --entrypoints.web.http.redirections.entryPoint.to=websecure
          - --entrypoints.web.http.redirections.entryPoint.scheme=https
          - --entrypoints.websecure.address=:443
          - --accesslog
          - --log.level=info
        environment:
          - TZ=Europe/Budapest
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock:ro
          - nginx-proxy_config:/data/traefik
        networks:
          - proxy
        deploy:
            mode: global
            placement:
                constraints:
                    - node.role == manager
networks:
    proxy:
        external: true

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

 

version: "3.3"

services:

  whoami:
    image: "traefik/whoami"
    container_name: "simple-service"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`test.domain.com`)"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.tls=true"
      - "traefik.http.services.hostname.loadbalancer.server.port=80"
    networks:
      - proxy
networks:
  proxy:
    external: true

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.
 

zászló, zászló, szív