-
LoadBalancer-palvelu (sisääntulevat IP-osoitteet)
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.
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.

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:
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.

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:
-
Ota Servicessä käyttöön
Local-ulkoliikennekäytäntö. Tee tämä lisäämälläspec-osion alleexternalTrafficPolicy: Localseuraavasti: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: mysqlLocal-liikennekäytännön rajoitukset
Rahti käyttää MetalLB:ssä
L2Advertisement-tilaa. Lisätietoja on kohdassa Layer 2.Huomaa myös, että kun
externalTrafficPolicyon asetettu arvoonLocal, 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: localand Source IP Preservation. -
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: - IngressYllä oleva
NetworkPolicy-esimerkki sallii saapuvan liikenteen CIDR-alueelta188.184.0.0/16, joka vastaa aluetta [188.184.0.0-188.184.255.255], sekä yksittäisestä IP-osoitteesta137.138.6.31. Liikenteen kohde rajataanmatchLabels-osion avulla. Labelin on oltava sama kuinLoadBalancer-Servicessä käytetty. -
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 selectorrahti.csc.fi/local-load-balancer: ''Podeihisi (tai Deploymentsiin tai StatefulSetiin, jos soveltuu):
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.