Komunikasi yang aman dengan sertifikat

Sertifikat merupakan sarana untuk membangun komunikasi yang aman antar komponen dalam kluster. Azure Kubernetes Service (AKS) di Azure Stack HCI dan Windows Server menyediakan provisi tanpa sentuhan dan siap pakai, serta pengelolaan sertifikat untuk komponen bawaan Kubernetes.

Sertifikat dan OS

AKS di Azure Stack HCI dan Windows Server menghasilkan serta menggunakan sertifikat dan Otoritas Sertifikat (OS) berikut:

OS Kluster:

  • Server API memiliki OS Kluster, yang menandatangani sertifikat untuk komunikasi satu arah dari server API ke kubelet.
  • Masing-masing kubelet juga membuat Certificate Signing Request (CSR), yang ditandatangani oleh OS Kluster, untuk komunikasi dari kubelet ke server API.
  • Penyimpanan nilai kunci etcd memiliki sertifikat yang ditandatangani oleh OS Kluster untuk komunikasi dari etcd ke server API.

OS etcd:

  • Penyimpanan nilai kunci etcd memiliki OS etcd yang menandatangani sertifikat untuk mengautentikasi dan mengotorisasi replikasi data antar-replika etcd di kluster.

OS Proksi Depan

  • OS Proksi Depan mengamankan komunikasi antara server API dan server API ekstensi.

Penyediaan sertifikat

Provisi sertifikat untuk kubelet dilakukan menggunakan bootstrapping TLS. Untuk semua sertifikat lainnya, gunakan pembuatan kunci dan sertifikat berbasis YAML.

  • Sertifikat disimpan di /etc/kubernetes/pki
  • Kuncinya adalah RSA 4096, EcdsaCurve: P384

Catatan

Sertifikat akar valid selama 10 tahun. Semua sertifikat non-akar lainnya berumur pendek dan valid selama empat hari.

Perpanjangan dan manajemen sertifikat

Sertifikat non-akar diperbarui secara otomatis. Semua sertifikat sarana kontrol untuk Kubernetes dikelola kecuali untuk sertifikat berikut:

  • Sertifikat server Kubelet
  • Sertifikat klien Kubeconfig

Sebaiknya gunakan Akses menyeluruh Active Directory bagi autentikasi pengguna sebagai praktik keamanan terbaik.

Pencabutan sertifikat

Pencabutan seharusnya jarang terjadi dan hanya akan diterapkan pada saat perpanjangan sertifikat.

Setelah Anda memiliki nomor seri sertifikat yang ingin dicabut, gunakan Kubernetes Custom Resource untuk menentukan dan menyimpan informasi pencabutan. Setiap objek pencabutan dapat terdiri dari satu atau lebih entri pencabutan.

Untuk melakukan pencabutan, gunakan salah satu hal berikut:

  • Nomor seri
  • Grup
  • Nama DNS
  • Alamat IP

Waktu notBefore dapat ditentukan untuk hanya mencabut sertifikat yang dikeluarkan sebelum stempel waktu tertentu. Jika waktu notBefore tidak ditentukan, semua sertifikat yang ada dan yang akan datang yang cocok dengan pencabutan akan dicabut.

Catatan

Pencabutan sertifikat server kubelet saat ini tidak tersedia.

Selama pencabutan dilakukan menggunakan nomor seri, Anda dapat menggunakan perintah PowerShell Repair-AksHciClusterCerts yang dijelaskan di bawah ini untuk membuat kluster Anda menjadi bekerja. Jika pencabutan dilakukan menggunakan bidang lain, pastikan untuk menentukan waktu notBefore sehingga Anda dapat memulihkan kluster menggunakan perintah Repair-AksHciClusterCerts.

apiVersion: certificates.microsoft.com/v1 
kind: RenewRevocation 
metadata: 
  name: my-renew-revocation 
  namespace: kube-system 
spec: 
  description: My list of renew revocations 
  revocations: 
  - description: Revoked certificates by serial number 
    kind: serialnumber 
    notBefore: "2020-04-17T17:22:05Z" 
    serialNumber: 77fdf4b1033b387aaace6ce1c18710c2 
  - description: Revoked certificates by group 
    group: system:nodes 
    kind: Group 
  - description: Revoked certificates by DNS 
    dns: kubernetes.default.svc. 
    kind: DNS 
  - description: Revoked certificates by DNS Suffix 
    dns: .cluster.local 
    kind: DNS 
  - description: Revoked certificates by IP 
    ip: 170.63.128.124 
    kind: IP 

Memecahkan masalah dan pemeliharaan

Lihat skrip dan dokumentasi berikut untuk pengelogan dan pemantauan:

Memperbarui sertifikat untuk node pekerja

Untuk node pekerja, perpanjangan sertifikat yang gagal akan dilog oleh pod certificate-renewal-worker. Jika perpanjangan sertifikat terus gagal pada node pekerja dan sertifikat kedaluwarsa, node akan dihapus dan node pekerja baru akan dibuat sebagai penggantinya.

Berikut adalah contoh melihat log untuk pod dengan awalan certificate-renewal-worker:

kubectl.exe --kubeconfig .\testcluster-kubeconfig -n=kube-system get pods 
NAME                                           READY   STATUS             RESTARTS   AGE 
… 
certificate-renewal-worker-6f68k               1/1     Running            0          6d 

Untuk mendapatkan log dari pod perpanjangan sertifikat:

kubectl.exe --kubeconfig .\testcluster-kubeconfig -n=kube-system logs certificate-renewal-worker-6f68k

Memperpanjang sertifikat untuk node sarana kontrol

Untuk node sarana kontrol, perpanjangan sertifikat yang gagal akan dilog oleh pod certificate-renewal-controller. Jika sertifikat kedaluwarsa pada node sarana kontrol, pada akhirnya ini mungkin menjadi tidak terjangkau oleh node lain. Jika semua node sarana kontrol memasuki keadaan ini, kluster akan menjadi tidak dapat dioperasikan karena kegagalan TLS. Anda dapat mengonfirmasi apakah kluster telah memasuki status ini dengan mencoba mengaksesnya menggunakan kubectl, lalu memverifikasi bahwa koneksi telah gagal jika ada pesan kesalahan terkait sertifikat x509 yang kedaluwarsa.

Berikut adalah contoh melihat log untuk pod dengan awalan certificate-renewal-controller:

kubectl.exe --kubeconfig .\testcluster-kubeconfig -n=kube-system get pods 
NAME                                           READY   STATUS             RESTARTS   AGE 
… 
certificate-renewal-controller-2cdmz               1/1     Running            0          6d 

Untuk mendapatkan log dari pod perpanjangan sertifikat:

kubectl.exe --kubeconfig .\testcluster-kubeconfig -n=kube-system logs certificate-renewal-controller-2cdmz

Node sarana kontrol tidak dapat dibuat ulang seperti node pekerja, tetapi Anda dapat menggunakan modul Repair-AksHciClusterCerts untuk membantu memperbaiki kesalahan yang terkait dengan sertifikat kedaluwarsa. Jika kluster mulai gagal karena sertifikat kedaluwarsa, jalankan perintah sebagaimana berikut:

Repair-AksHciClusterCerts -Name mytargetcluster 

Jika kluster menjadi tidak dapat dijangkau melalui kubectl, Anda dapat menemukan lognya di folder /var/log/pods.

Langkah berikutnya

Dalam panduan cara ini, Anda belajar cara memprovisikan dan mengelola sertifikat. Selanjutnya, Anda dapat: