• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ALMADDocker a kontejnery
    TOOMIX
    TOOMIX --- ---
    SH_PANDA: volume? Pomalu s tim na mě.

    Obecně potřebuju rozjet jenom YouTrack. Podle tohohle návodu to rozjedu na linuxu i na windows - udělám složky, pull na image, docker run a jede to.

    Installation | YouTrack Server Documentation
    https://www.jetbrains.com/help/youtrack/server/youtrack-docker-installation.html#run-youtrack-service

    Pak ale restartuju počítač a nic...

    Zkoušel jsem to rozjet jako službu přes systemd na linuxu, případně přes docker-compose na windows serveru ale nic, všechno se tváří že dobrý, ale po restartu nic nenaběhne, dokud se zas nepřihlásím na plochu a nepozapínám ručně (v CLI nebo zapnu docker desktop).

    Run Docker Container as a Service | YouTrack Server Documentation
    https://www.jetbrains.com/help/youtrack/server/run-docker-container-as-service.html
    SH_PANDA
    SH_PANDA --- ---
    TOOMIX: tak to bych se teda vratil k tomu linuxu. btw co ti brani pouzit volume?
    TOOMIX
    TOOMIX --- ---
    SH_PANDA: jako vesměs mi to je jedno, jestli ten docker pojede na linuxu nebo na windows serveru. Zkoušel jsem oboje, na Ubuntu se mi nějak totálně domrdalo oprávnění na složky namapovaný ke kontejneru, že jsem to zahodil a zkouším to na windows serveru 2022. Ale je to past vedle pasti. Přitom tam chci jenom jeden kontejner.
    SH_PANDA
    SH_PANDA --- ---
    TOOMIX: co nejaky virtual s linuxem? je tam sice nejaky overhead, ale to ti asi nebude az tak vadit, nez nutnost poustet Docker Desktop, ne?
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    TOOMIX: a je mozny, ze bude stacit dat automaticky poustet jenom docker engine a uz to pobezi
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    TOOMIX: bohuzel, s timhle nemam vubec, ale vubec zadnou zkusenost. docker jsem nikdy nepustil jinde, nez na linuxu.
    ale zkusil bzch se podivat n a neco jako docker engine, akorat to pravdepodobne asi nebude kompatabilni s docker desktop a bude se to muset spravovat z prikazove radky
    TOOMIX
    TOOMIX --- ---
    TOOMIX: Nikdo nic? Řeším to několik dní a ani prd.
    TOOMIX
    TOOMIX --- ---
    YouTrack mi zrušil ZIP distribuci a musím přejít na docker. Takže jsem na windows stroj nainstaloval docker desktop, stáhnul image, udělal kontejner jako službu a běží to.

    Run Docker Container as a Service | YouTrack Server Documentation
    https://www.jetbrains.com/help/youtrack/server/run-docker-container-as-service.html

    Ale běží to, jen když pustím Docker Desktop aplikaci a co nechci. Ve windows službách je služba Docker Desktop Service. Když jí nastavím automatické spuštění a restartuju počítač, tak se služba tváří, že je zapnutá, ale k YouTracku se nepřipojím. Když zapnu normálně z plochy Docker Desktop, tak ten odstaví tu službu, pustí kontejner s Youtrackem a všechno šlape. Nevíte, kde by mohl být zádrhel, aby to CELÉ běželo jako windows služba bezobslužně? Díky
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    JON: diky moc.
    JON
    JON --- ---
    MLEKAR_STEIN: takze vlastne v tvym pripade asi takhle:
    
    {{- with .context.nameConstraints.permitted.dnsDomains }}
      dnsDomains:
      {{- toYaml . | nindent 2 }}
    {{- end }}
    
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    JON: dik, tak se zbavim objektu range, coz je vice mene to, co jsem chtel.
    JON
    JON --- ---
    MLEKAR_STEIN:

    toho indentu by melo jit se zbavit pomoci `nindent` a zbytek by mohl jit pres `with`, `toYaml` a lokalni kontext:
    spec:
      selector:
        matchLabels:
          {{- include "app.selectorLabels" . | nindent 6 }}
      template:
        metadata:
          {{- with .Values.podAnnotations }}
          annotations:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          labels:
            {{- include "app.selectorLabels" . | nindent 8 }}
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    píšu helm charty a potřebuju názory.

    v podstate porad se v helmu opakuje named list

    nejakeJmeno:
      - polozka
      - druha
    ...

    a je moznost to delat pres pojmenovanou template a include
    akorat to volani mi prijde zase takovy nesikovny v tom, ze tomu musim predat spoustu parametru a je to jak volani win32 api,

    vypada to nejakj takhle
    {{ include "common.printNamedList" ( dict "name" "dnsDomains" "items" .context.nameConstraints.permitted.dnsDomains "indent" "6" "quote" true ) }}

    protoze mu musim predat
    - jmeno listu,
    - jeho obsah,
    - indent a
    - jestli musi polozky dat do uvozovek

    a to uz je trochu neprehledny

    implementace je naopak docela v poho
    {{- define "common.printNamedList" }}
    {{- $items := .items }}
    {{- $name := .name }}
    {{- $indent := ( .indent | int ) }}
    {{- $quote := .quote }}
    {{ printf "%s:" $name | indent $indent }}
    {{- range $val := .items }}
    {{- if ( eq $quote true )  }}
    {{ printf "- \"%s\"" $val | indent $indent }}
    {{- else }}
    {{ printf "- %s" $val | indent $indent }}
    {{- end }}
    {{- end }}
    {{- end }}
    me na tom odrazuje to volani, protoze jsou to ctyri parametry a to je proste uz neprehledny a blbe zapamatovatelny
    a sice usporim par radek, ale ve vysledku vlastne mi prijde ze ten overhead s parametry a dict je docela nesikovnej

    a kdybyste nekdo meli nejaky lepsi napad, tak sem s nim
    VELDRANE
    VELDRANE --- ---
    VELDRANE: tak se pochvalim sam, nakonec ovn-kubernetes rozchozeno pres cisty kubeadm. Hodne casu sem vytuh na osklive, zle nepekne veci v novejsich k8s, kdy pri vytvoreni service accountu se jiz defaultne nevytvari prislusnej secret token (coz si tak rikam, k cemu to sa pak tedy vlastne je).
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    VELDRANE: bohužel. máme calico.
    VELDRANE
    VELDRANE --- ---
    Hola, je tu nejaky masochista kteremu se povedlo rozchodit ovn-kubernetes na vanilla k8s ? Potrejuju pro testovani a nechci instalovat plnotucne okd
    JFM
    JFM --- ---
    MLEKAR_STEIN: Děkuji velice za hint, pomohlo. Už jsem to vyřešil.
    K HTTPS webu v kontejneru je potřeba přistupovat jako k TCP službě a použít TCP router.
    Aby mohli uživatelé používat více takových služeb a rozlišovat je různými FQDN, musí se použít v routeru pravidlo HostSNI.
    Takové pravidlo lze použít pouze u routerů se zapnutým TLS, ale pak je klíčové použít parametr passthrough.
    Entrypoint mám v traefik.toml definovaný běžným způsobem:
    [entryPoints]
      [entryPoints.websecure]
        address = ":443"
    a kontejner pak spouštím takto:
    docker container run -dit \
      --name myapp \
      --label 'traefik.tcp.services.myapp.loadbalancer.server.port=443' \
      --label 'traefik.tcp.routers.myapp.rule=HostSNI(`myapp.my.domain`)' \
      --label 'traefik.tcp.routers.myapp.service=myapp' \
      --label 'traefik.tcp.routers.myapp.entrypoints=websecure' \
      --label 'traefik.tcp.routers.myapp.tls.passthrough=true' \
      myapp:latest
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    JFM:
    to co hledas je tcp proxy
    ja to mam v kubernetes konfigurovane takhle
    napred otevru v traefiku port
    tcpredir:
      port: 9443
      expose:
        default: true
      exposedPort: 9443
      protocol: TCP
    a pak jen udelam ingressroutetcp a reknu ji ze ma pouzit otevreny port, ktery se jmenuje `tcpredir`
    a pokud chces aby to delalo match podle nejake domeny, tak je to
    match HostSNI
    ` - match: HostSNI(`oneprovider.example.com`)`

    apiVersion: traefik.io/v1alpha1
    kind: IngressRouteTCP
    metadata:
      name: test-oneprovider-config
      namespace: test-onedata
    spec:
      entryPoints:
      - tcpredir
      routes:
      - match: HostSNI(`oneprovider.example.com`)
        services:
        - name: oneprovider-oneprovider
          port: 9443
    LUCIEN
    LUCIEN --- ---
    JFM: Mně běží většinou aplikace pro traefik přes docker-compose a tam prostě nadefinuju např. něco takovýho

    wordpress:
      container_name: ${PROJECT_NAME}__wordpress
      build:
        context: .
      env_file: .env.wordpress
      environment:
        - PROJECT_NAME=${PROJECT_NAME}
      restart: unless-stopped
      volumes:
        - "${VOLUME}:/var/www/html"
        - ./volumes/wordpress-uploads:/var/www/html/web/app/uploads
      depends_on:
        - mysql
      networks:
        - internal
        - web
      ports:
        - ${PORT_NGINX}:80
      labels:
        - traefik.http.routers.${PROJECT_NAME}__nginx.rule=Host(`${HOST_WORDPRESS}`)
        - traefik.http.routers.${PROJECT_NAME}__nginx.tls=true
        - traefik.http.routers.${PROJECT_NAME}__nginx.tls.certresolver=lets-encrypt
        - traefik.port=${PORT_NGINX}

    Pak by mělo stačit upravit ten port z 80 na 443, ne?
    JFM
    JFM --- ---
    Používám Traefik jako proxy pro přístup k frontend webovým rozhraním aplikací, které mi běží v kontejnerech v dockeru.
    Potřebuji uživatelům umožnit přístup k aplikaci, která má HTTPS zabezpečený web, běží na portu 443.
    Jestli to správně chápu, SSL/TLS se nastavuje přímo v Traefiku, ten ven poskytuje HTTPS, ale do kontejneru předává na nezabezpečený HTTP na port 80. Jde to nějak rozchodit, když HTTPS na 443 je přímo v kontejneru?
    Kliknutím sem můžete změnit nastavení reklam