0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Hướng Dẫn Chi Tiết Thiết Lập SSL Cho Dịch Vụ Public Trên Kubernetes Sử Dụng Ingress

Đăng vào 2 tuần trước

• 5 phút đọc

Xin chào các bạn! Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu cách thiết lập SSL cho các dịch vụ công khai trên Kubernetes (K8s) thông qua Ingress. Việc này không chỉ giúp bảo mật thông tin mà còn đảm bảo trải nghiệm người dùng tốt hơn khi truy cập vào ứng dụng của bạn.

Giới Thiệu

Để thực hiện việc thiết lập SSL, chúng ta cần chuẩn bị những điều kiện cơ bản sau:

  1. Cluster Kubernetes: Đảm bảo cluster K8s hoạt động ổn định và bạn có quyền quản trị.
  2. Chứng Chỉ SSL: Bạn có thể sử dụng chứng chỉ từ nhà cung cấp uy tín hoặc tự ký (self-signed certificate) với file .crt và .key.
  3. Các Tài Nguyên Cần Thiết:
    • Namespace (ví dụ: ssl-test)
    • Deployment cần triển khai SSL
    • Ingress Controller
    • Ingress Resource
    • Service
    • Load Balancer

Tạo Secret Chứa Chứng Chỉ SSL

Có hai cách để tạo Secret chứa chứng chỉ SSL trong Kubernetes:

1. Tạo Secret bằng File

Bạn có thể tạo một file secret.yaml với nội dung sau:

yaml Copy
apiVersion: v1
kind: Secret
metadata:
  name: my-ssl-secret
  namespace: <Namespace>
data:
  tls.crt: <base64encode> CERTIFICATE
  tls.key: <base64encode> PRIVATE KEY
type: kubernetes.io/tls

Sử dụng lệnh sau để tạo Secret từ file:

bash Copy
kubectl apply -f secret.yaml

2. Tạo Secret bằng CLI

Bạn cũng có thể tạo Secret trực tiếp từ dòng lệnh bằng cách sử dụng lệnh sau:

bash Copy
kubectl create secret tls my-ssl-secret --cert=path/to/tls.crt --key=path/to/tls.key -n <Namespace>

Luồng Traffic từ User Đến Pod (Ứng Dụng)

Dưới đây là quy trình luồng traffic từ người dùng đến ứng dụng mà chúng ta cần thiết lập:

  1. User: Người dùng gửi yêu cầu HTTP hoặc HTTPS từ trình duyệt hoặc ứng dụng.
  2. Load Balancer: Đóng vai trò là điểm tiếp nhận, lắng nghe trên cổng 80 và 443.
  3. Ingress Controller: Xử lý yêu cầu HTTP/HTTPS và định tuyến đến các dịch vụ phù hợp.
  4. Ingress Resource: Chứa quy tắc quy định cách định tuyến cho các dịch vụ.
  5. Service: Chuyển tiếp lưu lượng đến pod dựa trên quy tắc đã thiết lập.
  6. Pod (Ứng Dụng): Là nơi chạy ứng dụng và xử lý các yêu cầu từ người dùng.

Cấu Hình Tệp YAML Cho Các Tài Nguyên

Dưới đây là các tệp YAML cho từng tài nguyên cần thiết:

1. Load Balancer

yaml Copy
apiVersion: v1
kind: Service
metadata:
  name: <Load balancer name>
  namespace: <Namespace>
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  selector:
    app: <Ingress Controller Label>
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443

2. Ingress Controller

yaml Copy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: <Ingress Controller Name>
  namespace: <Namespace>
spec:
  replicas: 1
  selector:
    matchLabels:
      app: <Ingress Controller Label>
  template:
    metadata:
      labels:
        app: <Ingress Controller Label>
    spec:
      containers:
        - name: <Ingress Container Name>
          image: nginx:latest
          ports:
            - name: http
              containerPort: 80
            - name: https
              containerPort: 443

3. Ingress Resource

yaml Copy
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: <Ingress Resource Name>
  namespace: <Namespace>
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
    - hosts:
        - <DOMAIN NAME>
      secretName: my-ssl-secret
  rules:
    - host: <DOMAIN NAME>
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: <SERVICE NAME>
                port:
                  number: 3000

4. Service

yaml Copy
apiVersion: v1
kind: Service
metadata:
  name: <Service Name>
  namespace: <Namespace>
spec:
  selector:
    app: <Deployment App Name>
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000

Một Số Lỗi Phổ Biến và Cách Khắc Phục

Dưới đây là một số lỗi thường gặp và cách xử lý:

  1. x509: certificate signed by unknown authority: Kiểm tra chứng chỉ và CA.
  2. Failed calling webhook validate.nginx.ingress.kubernetes.io: Xác nhận trạng thái của admission controller.
  3. No endpoints available for service: Kiểm tra các pod và đảm bảo chúng chạy ổn định.
  4. Default backend - 404 từ Ingress: Xác minh lại cấu hình host và path trong Ingress.
  5. Máy chủ Load Balancer chỉ ở trạng thái pending: Kiểm tra dải IP và subnet cho cluster K8s của bạn.

Hy vọng bài viết này sẽ giúp bạn hiểu rõ hơn về cách thiết lập SSL cho dịch vụ Public trên Kubernetes thông qua Ingress. Hãy cùng tiến hành áp dụng để đảm bảo sự bảo mật cho ứng dụng của bạn. Cảm ơn các bạn đã theo dõi!

Mình là Hiếu, Một Developer đang học hỏi về DevOps. Hẹn gặp lại các bạn trong các bài viết tiếp theo!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào