Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

Keskitaso

Tarvitset OpenShiftin komentorivityökalun oc ja OpenShiftin Routes API:n tuntemusta
Internet-varmenteiden toiminnan tuntemus on eduksi.

Mukautetut verkkotunnukset ja suojattu tiedonsiirto

Mukautetut verkkotunnukset ja HTTPS-suojattu tiedonsiirto toteutetaan route-objektin tasolla. Niitä hallitaan avainsanoilla spec.host ja spec.tls.

Oletetaan, että haluat käyttää mukautettuna verkkotunnuksena osoitetta my-custom-dns-name.replace.this.com. Mukautetun verkkotunnuksen (my-custom-dns-name...) julkisen DNS:n CNAME-tietueen tulee osoittaa osoitteeseen router.2.rahtiapp.fi. DNS-tietueen päivittäminen on asiakkaan vastuulla ja riippuu verkkotunnusrekisterinpitäjän käytännöistä. Tämän jälkeen mukautettu DNS-nimi sijoitetaan route-objektin spec.host-kenttään:

route-with-dns.yaml:

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  labels:
    app: serveapp
  name: myservice
spec:
  host: my-custom-dns-name.replace.this.com
  to:
    kind: Service
    name: serve
    weight: 100

Testi-DNS

Ennen kuin DNS-tietue on päivitetty ja käytössä, voit käyttää hosts-tiedostoa luodaksesi kyseisen DNS-tietueen omalle tietokoneellesi.

TLS-varmenteet ja yksityiset avaimet sijoitetaan spec.tls-kenttään, esimerkiksi:

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  labels:
    app: serveapp
  name: myservice
spec:
  host: my-custom-dns-name.replace.this.com
  to:
    kind: Service
    name: serve
    weight: 100
  tls:
    insecureEdgeTerminationPolicy: Redirect
    termination: edge
    certificate: |-
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
    key: |-
      -----BEGIN PRIVATE KEY-----
      ...
      -----END PRIVATE KEY-----

Tämä määritys luo routen, jossa yksityinen avain on sijoitettu kenttään spec.tls.key ja varmenteet kenttään spec.tls.certificate. Tässä esimerkissä HTTP-liikenne ohjataan käyttämään HTTPS-protokollaa asetuksen Redirect vuoksi kentässä spec.tls.insecureEdgeTerminationPolicy. TLS-päättäminen hoidetaan route-objektissa, eli palveluun serve tuleva ja siitä lähtevä liikenne ei ole salattua (spec.tls.termination: edge). Muut päättämiskäytännöt:

  • passthrough: Oletetaan, että TLS-yhteys päätetään sisäisesti podissa, ja salattu liikenne välitetään eteenpäin.
  • reencrypt: Päätä TLS-yhteys reitittimessä ja avaa toinen suojattu yhteys, joka on päätettävä podissa.

Katso selitys sivulta Verkon reitit.

Warning

Käsittele aina route-objektien kentän spec.tls.key sisältöä erityisen huolellisesti, sillä TLS:n yksityistä avainta ei saa koskaan paljastaa ei-luotetuille osapuolille.

ACME-protokolla, automaattiset varmenteet

Automatic Certificate Management Environment (ACME) -protokolla on viestintäprotokolla, jolla automatisoidaan varmentajien ja niiden käyttäjien palvelinten välistä vuorovaikutusta. letsencrypt.org on voittoa tavoittelematon varmentaja, joka tarjoaa ilmaisia ja avoimia varmenteita ACME-protokollan avulla. Let's Encryptiltä on mahdollista hankkia ja uusia automaattisesti voimassa olevia varmenteita. On olemassa myös muita ACME-protokollaa tukevia varmenteiden tarjoajia, mutta keskitymme Let's Encryptiin, koska se on niistä tunnetuin. Tässä dokumentoimme kaksi menetelmää: cert-manager ja ACME controller.

Cert-manager

Tämä on suositeltu vaihtoehto Let's Encrypt -varmenteiden hankkimiseen ja uusimiseen. Varmenteen hankintaprosessi sisältää kolmen API-objektin luomisen: Issuer, Certificate ja Ingress. Voimme tehdä tämän selainkäyttöliittymässä tai komentorivikäyttöliittymässä. Koska tässä tapauksessa selainkäyttöliittymä ei ole juuri komentorivikäyttöliittymää helpompi, käytämme komentorivikäyttöliittymää.

Cert manager

  1. Ensin sinun tulee tavalliseen tapaan asentaa oc ja kirjautua Rahtiin. Sen jälkeen sinun tulee luoda Rahti-projekti. Varmista lopuksi, että olet oikeassa projektissa: oc project <project_name>.

  2. Varmista vielä, että verkkotunnus on olemassa. Let's Encryptin täytyy varmistaa, että todella hallitset kyseistä verkkotunnusta, ja se tekee tämän lähettämällä HTTP-pyynnön varsinaiseen verkkotunnukseen ja odottamalla siltä asianmukaista vastausta. Testaa tämä kirjoittamalla verkkotunnus selaimeesi ja tarkistamalla, että Rahti vastaa oikein.

  3. Tämän jälkeen sinun tulee luoda Issuer:

    echo "apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: letsencrypt
    spec:
      acme:
        # You must replace this email address with your own.
        # Let's Encrypt will use this to contact you about expiring
        # certificates, and issues related to your account.
        email: <EMAIL>
        server: https://acme-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          # Secret resource that will be used to store the account's private key.
          name: example-issuer-account-key
        # Add a single challenge solver, HTTP01 using nginx
        solvers:
        - http01:
            ingress:
              ingressClassName: openshift-default" | oc create -f -
    
    • Sinun tulee korvata <EMAIL> omalla sähköpostiosoitteellasi. Tätä käytetään Let's Encrypt -tilin automaattiseen luomiseen ja ilmoitussähköpostien lähettämiseen.
    • Jos haluat käyttää muuta tarjoajaa kuin Let's Encryptiä, sinun täytyy määrittää toinen server-parametri ja mahdollisesti lisätä jokin tunnistautumistapa. Tämä riippuu suoraan käytetystä tarjoajasta, joten emme voi auttaa siinä, mutta sen pitäisi vaatia vain muutaman rivin muuttamista yllä olevasta esimerkistä.
  4. Kun Issuer on luotu, voit luoda varmenteen:

    echo "apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
        name: nginx
    spec:
        secretName: hostname-tls
        duration: 2160h # 90d
        renewBefore: 360h # 15d
        issuerRef:
            name: letsencrypt
            kind: Issuer
        commonName: <HOSTNAME>
        dnsNames:
          - <HOSTNAME>" | oc create -f -
    
    • Sinun tulee korvata <HOSTAME> riveillä 12 ja 14 verkkotunnuksella, jolle haluat hankkia varmenteen.
  5. Jos kaikki meni odotetusti, uusi Secret nimeltä hostname-tls on juuri luotu. Secretissä pitäisi olla kaksi data-merkintää: tls.crt ja tls.key. Nyt jäljellä on enää Ingress-objektin luominen:

    echo "apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: nginx
    spec:
      rules:
      - host: <HOSTNAME>
        http:
          paths:
          - backend:
              service:
                name: <SERVICE>
                port:
                  number: <PORT>
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - <HOSTNAME>
        secretName: hostname-tls
    status: {}" | oc create -f -
    
    • Sinun tulee korvata <HOSTNAME> samalla isäntänimellä, jota käytit Certificate-objektissa.
    • Sinun tulee korvata <SERVICE> ja <PORT> vastaavalla palvelulla ja portilla, jotka tarjoavat verkkosivuston, jolle tarvitset varmenteen.

Ingress vs Route

Ingress ja Route ovat kaksi tapaa ratkaista sama käyttötapaus. Ne lähestyvät sitä eri tavoin

Jos kaikki meni hyvin, sinulla pitäisi nyt olla voimassa oleva varmenne.

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta