Mengelola dan memutar sertifikat di Azure Kubernetes Service (AKS)

Artikel ini menjelaskan cara mengelola dan memutar sertifikat di kluster Azure Kubernetes Service (AKS) untuk menjaga komunikasi yang aman antar komponen dan memastikan kepatuhan.

Prerequisites

  • Azure CLI versi 2.0.77 atau yang lebih baru. Periksa versi Anda dengan menggunakan az --version perintah . Untuk menginstal atau meningkatkan, lihat Install Azure CLI.

Periksa tanggal kedaluwarsa sertifikat otoritas sertifikat kluster (CA)

Periksa tanggal kedaluwarsa sertifikat CA kluster menggunakan perintah kubectl config view.

kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity

Periksa tanggal kedaluwarsa sertifikat server API

Periksa tanggal kedaluwarsa sertifikat server API menggunakan perintah berikut curl :

curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire

Periksa tanggal kedaluwarsa sertifikat simpul agen VMSS

Periksa tanggal kedaluwarsa sertifikat node agen set skala mesin virtual menggunakan perintah az vmss run-command invoke.

az vmss run-command invoke \
    --resource-group <node-resource-group> \
    --name <vmss-name> \
    --command-id RunShellScript \
    --instance-id 1 \
    --scripts "openssl x509 -in  /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" \
    --query "value[0].message"

Periksa tanggal kedaluwarsa sertifikat VM mandiri

Periksa tanggal kedaluwarsa VM mandiri menggunakan az vm run-command invoke perintah .

az vm run-command invoke \
    --resource-group <resource-group> \
    --name <vm-name> \
    --command-id RunShellScript \
    --scripts "openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" \
    --query "value[0].message"

Merotasi sertifikat CA kluster secara manual

Saat Anda merotasi sertifikat CA kluster, sertifikat turunan berikut juga diperbarui:

  • Token akun layanan (SA)
  • Sertifikat server API
  • Sertifikat klien Kubelet
  • Sertifikat server Kubelet (jika kubelet melayani rotasi sertifikat diaktifkan pada kluster)

Warning

Merotasi sertifikat Anda menggunakan az aks rotate-certs akan membuat ulang semua node, set skala mesin virtual, dan disk Anda. Proses ini dapat menyebabkan waktu henti hingga 30 menit untuk kluster AKS Anda. Jika perintah gagal sebelum selesai, gunakan perintah az aks show untuk memastikan status kluster menunjukkan Rotasi Sertifikat. Jika kluster dalam status gagal, jalankan az aks rotate-certs ulang untuk memutar sertifikat Anda lagi.

  1. Sambungkan ke kluster Anda menggunakan az aks get-credentials perintah .

    az aks get-credentials --resource-group <resource-group> --name <cluster-name>
    
  2. Putar semua sertifikat, CA, dan SA di kluster Anda dengan menggunakan perintah az aks rotate-certs.

    az aks rotate-certs --resource-group <resource-group> --name <cluster-name>
    
  3. Verifikasi bahwa sertifikat lama tidak lagi valid menggunakan perintah apa pun kubectl , seperti kubectl get nodes.

    kubectl get nodes
    

    Jika Anda tidak memperbarui sertifikat yang digunakan oleh kubectl, Anda akan melihat kesalahan yang mirip dengan contoh output berikut:

    Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")
    

Memperbarui kubectl sertifikat klien

  1. Perbarui sertifikat klien kubectl menggunakan perintah az aks get-credentials dengan bendera --overwrite-existing.

    az aks get-credentials --resource-group <resource-group> --name <cluster-name> --overwrite-existing
    
  2. Verifikasi bahwa sertifikat diperbarui menggunakan kubectl get perintah .

    kubectl get nodes
    

    Note

    Jika Anda memiliki layanan yang berjalan di atas AKS, Anda mungkin perlu memperbarui sertifikat mereka.

Verifikasi bahwa rotasi sertifikat penerbitan kubelet telah diaktifkan

Setiap simpul dengan fitur diaktifkan secara otomatis diberikan label kubernetes.azure.com/kubelet-serving-ca=cluster. Pastikan label sudah diatur menggunakan perintah kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca.

kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca

Verifikasikan bahwa kubelet mengalami proses bootstrapping TLS

Saat Anda mengaktifkan fitur ini, setiap kubelet yang berjalan pada node Anda akan menjalani proses bootstrap TLS untuk serving.

Pastikan proses bootstrapping sedang berlangsung dengan menggunakan perintah kubectl get untuk mendapatkan objek CSR yang ada saat ini di dalam kluster Anda.

kubectl get csr --field-selector=spec.signerName=kubernetes.io/kubelet-serving

Semua CSR yang aktif berada dalam keadaan Approved,Issued, yang menunjukkan bahwa CSR telah disetujui dan sertifikat yang ditandatangani telah diterbitkan. Melayani CSR memiliki nama penanda tangan kubernetes.io/kubelet-serving. Contohnya:

NAME        AGE    SIGNERNAME                                    REQUESTOR                    REQUESTEDDURATION   CONDITION
csr-1ab2c   113s   kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:abcd1e      none              Approved,Issued
csr-defgh   111s   kubernetes.io/kubelet-serving                 system:node:akswinp1000000   none              Approved,Issued
csr-ij3kl   46m    kubernetes.io/kubelet-serving                 system:node:akswinp2000000   none              Approved,Issued
csr-mn4op   46m    kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:ab1cde      none              Approved,Issued

Pastikan kubelet menggunakan sertifikat TLS yang diperoleh dari bootstrapping server.

Konfirmasi apakah kubelet node menggunakan sertifikat server yang ditandatangani oleh CA cluster dengan menggunakan perintah [kubectl debug][kubectl-debug] untuk memeriksa isi direktori PKI kubelet.

kubectl debug node/<node> -ti --image=mcr.microsoft.com/azurelinux/base/core:3.0 -- ls -l /host/var/lib/kubelet/kubelet-server-current.pem

Jika ada symlink kubelet-server-current.pem, kubelet melakukan bootstrap dan merotasi sertifikat penyajiannya sendiri melalui proses bootstrap TLS serta ditandatangani oleh CA cluster.

Menonaktifkan rotasi sertifikat layanan kubelet

  1. Nonaktifkan rotasi sertifikat layanan kubelet dengan memperbarui kumpulan simpul menggunakan perintah az aks nodepool update dan dengan menentukan tag aks-disable-kubelet-serving-certificate-rotation=true.

    az aks nodepool update \
        --cluster-name <cluster-name> \
        --resource-group <resource-group> \
        --name <node-pool-name> \
        --tags aks-disable-kubelet-serving-certificate-rotation=true
    
  2. Gambar ulang node Anda menggunakan peningkatan gambar node atau dengan menskalakan kumpulan ke nol instans kemudian kembalikan ke nilai yang diinginkan.

Untuk informasi selengkapnya tentang keamanan AKS, lihat artikel berikut ini: