Bài 7: Networking trong Kubernetes
7.1 Các loại Service trong Kubernetes
Service là gì?
Service trong Kubernetes là một đối tượng cung cấp cách tiếp cận ổn định để giao tiếp giữa các Pods hoặc expose ứng dụng ra bên ngoài cluster.
Service giải quyết vấn đề IP động của Pods bằng cách cung cấp một điểm cuối ổn định.
Các loại Service phổ biến
ClusterIP (Mặc định):
Service chỉ khả dụng bên trong cluster.
Dùng để giao tiếp giữa các Pods trong cluster.
Ví dụ:
apiVersion: v1 kind: Service metadata: name: clusterip-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080
NodePort:
Expose ứng dụng qua một cổng cụ thể trên Node.
Thường dùng trong môi trường phát triển.
Ví dụ:
apiVersion: v1 kind: Service metadata: name: nodeport-service spec: type: NodePort selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 nodePort: 30007
LoadBalancer:
Tự động tạo một Load Balancer từ nhà cung cấp cloud (AWS, GCP, Azure).
Thích hợp cho môi trường sản xuất.
Ví dụ:
apiVersion: v1 kind: Service metadata: name: loadbalancer-service spec: type: LoadBalancer selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080
ExternalName:
Kết nối Service trong Kubernetes với một domain bên ngoài.
Ví dụ:
apiVersion: v1 kind: Service metadata: name: externalname-service spec: type: ExternalName externalName: example.com
7.2 Cấu hình Ingress Controller để quản lý traffic vào ứng dụng
Ingress là gì?
Ingress cung cấp cách quản lý traffic HTTP và HTTPS vào cluster.
Dùng để:
Định tuyến traffic dựa trên URL.
Kết hợp nhiều Service dưới một domain.
Ingress Controller
Ingress Controller là thành phần chịu trách nhiệm xử lý các rules của Ingress.
Các Ingress Controller phổ biến:
Nginx Ingress Controller.
Traefik.
HAProxy.
Triển khai Ingress Controller
Cài đặt Nginx Ingress Controller
Dùng
kubectl apply:kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
Kiểm tra trạng thái Ingress Controller
kubectl get pods -n ingress-nginx kubectl get service -n ingress-nginx
Cấu hình Ingress
Tạo Deployment và Service
File
app-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: app-deployment spec: replicas: 2 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app-container image: my-app-image ports: - containerPort: 8080File
app-service.yaml:apiVersion: v1 kind: Service metadata: name: app-service spec: selector: app: app ports: - protocol: TCP port: 80 targetPort: 8080Triển khai:
kubectl apply -f app-deployment.yaml kubectl apply -f app-service.yaml
Tạo Ingress Rule
File
app-ingress.yaml:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: app.local http: paths: - path: / pathType: Prefix backend: service: name: app-service port: number: 80Triển khai Ingress:
kubectl apply -f app-ingress.yaml
Truy cập ứng dụng
Cập nhật file hosts trên máy tính (Linux/Mac:
/etc/hosts, Windows:C:\Windows\System32\drivers\etc\hosts):<EXTERNAL-IP> app.localTruy cập
http://app.localđể kiểm tra ứng dụng.
7.3 Thực hành: Cấu hình Ingress cho ứng dụng Spring Boot
Mục tiêu
- Triển khai ứng dụng Spring Boot và quản lý traffic bằng Ingress.
Bước 1: Tạo Deployment và Service
- Dùng file YAML như trong 7.2 nhưng thay
imagebằngmy-spring-boot-app.
Bước 2: Tạo Ingress
File
spring-boot-ingress.yaml:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: spring-boot-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: springboot.local http: paths: - path: / pathType: Prefix backend: service: name: spring-boot-service port: number: 80
Bước 3: Truy cập ứng dụng
Cập nhật file hosts:
<EXTERNAL-IP> springboot.localTruy cập
http://springboot.local/api/greeting.
7.4 Bài tập mở rộng
Thêm nhiều host vào Ingress
Cập nhật Ingress để quản lý nhiều ứng dụng với các host khác nhau:
rules: - host: app1.local http: paths: - path: / pathType: Prefix backend: service: name: app1-service port: number: 80 - host: app2.local http: paths: - path: / pathType: Prefix backend: service: name: app2-service port: number: 80
Sử dụng TLS với Ingress
- Tạo chứng chỉ TLS và cấu hình HTTPS cho Ingress.
Tổng kết
Service trong Kubernetes giúp kết nối giữa các Pods và expose ứng dụng ra ngoài.
Ingress cung cấp cách quản lý traffic HTTP/HTTPS vào cluster, hỗ trợ routing dựa trên host và path.
Việc sử dụng Ingress Controller giúp bạn quản lý traffic một cách hiệu quả và chuyên nghiệp.
Bài tiếp theo sẽ hướng dẫn bạn cách tự động khởi động lại Pod bị lỗi và cấu hình High Availability để đảm bảo ứng dụng luôn sẵn sàng. 🚀