Recraftory

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: ClusterIP

NodePort

  • 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: 30080

LoadBalancer

  • Membuat load balancer eksternal (cloud provider)
  • Mendapatkan IP publik otomatis
  • Digunakan untuk production di cloud
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80

ExternalName

  • Mapping service ke DNS eksternal
  • Tidak memiliki selector
spec:
  type: ExternalName
  externalName: database.example.com

Ingress

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: 8080

Path-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: 80

TLS/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: 80

Ingress 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.yaml

Command Berguna

kubectl get svc
kubectl get ingress
kubectl describe svc web-service
kubectl port-forward svc/web-service 8080:80