Service
Services stellen stabile interne Endpunkte vor den Pods bereit. Für Frontend, Backend und Datenbank ist jeweils ein eigener Service vorgesehen.
Frontend-Service
bflies-frontend-svc ist ein ClusterIP-Service. Er leitet den HTTP-Port des Ingress an die Frontend-Pods weiter. Der Port erhält einen sprechenden Namen, auf den der Ingress verweist.
Backend-Service
bflies-backend-svc ist ebenfalls ein ClusterIP-Service. Er stellt API und Actuator-Endpunkte innerhalb des Clusters bereit. Ein separater Managementport wird nur verwendet, wenn dies betrieblich erforderlich ist.
Datenbank-Service
bflies-mysql-svc stellt Port 3306 für Backend und Flyway-Job im Namespace bereit. Im Normalbetrieb ist auch dieser Service vom Typ ClusterIP.
Ein externer Zugriff per NodePort wird nur eingerichtet, wenn Administration oder Migration ihn zwingend benötigen. Er muss zeitlich und netzwerkseitig begrenzt werden. Die ETE-NodePort-Konfiguration dient als Referenz, ist aber kein automatisch zu übernehmender Standard.
Zunächst einen freien Cluster Node Port heraussuchen:
$kubectl get svc --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.spec.ports[*].nodePort}{"\n"}{end}' | awk '$3 != ""'
Und dann:
apiVersion: v1
kind: Service
metadata:
name: bflies-mysql-srv
namespace: bflies-int
spec:
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ports:
- nodePort: 30004
port: 3306
protocol: TCP
targetPort: 3306
selector:
app.kubernetes.io/instance: bflies-int
app.kubernetes.io/name: bflies-mysql
sessionAffinity: ClientIP
type: NodePort
Anschließend kann in der MySQL Workbench eine MySQL Connection hinzugefügt und ein Datenbank-Import durchgeführt werden.
Selektoren
Jeder Service selektiert nur Pods seiner Komponente. Vorgesehen sind Labels nach dem Kubernetes- Anwendungsschema, insbesondere app.kubernetes.io/name und app.kubernetes.io/instance.