Skip to main content

Kubernetes - Secret

Secret trong Kubernetes là một tài nguyên quan trọng để quản lý các thông tin nhạy cảm như mật khẩu, chứng chỉ TLS, hoặc khóa SSH.

kubernetes.png

Một Secret trong Kubernetes được định nghĩa bằng một file YAML, bao gồm các thông tin như tên Secret, dữ liệu nhạy cảm được mã hóa, và các thông tin khác. Có nhiều loại Secret khác nhau trong Kubernetes, bao gồm:

  • Opaque: loại Secret mặc định được sử dụng để lưu trữ các dữ liệu nhạy cảm không được mã hóa.
  • kubernetes.io/tls: loại Secret được sử dụng để lưu trữ các chứng chỉ TLS.
  • kubernetes.io/dockerconfigjson: loại Secret được sử dụng để lưu trữ thông tin đăng nhập Docker.

Bạn có thể tạo một Secret mới bằng lệnh kubectl create secret <loại Secret> <tên Secret> --from-literal=<tên khóa>=<giá trị> hoặc kubectl create -f <tên file YAML>. Sau đó, bạn có thể sửa file YAML của Secret bằng lệnh kubectl edit secret <tên Secret>.

Ví dụ: Sau đây minh họa cách sử dụng Secret trong Kubernetes để lưu trữ mật khẩu của cơ sở dữ liệu.

Giả sử bạn có một cơ sở dữ liệu MySQL chạy trên cụm Kubernetes và bạn muốn đặt mật khẩu của cơ sở dữ liệu này vào một Secret để tránh lộ thông tin nhạy cảm. Đầu tiên, bạn tạo một Secret mới bằng lệnh sau:

kubectl create secret generic mysql-pass --from-literal=password=MY_PASSWORD

Trong đó mysql-pass là tên của Secret và MY_PASSWORD là mật khẩu của cơ sở dữ liệu. Sau đó, bạn sửa file YAML của Pod MySQL để sử dụng mật khẩu từ Secret bằng cách thêm đoạn mã sau:

spec:
  containers:
    - name: mysql
      image: mysql
      env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password

Trong đó mysql-pass là tên của Secret và password là tên của khóa chứa mật khẩu. Sau khi triển khai file YAML này, Pod MySQL sẽ sử dụng mật khẩu từ Secret để đăng nhập vào cơ sở dữ liệu.