Skip to main content

Command Palette

Search for a command to run...

Bài 7: Networking trong Kubernetes

Published
4 min readView as Markdown

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

  1. 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
      
  2. 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
      
  3. 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
      
  4. 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

  1. 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
      
  2. 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

  1. 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: 8080
      
    • File app-service.yaml:

        apiVersion: v1
        kind: Service
        metadata:
          name: app-service
        spec:
          selector:
            app: app
          ports:
          - protocol: TCP
            port: 80
            targetPort: 8080
      
    • Triển khai:

        kubectl apply -f app-deployment.yaml
        kubectl apply -f app-service.yaml
      
  2. 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: 80
      
    • Triển khai Ingress:

        kubectl apply -f app-ingress.yaml
      
  3. 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.local
      
    • Truy 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 image bằng my-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

  1. Cập nhật file hosts:

     <EXTERNAL-IP> springboot.local
    
  2. Truy cập http://springboot.local/api/greeting.


7.4 Bài tập mở rộng

  1. 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
      
  2. 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. 🚀

More from this blog

hoangkim

366 posts