Service:

Binnen OpenShift (en kubernetes) zijn services een netwerk-concept. Een service is als het ware een 'aanspreekpunt' voor de (netwerk-)diensten die in pods draaien. Een service maakt (diensten van) pods die mogelijk op verschillende onderliggende hosts leven beschikbaar in heel het cluster. Ook kan een service als loadbalancer werken als er meerdere pods dezelfde dienst aanbieden (replica's).

Doordat pods vaak dynamisch aangemaakt en afgebroken kunnen worden veranderen ook de IP adressen van de pods. De service voor die pods zorgt ervoor dat je een vast ip adress hebt die je kunt gebruiken om te verbinden met de pods.

Daarnaast kun je ook gebruik maken van een hostname koppelen aan je service, bijvoorbeeld: cache-redis. Dus binnen je project kun je 'cache-redis' opgeven als hostname/url van je redis instantie.

Vaak worden services automatisch aangemaakt en juist geconfigureerd als je gebruik maakt van de OpenShift templates, ook de templates die wij aanbieden. Ook via oc new-app worden services automatisch aangemaakt.

Bijvoorbeeld:

We maken via de templates een mysql database instantie aan.

Hier vullen we dan de hostname in voor deze mysql instantie. Uiteindelijk wordt er een service aangemaakt die er voor zorgt dat deze mysql instantie binnen het project bereikbaar is onder voorbeeld-hostname. De service is ook bereikbaar het (vaste) ip adres van deze service.

Via de CLI zijn services beschikbaar via:

# een overzicht van alle services binnen je project
oc get svc
#dit geeft je meer informatie over een specifieke service. -o wide geeft ook de hostname/selector van de service mee.
oc get svc/voorbeeld-hostname -o wide

Output:

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE       SELECTOR
voorbeeld-hostname   ClusterIP   172.x.x.x   <none>        3306/TCP   25m       name=voorbeeld-hostname 8m
Services zijn voor intern gebruik binnen je project. Als je een service bereikbaar wilt maken voor de buitenwereld dan gaat dit via een “route”. Koppel nooit routes aan (back-end) systemen die niet voor de buitenwereld open moeten staan

Services troubleshooten

Wil je weten of je wel connectie kan krijgen met een bepaalde service, open dan een terminal in de pod waarvan je connectie maakt. Bijvoorbeeld, de PHP-pod moet connectie kunnen leggen met de mysql service. Omdat containers vaak tools als telnet niet aan boord hebben en pingen niet lukt gebruiken we hier netcat (nc). Omdat we geen directe feedback terug krijgen van netcat stellen we een time-out in en vragen we daarna de 'exit status' op (of het commando succesvol was of niet).

oc rsh $mysql-pod

# Connectie maken via de service-naam. -w is een time-out, die kan eventueel lager
 $ nc mysql 3306 -w 3
 $ echo $?
0
# Connectie maken kan uiteraard ook via het service-ip, in dit voorbeeld is het port-nummer verkeerd. Exit-code is daarom 1
 $ nc 172.30.X.X 3307 -w 3
 $ echo $?
1
  • chp/concepten/service.txt
  • Last modified: 2019/06/24 14:23
  • by matthias