Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

Puhti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti login nodes and storage services are planned to remain available until 15 October 2026.

Verkottuminen Rahti-palvelussa

Rahti tarjoaa integroidun IPv4-pohjaisen ohjelmistomääritellyn verkon (SDN) kerroksen, jonka avulla Podit voivat viestiä klusterin sisällä ja ulkomaailman kanssa. Tässä verkossa jokainen Pod saa oman IP-osoitteensa, mikä mahdollistaa suoran viestinnän muiden Podien kanssa. Oletusarvoisesti Pod voi viestiä vain samassa nimiavaruudessa (eli Rahti-projektissa) toimivien Podien kanssa, ellei oletusarvoisia NetworkPolicy-käytäntöjä muuteta. Kun Pod käynnistetään uudelleen tai siirretään, sen IP-osoite muuttuu. Siksi sovelluksille tarjotaan pysyvät IP-osoitteet käyttämällä Service-objekteja, jotka yhdistävät dynaamisesti yhden tai useamman Podin IP-osoitteet kiinteisiin IP-osoitteisiin ja DNS-tietueisiin, joiden avulla Podeihin voidaan ottaa yhteys. Podien ja Service-objektien IP-osoitteet ovat saavutettavissa vain klusterin sisällä. Jos Service halutaan julkaista internetiin, sinun täytyy luoda Route-objekteja. Seuraavaksi selitämme nämä käsitteet yksityiskohtaisesti.

Podien IP-osoitteet

Jokainen Pod saa IP-osoitteen Rahti-verkon osoiteavaruudesta (CIDR: 10.128.0.0/14). Oletusarvoisesti Podit voivat viestiä muiden saman Rahti-projektin (eli nimiavaruuden) Podien kanssa, ja Rahti-verkko huolehtii dynaamisesti Podien välisestä viestinnästä eri noodien välillä. Podien IP-osoitteita ei kuitenkaan suositella käytettäväksi suoraan Podien tavoittamiseen, koska osoitteet ovat väliaikaisia ja voivat muuttua, kun Podit luodaan uudelleen. Voit tarkistaa Podeillesi määritetyt IP-osoitteet seuraavalla komennolla:

oc get pods -o wide -n <rahti-project-name>

Podien portit

Pod voi suorittaa yhtä tai useampaa konttia, ja jokainen kontti voi avata yhden tai useamman portin. Portit määrittävät, mitkä kontin sisäiset verkon päätepisteet on tarkoitettu vastaanottamaan liikennettä. Vaikka Podin sisäisiä portteja ei tarvitse erikseen määritellä Podia luotaessa, niiden määrittely parantaa selkeyttä, mahdollistaa työkaluille sovelluksen tarkastelun ja auttaa määrittämään, miten Service-objektien tai muiden Podien tulisi muodostaa siihen yhteys. Kaksi eri konttia saman Podin sisällä eivät voi kuunnella liikennettä samassa portissa. Voit määritellä konttiesi avaamat portit seuraavan esimerkin mukaisesti:

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: my-app
  name: web-app
  namespace: my-rahti-project
spec:
  securityContext:
    runAsNonRoot: true
    seccompProfile:
      type: RuntimeDefault
  containers:
    - name: httpd
      image: 'image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest'
      ports:
        - containerPort: 8080
          protocol: TCP
      securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          drop:
            - ALL

Service-objektit

Service on abstraktio, joka tarjoaa vakaan tavan käyttää Podien ryhmää. Koska Podit ovat väliaikaisia ja ne voidaan korvata milloin tahansa, myös niiden IP-osoitteet ovat väliaikaisia. Service ratkaisee tämän antamalla Podien ryhmälle pysyvän virtuaalisen IP-osoitteen ja DNS-nimen. Service seuraa automaattisesti, mille Podeille liikenne tulee ohjata tunnisteiden perusteella, ja välittää liikenteen niille toimien kuormantasaajina. Tämä mahdollistaa sovellusten luotettavan keskinäisen viestinnän myös silloin, kun yksittäisiä Podeja korvataan, käynnistetään uudelleen tai skaalataan.

Seuraava YAML-määrittely luo Service-objektin, joka osoittaa kaikkiin Podeihin, joilla on tunniste app: my-app, käyttämällä .spec.selector-kenttää:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-svc
  name: my-service
  namespace: my-rahti-project
spec:
  ports:
  - name: my-http-port
    port: 80
    targetPort: 8080
  selector:
    app: my-app
  sessionAffinity: None
  type: ClusterIP

Yllä oleva Service-määrittely kohdistuu vastaavien Podien porttiin 8080 ja julkaisee sen porttina 80. Tämä tarkoittaa, että kaikki osoitteeseen <service-ip-or-dns>:80 lähetetty liikenne välitetään vastaavaan Podiin osoitteeseen <matched-pod-ip>:8080.

Jokainen Rahti-palvelun Service saa DNS-nimen seuraavan hierarkian mukaisesti:

<service-name>.<Rahti-project>.svc.cluster.local

Esimerkiksi Service nimeltä backend Rahti-projektissa my-project saa seuraavan DNS-nimen:

backend.my-project.svc.cluster.local

Tämä on klusterin sisäinen täysin määritelty verkkotunnusnimi (FQDN). Kubernetes tarjoaa myös lyhyempiä aliaksia, kuten backend, jota voidaan käyttää viittaamaan Serviceen nimeltä backend mistä tahansa sovelluksesta, joka toimii samassa Rahti-projektissa, jossa Service on luotu. Vastaavasti backend.my-project-nimeä voidaan käyttää viittaamaan Serviceen muista Rahti-projekteista.

Route-objektit

Kaikki Podeille ja Service-objekteille määritetyt IP-osoitteet ovat yksityisiä eikä niitä voi reitittää julkisesti. Jos haluat julkaista HTTP-sovelluksesi internetiin, sinun täytyy luoda Route. Route mahdollistaa julkisen ja reititettävän isäntänimen yhdistämisen Rahti-projektissasi luotuun Service-objektiin. Seuraavassa esimerkissä kaikki isäntänimeen myapp.rahtiapp.fi lähetetty HTTP-liikenne ohjataan Serviceen nimeltä my-service, joka puolestaan välittää sen oikeille Podeille:

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: my-route
spec:
  host: myapp.rahtiapp.fi
  to:
    kind: Service
    name: my-service
  port:
    targetPort: 80  # This can also refer to the name of the port on the service: my-http-port

.spec.host-kentälle voidaan asettaa mikä tahansa arvo. Route toimii kuitenkin suoraan vain, jos käytät isäntänimessäsi päätettä *.rahtiapp.fi. Muussa tapauksessa tarvitaan lisää määrityksiä mukautettujen verkkotunnusten asettamiseen.

Voit myös määrittää TLS-terminoinnin Routelle. Käytettävissä on kolme vaihtoehtoa:

  • Edge: tämä on yksinkertaisin määritettävä TLS-terminointi, ja sitä käytetään useimmissa Rahti-sovelluksissa. TLS-yhteys päätetään Rahti-reitittimessä, mikä tarkoittaa, että reititin purkaa saapuvan yhteyden salauksen ja välittää tavallisen HTTP-liikenteen taustapalvelun Serviceen/Podiin. Käytä tätä terminointia, jos sovelluksesi ei tarvitse hallita TLS-varmenteita eikä vaadi päästä päähän -salausta. Route, jossa ei ole tls-osiota, kuten yllä olevassa esimerkissä, palvellaan vain tavallisella HTTP:llä, joten edge-terminointi täytyy pyytää erikseen:

    spec:
      # ...
      tls:
        termination: edge
        insecureEdgeTerminationPolicy: Redirect
    

    Valinnainen asetus insecureEdgeTerminationPolicy: Redirect saa reitittimen ohjaamaan tavalliset HTTP-pyynnöt HTTPS:ään.

  • Passthrough: Rahti-reititin ei päätä TLS:ää lainkaan. Se vain välittää salatun liikenteen suoraan Serviceen/Podiin. Pod vastaa TLS-salauksen purkamisesta. Käytä tätä, jos sovelluksesi tarvitsee hallita omia TLS-varmenteitaan ja vaatii päästä päähän salatun liikenteen. Lisää seuraava määritys Routeen käyttääksesi passthrough-tilaa:

    spec:
      # ...
      tls:
        termination: passthrough
    
  • Re-encrypt: tämä on hybriditila. Reititin päättää asiakkaalta tulevan TLS-yhteyden ja muodostaa sitten uuden TLS-yhteyden Podiin. Serviceen liitettyjen Podien odotetaan käyttävän kelvollista varmennetta Servicen DNS-nimelle. Tätä käytetään esimerkiksi silloin, kun haluat käyttää oletusarvoista Rahti-reitittimen varmennetta asiakkaan TLS-istunnoissa, samalla kun yksityistä varmennetta käytetään liikenteen salaamiseen Rahti-klusterin sisällä. Lisää seuraava määritys Routeen käyttääksesi re-encrypt-tilaa:

    spec:
      # ...
      tls:
        termination: reencrypt
        destinationCACertificate: |
          <CA for backend certificate>
    

    destinationCACertificate-CA-varmennetta käytetään yksityisen Pod-/Service-varmenteen validoimiseen.

Route-objektit tukevat useita määrityksiä ja ominaisuuksia, kuten nopeusrajoitusta, IP-sallintalistaa (palomuuri), HTTP:stä HTTPS:ään -uudelleenohjausta ja muita vaihtoehtoja, joihin voi tutustua ulkoisessa dokumentaatiossa. Huomaa kuitenkin, että käytössä oleva TLS-terminointi voi rajoittaa käytettävissä olevia ominaisuuksia.

Re-encrypt

Jotta re-encrypt toimisi, sinun on toimitettava oma varmenteesi. Tarvitaan kolme asiaa: (1) PEM-koodatuissa tiedostoissa oleva varmenne-/avainpari, jossa varmenne on kelvollinen Routen isäntänimelle, (2) valinnaisesti erillinen PEM-koodatussa tiedostossa oleva CA-varmenne, joka täydentää varmenneketjun, ja (3) erillinen PEM-koodatussa tiedostossa oleva kohde-CA-varmenne. Jos jotakin näistä ei toimiteta oikein, Route ei toimi.

IP-sallintalista

Yksi Route-objektien tärkeä ominaisuus on IP-sallintalista, eli se, että vain yksi IP-osoite tai IP-osoitealue saa käyttää Route-objektia. Tämä voidaan toteuttaa luomalla Route-objektiin annotaatio avaimella haproxy.router.openshift.io/ip_allowlist ja asettamalla arvoksi välilyönneillä erotettu lista IP-osoitteista ja/tai verkkoalueista. Katso esimerkit alla.

Huomio

IP-osoitteiden lista on muodossa välilyönneillä erotetut arvot. Esimerkiksi: "192.168.1.0/24 10.0.0.1"

Warning

Jos sallintalistan merkintä on virheellinen, Rahti hylkää sallintalistan ja sallii kaiken liikenteen. Esimerkki virheellisestä muodosta: "192.168.0" tai '192.168.1.0/24 ' -> Huomaa ylimääräinen välilyönti!

  • Tämä ensimmäinen esimerkki sallii verkon IP-osoitealueen (193.166.0.0/16):

    oc annotate route <route_name> haproxy.router.openshift.io/ip_allowlist='193.166.0.0/16'
    
  • On myös mahdollista sallia vain tietty IP-osoite:

    oc annotate route <route_name> haproxy.router.openshift.io/ip_allowlist='188.184.9.236'
    
  • On myös mahdollista sallia useita IP-osoitteita ja verkkoja samanaikaisesti:

    oc annotate route <route_name> haproxy.router.openshift.io/ip_allowlist='193.166.0.0/15 193.167.189.25'
    

Vaihtoehtoisesti voit asettaa annotation suoraan Route-resurssiin, kun luot sen ensimmäistä kertaa.

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: my-route
  namespace: my-rahti-project
  annotations:
     haproxy.router.openshift.io/ip_allowlist: '192.168.1.0/24 10.0.0.1'
spec:
  host: my-app-name.rahtiapp.fi
  to:
    kind: Service
    weight: 100
    name: my-service
  tls:
    insecureEdgeTerminationPolicy: Redirect
    termination: edge
status:
  ingress: []

Lisätietoja verkottumisesta

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta