Service dan Ingress
Expose aplikasi dan routing traffic di Kubernetes
Service
Masalah yang Diselesaikan
- Pod memiliki IP dinamis yang berubah saat restart
- Perlu cara konsisten untuk mengakses aplikasi
- Load balancing antar pod
Tipe Service
ClusterIP (Default)
- Service hanya dapat diakses dari dalam cluster
- Digunakan untuk komunikasi antar service internal
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- port: 80
targetPort: 80
type: ClusterIPNodePort
- Service dapat diakses dari luar cluster via port di setiap node
- Port range: 30000-32767
- Cocok untuk development dan testing
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30080LoadBalancer
- Membuat load balancer eksternal (cloud provider)
- Mendapatkan IP publik otomatis
- Digunakan untuk production di cloud
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80ExternalName
- Mapping service ke DNS eksternal
- Tidak memiliki selector
spec:
type: ExternalName
externalName: database.example.comIngress
Apa itu Ingress
- Resource untuk mengatur routing HTTP/HTTPS dari luar cluster
- Mendukung virtual hosting, path-based routing, SSL
- Memerlukan Ingress Controller (nginx, traefik)
Ingress vs LoadBalancer
- LoadBalancer: satu service = satu IP (mahal di cloud)
- Ingress: satu IP untuk banyak service (hemat biaya)
Contoh Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080Path-Based Routing
spec:
rules:
- host: example.com
http:
paths:
- path: /api
backend:
service:
name: api-service
port:
number: 8080
- path: /
backend:
service:
name: web-service
port:
number: 80TLS/SSL
spec:
tls:
- hosts:
- app.example.com
secretName: app-tls-secret
rules:
- host: app.example.com
http:
paths:
- path: /
backend:
service:
name: web-service
port:
number: 80Ingress Controller
- Nginx Ingress Controller (paling populer)
- Traefik
- HAProxy
- Istio Ingress Gateway
Instalasi Nginx Ingress Controller
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yamlCommand Berguna
kubectl get svc
kubectl get ingress
kubectl describe svc web-service
kubectl port-forward svc/web-service 8080:80