############################################################### # Service – Flask web application (NodePort for browser access) ############################################################### apiVersion: v1 kind: Service metadata: name: todo-app-service namespace: todo-app labels: app: todo-app spec: type: NodePort selector: app: todo-app ports: - name: http port: 80 targetPort: 5000 nodePort: 30080 # access via http://:30080 --- ############################################################### # Service – PostgreSQL (ClusterIP, internal only) ############################################################### apiVersion: v1 kind: Service metadata: name: postgres-service namespace: todo-app labels: app: postgres spec: type: ClusterIP selector: app: postgres ports: - name: postgres port: 5432 targetPort: 5432 --- ############################################################### # Headless Service – required by StatefulSet for stable DNS ############################################################### apiVersion: v1 kind: Service metadata: name: postgres-headless namespace: todo-app labels: app: postgres spec: clusterIP: None selector: app: postgres ports: - name: postgres port: 5432 targetPort: 5432