Certificate TLS trong Kubernetes

Bài viết này nói về giải thích cách sử dụng chứng chỉ TLS để bảo mật giao tiếp giữa các thành phần trong cluster Kubernetes.

I. Giới thiệu về chứng chỉ TLS trong Kubernetes

Tất cả giao tiếp giữa các thành phần  trong cluster Kubernetes đều cần được mã hóa bằng TLS. Cluster Kubernetes cần ít nhất một CA để ký các chứng chỉ. Các thành phần server cần chứng chỉ server để xác thực với client. Ví dụ, API Server: Là server, cần chứng chỉ server (APIserver.crt, APIserver.key) để giao tiếp với các client của nó.  Các thành phần client cần chứng chỉ client để xác thực với server.

– Các loại chứng chỉ:

  • Chứng chỉ server (Server certificates): Cấu hình trên các server để xác thực server với client.
  • Chứng chỉ root (Root certificates): Cấu hình trên CA (Cơ quan chứng nhận) để ký cho các chứng chỉ server.
  • Chứng chỉ client (Client certificates): Cấu hình trên client để xác thực client với server.

Quy ước đặt tên:

  • Chứng chỉ: Kết thúc bằng .crt hoặc .pem.
  • Khóa riêng: Kết thúc bằng .key hoặc có -key trong tên file.

II. Cách tạo chứng chỉ trong Kubernetes

Sử dụng OpenSSL để tạo và thao tác khóa mật mã và chứng chỉ.

Tạo certificate authority (CA):

  • Generate Keys: openssl genrsa -out ca.key
  • Certificate Signing Request: openssl req -new -key ca.key -out ca.csr
  • Sign Certificate: openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

Tạo certificate admin user:

  • Generate Keys: openssl genrsa -out admin.key 2048
  • Certificate Signing Request: openssl req -new -key admin.key -subj \
    "/CN=kube-admin/OU=system:masters" -out admin.csr
  • Sign Certificate: openssl x509 -req -in admin.csr –CA ca.crt -CAkey ca.key -out admin.crt

Lấy chứng chỉ:

curl https://kube-apiserver:6443/api/v1/pods \
--key admin.key --cert admin.crt 
--cacert ca.crt

{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"selfLink": "/api/v1/pods",
},
"items": []
}

Để quản lý các chứng chỉ, mình sẽ tạo một Create CertificateSigningRequest Object. Sau khi được tạo quản trị viên có thể quản lý các certificate: xem, phê duyệt, chia sẻ certificate cho user

III. Practice

1. Identify the certificate file used for the kube-api server:

Run the command cat /etc/kubernetes/manifests/kube-apiserver.yaml and look for the line --tls-cert-file

2. Identify the Certificate file used to authenticate kube-apiserver as a client to ETCD Server.

Run the command cat /etc/kubernetes/manifests/kube-apiserver.yaml and look for value of etcd-certfile flag

3. Identify the ETCD Server Certificate used to host ETCD server.

Look for cert-file option in the file /etc/kubernetes/manifests/etcd.yaml.

4. Identify the ETCD Server CA Root Certificate used to serve ETCD Server.

Look for CA Certificate (trusted-ca-file) in file /etc/kubernetes/manifests/etcd.yaml.

Run the command openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text and look for issuer.

Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em