user: admin
password: Nexus01@

#installatie

postgres14 starten als dat nog niet is gebeurd

ingressrouteTCP-route aanmaken voor registry

ingressroutes HTTP en TLS aanmaken voor nexus  (nodig voor compileren met maven)

kubectl apply -f nexus.yaml

i.v.m. permissions (zie logfile) indien nodig op sudo chmod +R /mnt/nfs_share/nexus uitvoeren 
admin password staat in data-dir op de nfs-share 

#Repository-routes configureren:

In nexus kun je een repository definieren van het type "Docker".

Die geef je dan een eigen poortnummer.

Bij TLS-interrupt door Traefik gewoon http-poort 5000 (https kun je leeglaten)
Bij TLS-interrupt door Nexus moet je een https-poort gebruiken (bijv 8444)

#SSL TLS Interrupt voor UI:

gewoon een ingressroute-HTTP en ingressroute-tls aanmaken voor nexus-dev.allarddcs.nl

#SSL TLS Interrupt voor Registry:
TLS-interrupt kun je het best door traefik laten doen. 
Dit heeft de voorkeur want dan heb je een trusted certificaat en hoefje geen "insecure registry" te configurenren in docker-config.

#TLS-INTERRUPT DOOR TRAEFIK:
De ingressrouteTCP naar de docker registry ziet er dan alsvolgt uit:

apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
  name: registry-tcp
  namespace: nexus
spec:
  entryPoints:
    - websecure       # Traefik HTTPS entrypoint
  routes:
    - match: HostSNI(`registry-dev.allarddcs.nl`)
      services:
        - name: nexus
          port: 5000   # Nexus HTTP port for Docker registry
  tls:
    certResolver: letsencrypt  # Traefik uses this certificate

Dit is dus een bijzondere combinatie van IngressrouteTCP en toch TLS-interrupt. 
Vanaf traefik gaat het verkeer dan naar de http-poort van je docker registry.

Daarnaast heb ik ook een ingressroute-http aangemaakt :

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: registry-http
  namespace: nexus
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`registry-dev.allarddcs.nl`)
    kind: Rule
    services:
    - name: nexus
      port: 8081

Deze gaat dus naar de web-kant voor de ACME-challenge van Letsencrypt.

#TLS-INTERRUPT DOOR NEXUS:

Deze optie heeft het nadeel dat je dan bij inloggen met docker de melding krijgt dat het certificaat 
self-signed is. Dan moet je insecure registry opvoeren in docker-config. 


Met keytool een certificaat aanmaken. 
Certificaat zet je dan op nfs-share op data-dir/etc/ssl/keystore.jks


Deze poort moet je ook als ingressrouteTCP ontsluiten met TLS passthrough (want nexus doet TLS-interrupt) 
maar dan uiteraard wel op de domeinnaam  "registry-dev.allarddcs.nl".
Deze tweede route heeft hetzelfde "entrypoint"  als de GUI, namelijk "websecure" 

nexus-properties:

nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml
application-port-ssl=8443
ssl-keystore=/nexus-data/etc/ssl/keystore.jks
ssl-keystore-password=password
ssl-keystore-type=JKS
jetty.sslContext.keyStorePath=/opt/sonatype/sonatype-work/nexus3/etc/ssl/keystore.jks
jetty.sslContext.keyStorePassword=password
jetty.sslContext.keyManagerPassword=password
jetty.sslContext.trustStoreType=JKS

#vervelende foutmeldingen in log voorkomen.

Om java in een container te kunnen runnen probeert nexus blijkbaar een .java directory aan te maken in /opt/sonatype/nexus. 
Maar use nexus mag dat niet.
Vandaar dat er een emptydir gemount wordt:
        volumeMounts:
        - name: java-prefs
          mountPath: /opt/sonatype/nexus/.java
      volumes:
      - name: java-prefs
        emptyDir: {}

Die emptydir verdwijnt weer als je de container stopt.
