172 lines
3.6 KiB
YAML
172 lines
3.6 KiB
YAML
# Kubernetes Service Templates
|
|
|
|
---
|
|
# Template 1: ClusterIP Service (Internal Only)
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: <app-name>
|
|
namespace: <namespace>
|
|
labels:
|
|
app.kubernetes.io/name: <app-name>
|
|
app.kubernetes.io/instance: <instance-name>
|
|
annotations:
|
|
description: "Internal service for <app-name>"
|
|
spec:
|
|
type: ClusterIP
|
|
selector:
|
|
app.kubernetes.io/name: <app-name>
|
|
app.kubernetes.io/instance: <instance-name>
|
|
ports:
|
|
- name: http
|
|
port: 80
|
|
targetPort: http # Named port from container
|
|
protocol: TCP
|
|
sessionAffinity: None
|
|
|
|
---
|
|
# Template 2: LoadBalancer Service (External Access)
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: <app-name>-lb
|
|
namespace: <namespace>
|
|
labels:
|
|
app.kubernetes.io/name: <app-name>
|
|
annotations:
|
|
# AWS NLB annotations
|
|
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
|
|
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
|
|
service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
|
|
# SSL certificate (optional)
|
|
# service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:..."
|
|
spec:
|
|
type: LoadBalancer
|
|
externalTrafficPolicy: Local # Preserves client IP
|
|
selector:
|
|
app.kubernetes.io/name: <app-name>
|
|
ports:
|
|
- name: http
|
|
port: 80
|
|
targetPort: http
|
|
protocol: TCP
|
|
- name: https
|
|
port: 443
|
|
targetPort: https
|
|
protocol: TCP
|
|
# Restrict access to specific IPs (optional)
|
|
# loadBalancerSourceRanges:
|
|
# - 203.0.113.0/24
|
|
|
|
---
|
|
# Template 3: NodePort Service (Direct Node Access)
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: <app-name>-np
|
|
namespace: <namespace>
|
|
labels:
|
|
app.kubernetes.io/name: <app-name>
|
|
spec:
|
|
type: NodePort
|
|
selector:
|
|
app.kubernetes.io/name: <app-name>
|
|
ports:
|
|
- name: http
|
|
port: 80
|
|
targetPort: 8080
|
|
nodePort: 30080 # Optional, 30000-32767 range
|
|
protocol: TCP
|
|
|
|
---
|
|
# Template 4: Headless Service (StatefulSet)
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: <app-name>-headless
|
|
namespace: <namespace>
|
|
labels:
|
|
app.kubernetes.io/name: <app-name>
|
|
spec:
|
|
clusterIP: None # Headless
|
|
selector:
|
|
app.kubernetes.io/name: <app-name>
|
|
ports:
|
|
- name: client
|
|
port: 9042
|
|
targetPort: 9042
|
|
publishNotReadyAddresses: true # Include not-ready pods in DNS
|
|
|
|
---
|
|
# Template 5: Multi-Port Service with Metrics
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: <app-name>-multi
|
|
namespace: <namespace>
|
|
labels:
|
|
app.kubernetes.io/name: <app-name>
|
|
annotations:
|
|
prometheus.io/scrape: "true"
|
|
prometheus.io/port: "9090"
|
|
prometheus.io/path: "/metrics"
|
|
spec:
|
|
type: ClusterIP
|
|
selector:
|
|
app.kubernetes.io/name: <app-name>
|
|
ports:
|
|
- name: http
|
|
port: 80
|
|
targetPort: 8080
|
|
protocol: TCP
|
|
- name: https
|
|
port: 443
|
|
targetPort: 8443
|
|
protocol: TCP
|
|
- name: grpc
|
|
port: 9090
|
|
targetPort: 9090
|
|
protocol: TCP
|
|
- name: metrics
|
|
port: 9091
|
|
targetPort: 9091
|
|
protocol: TCP
|
|
|
|
---
|
|
# Template 6: Service with Session Affinity
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: <app-name>-sticky
|
|
namespace: <namespace>
|
|
labels:
|
|
app.kubernetes.io/name: <app-name>
|
|
spec:
|
|
type: ClusterIP
|
|
selector:
|
|
app.kubernetes.io/name: <app-name>
|
|
ports:
|
|
- name: http
|
|
port: 80
|
|
targetPort: 8080
|
|
protocol: TCP
|
|
sessionAffinity: ClientIP
|
|
sessionAffinityConfig:
|
|
clientIP:
|
|
timeoutSeconds: 10800 # 3 hours
|
|
|
|
---
|
|
# Template 7: ExternalName Service (External Service Mapping)
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: external-db
|
|
namespace: <namespace>
|
|
spec:
|
|
type: ExternalName
|
|
externalName: db.example.com
|
|
ports:
|
|
- port: 5432
|
|
targetPort: 5432
|
|
protocol: TCP
|