Hyppää sisältöön

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

Warning!

Puhti and Mahti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti and Mahti login nodes and storage services are planned to remain available until 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.

LoadBalancer-palvelutyyppi

Toisin kuin reitit, LoadBalancer-palvelutyyppi mahdollistaa palveluiden julkaisemisen internetiin ilman rajoittumista HTTP/HTTPS-protokolliin. Tämän ominaisuuden avulla voit julkaista palveluita vastaanottamaan ulkoista saapuvaa liikennettä omassa julkisessa IP-osoitteessa, jolloin ulkoiset käyttäjät tai palvelut voivat olla vuorovaikutuksessa sovellustesi kanssa. Jotta voit ottaa LoadBalancer-palvelut käyttöön ja käyttää niitä Rahti-projektissasi, sinun tulee lähettää pyyntö Service Deskiin. Pyynnön tulee sisältää seuraavat tiedot:

  • Projektin nimi: Anna sen Rahti-projektin tarkka nimi, jossa haluat ottaa LoadBalancer-palvelut käyttöön.

  • CSC-projektinumero: Rahti-projektissa käytettävä csc_project-numero.

  • Käyttötapaus: Kuvaa käyttötapaus selkeästi, mukaan lukien:

    • Millaisia palveluita aiot julkaista (esim. verkkosovelluksia, API-rajapintoja).
    • Mahdolliset erityisvaatimukset tai huomioitavat asiat, esimerkiksi kuinka monta IP-osoitetta tarvitset.

Kun ylläpitäjät ovat hyväksyneet pyyntösi, saat julkisen IP-osoitteen, jota voidaan käyttää palveluidesi käyttämiseen, ja voit sen jälkeen jatkaa LoadBalancer-palvelun luomista. Vaihtoehtoisesti voit käyttää seuraavaa komentoa tarkistaaksesi projektiisi määritetyt IP-osoitteet. Tiedot näkyvät kentässä annotations.ip_pairs.

oc get ipaddresspools.metallb.io -n metallb-system <project_name> -o yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  annotations:
    ip_pairs: |
      192.168.191.X - 86.50.228.M
      192.168.192.Y - 195.148.30.N
  creationTimestamp: "XXXX-XX-XXTXX:XX:XXZ"
  generation: 1
  name: <project_name>
  namespace: metallb-system
  resourceVersion: "XXXXXX"
  uid: XXXXXXX
spec:
  addresses:
  - 192.168.191.X/32
  - 192.168.192.Y/32
  autoAssign: true
  avoidBuggyIPs: false
  serviceAllocation:
    namespaces:
    - <project_name>
    priority: 1

Esimerkiksi seuraava Service-määritys julkaisee MySQL-palvelun määritetyssä julkisessa IP-osoitteessa portissa 33306:

kind: Service
apiVersion: v1
metadata:
  name: mysqllb
  namespace: my-namespace
spec:
  ports:
    - protocol: TCP
      port: 33306
      targetPort: 3306
  allocateLoadBalancerNodePorts: false
  type: LoadBalancer
  selector:
    app: mysql

Löydät yksityiskohtaisen selityksen Service-objektista sivulta Kubernetes- ja OKD-käsitteet.

Varmista, että palvelutyypiksi on asetettu LoadBalancer ja että kentän allocateLoadBalancerNodePorts arvoksi on asetettu false (oletusarvo on true), koska NodePortit eivät ole käytössä Rahdissa. Jos tätä kenttää ei ole asetettu oikein, varattu node-portti on käyttökelvoton, ja Servicen luonti voi epäonnistua, jos koko oletusarvoinen node-porttialue on jo varattu.

Lisäksi Service-määrityksen kentän port (esim. 33306 edellisessä esimerkissä) on oltava välillä 30000-35000.

Kuinka hakea selector

Servicen selector-kentän on vastattava niiden Podien labeleita, jotka haluat julkaista. Kun kopioit labelin, varmista, että noudatat yaml-syntaksia ja vaihdat merkin = merkiksi :.

CLI:n käyttäminen

Suorita komentorivillä oc describe pod <pod-name> -n <namespace>. Tuloste sisältää osion nimeltä Labels. Kopioi mikä tahansa labeleista ja liitä se yaml-tiedostoon kohdan selector alle. Esimerkiksi alla olevan tulosteen ensimmäistä labelia käyttäen selectoriksi tulee app: mysql:

Name:           mysql-pod
Namespace:      my-namespace
Priority:       0
Node:           worker-node-1/10.0.0.1
Start Time:     Mon, 23 Oct 2024 10:00:00 +0000
Labels:         app=mysql
                environment=production
                app.kubernetes.io/name=mysql
(...)

Selainkäyttöliittymän käyttäminen

Selainkäyttöliittymässä valitse kohdasta Workloads ensin Pods ja sitten haluamasi Pod. Näet kaikki labelit kohdassa Labels. Kopioi mikä tahansa labeleista ja liitä se yaml-tiedostoon kohdan selector alle.

rahti

Kuinka varmistat, että Service osoittaa oikeaan Podiin

CLI:n käyttäminen

Suorita komentorivillä oc get endpoints <service-name> -n <namespace>. Sinun pitäisi nähdä Servicen nimi sekä niiden Podien IP-osoitteet ja portit, joihin Service tällä hetkellä kohdistuu. Esimerkiksi:

NAME      ENDPOINTS      AGE
mysqllb   10.0.0.1:3306  10m

Selainkäyttöliittymän käyttäminen

Selainkäyttöliittymässä valitse kohdasta Networking ensin Services ja sitten juuri luomasi LoadBalancer-palvelu. Välilehdellä Pods sinun pitäisi nähdä kohdistettu Pod.

rahti

Saman LoadBalancer-IP-osoitteen jakaminen palveluiden kesken

On myös mahdollista julkaista useita LoadBalancer-palveluita samassa julkisessa IP-osoitteessa mutta eri porteissa. Voit ottaa IP-jaon käyttöön lisäämällä palveluihin annotaation metallb.universe.tf/allow-shared-ip. Annotation arvo on valitsemasi label, ja samalla labelilla merkityt palvelut jakavat saman IP-osoitteen. Tässä on esimerkkimääritys kahdesta samassa IP-osoitteessa toimivasta palvelusta:

kind: Service
apiVersion: v1
metadata:
  name: mysqllb
  namespace: my-namespace
  annotations:
     metallb.universe.tf/allow-shared-ip: "label-to-share-1.2.3.4"
spec:
  ports:
    - protocol: TCP
      port: 33306
      targetPort: 3306
  allocateLoadBalancerNodePorts: false
  type: LoadBalancer
  selector:
    app: mysql
kind: Service
apiVersion: v1
metadata:
  name: httplb
  namespace: my-namespace
  annotations:
     metallb.universe.tf/allow-shared-ip: "label-to-share-1.2.3.4"
spec:
  ports:
    - protocol: TCP
      port: 30080
      targetPort: 80
  allocateLoadBalancerNodePorts: false
  type: LoadBalancer
  selector:
    app: httpd

Lisää palomuurin IP-estot LoadBalancer-palveluun NetworkPolicyllä

LoadBalancer-palveluun on mahdollista lisätä palomuurin IP-estoja. Tämän avulla voit määrittää sallittujen IP-osoitteiden luettelon (esimerkiksi 188.184.77.250) ja/tai IP-osoitealueita (esimerkiksi 188.184.0.0/16). Vain näistä sallituista osoitteista tuleva liikenne voi käyttää Serviceä.

Vinkki

Pelkkä IP-palomuuraus ei yksin riitä suojaamaan LoadBalancer-palvelun takana toimivaa sovellusta. Noudata aina tietoturvan parhaita käytäntöjä ja käytä IP-suodatusta osana kerroksellista tietoturvalähestymistapaa. Yhdistä siihen turvalliset tiedonsiirtoprotokollat, kuten TLS, sekä vahvat tunnistautumismekanismit, mukaan lukien turvalliset salasanakäytännöt, jotta sovelluksesi ovat asianmukaisesti suojattuja.

Menettely tämän toteuttamiseksi on seuraava:

  1. Ota Servicessä käyttöön Local-ulkoliikennekäytäntö. Tee tämä lisäämällä spec-osion alle externalTrafficPolicy: Local seuraavasti:

    kind: Service
    apiVersion: v1
    metadata:
      name: mysqllb
    spec:
      ports:
        - protocol: TCP
          port: 33306
          targetPort: 3306
          name: http
      allocateLoadBalancerNodePorts: false
      externalTrafficPolicy: Local   # This is the line to add
      type: LoadBalancer
      selector:
        app: mysql
    

    Local-liikennekäytännön rajoitukset

    Rahti käyttää MetalLB:ssä L2Advertisement-tilaa. Lisätietoja on kohdassa Layer 2.

    Huomaa myös, että kun externalTrafficPolicy on asetettu arvoon Local, vain yksi Service voidaan julkaista ulkoisella IP-osoitteella, eli kuormantasaajan IP-osoitetta ei voi jakaa usean Servicen kesken.

    Lisätietoja on virallisessa artikkelissa: Understanding Openshift/OKD externalTrafficPolicy: local and Source IP Preservation.

  2. Lisää NetworkPolicy, joka avaa pääsyn valituille IP-osoitteille:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: firewall
    spec:
      ingress:
      - from:
        - ipBlock:
            cidr: 188.184.0.0/16
        - ipBlock:
            cidr: 137.138.6.31/32
      - from:
        - namespaceSelector:
            matchLabels:
              policy-group.network.openshift.io/ingress: ""
      podSelector:
        matchLabels:
          app: mysql
      policyTypes:
      - Ingress
    

    Yllä oleva NetworkPolicy-esimerkki sallii saapuvan liikenteen CIDR-alueelta 188.184.0.0/16, joka vastaa aluetta [188.184.0.0 - 188.184.255.255], sekä yksittäisestä IP-osoitteesta 137.138.6.31. Liikenteen kohde rajataan matchLabels-osion avulla. Labelin on oltava sama kuin LoadBalancer-Servicessä käytetty.

  3. Kun käytät Servicessä externalTrafficPolicy: Local, Podiesi on sijaittava noodeilla, jotka voivat välittää liikenteen niille suoraan eli paikallisesti. Tämän toteuttamiseksi sinun on lisättävä node selector rahti.csc.fi/local-load-balancer: '' Podeihisi (tai Deploymentsiin tai StatefulSetiin, jos soveltuu):

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      nodeSelector:
        rahti.csc.fi/local-load-balancer: ''
      # ...
    

Reitin ja LoadBalancer-palvelun erot käyttöönoton rolloutien aikana

Rahdissa liikennettä hallitaan eri tavalla Routes- ja LoadBalancer-palveluissa käyttöönoton rolloutien aikana.

Routes, joita hallitsee OKD:n integroitu HAProxy-kuormantasaaja, on suunniteltu mukauttamaan ja ohjaamaan liikennettä nopeasti heti, kun uusi Pod käynnistyy, sekä samanaikaisesti lopettamaan liikenteen reitityksen vanhoihin tai päättyviin Podeihin. Tämä varmistaa nopean reagoinnin muutoksiin ja minimoi palvelukatkokset.

Sen sijaan LoadBalancer-palvelut jakavat liikennettä uusien Podien lisäksi edelleen myös vanhoihin tai päättyviin Podeihin. Tämä johtuu siitä, että nämä palvelut tukeutuvat EndpointSlicejen säännöllisiin päivityksiin, mikä voi viivästyttää päättyvien Podien poistamista liikenteenjaosta. Tämä ero liikenteen käsittelyssä on hyödyllinen ymmärtää, koska se vaikuttaa siihen, miten käyttöönottojen strategioita kannattaa käsitellä sovelluspäivityksissä.

Lisätietoja on OKD-dokumentaatiossa kohdassa reittipohjaiset käyttöönottostrategiat. Häiriöiden välttämiseksi ulkoisia kuormantasaajapalveluita käytettäessä voit soveltaa blue-green deployment -periaatetta.

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta