Sertifikalarla güvenli iletişim

Sertifikalar, küme içi bileşenler arasında güvenli iletişim kurmak için kullanılır. Azure Stack HCI ve Windows Server'da Azure Kubernetes Service (AKS), yerleşik Kubernetes bileşenleri için sıfır dokunma, kullanıma hazır sağlama ve sertifikaların yönetimi sağlar.

Sertifikalar ve CA'lar

Azure Stack HCI ve Windows Server üzerinde AKS aşağıdaki sertifikaları ve Sertifika Yetkililerini (CA) oluşturur ve kullanır:

Küme CA'sı:

  • API sunucusunda, API sunucusundan ile tek yönlü iletişim için sertifikaları imzalayan bir Küme kubeletCA'sı vardır.
  • Her kubelet biri, kubelet'ten API sunucusuna iletişim için Küme CA'sı tarafından imzalanan bir Sertifika İmzalama İsteği (CSR) de oluşturur.
  • ETCD anahtar değer deposu, VBD'den API sunucusuna iletişim için Küme CA'sı tarafından imzalanmış bir sertifikaya sahiptir.

etcd CA:

  • etcd anahtar değer deposu, kümedeki etcd çoğaltmaları arasında kimlik doğrulaması yapmak ve veri çoğaltmasını yetkilendirmek için sertifikaları imzalayan bir etcd CA'sına sahiptir.

Ön Proxy CA

  • Ön Proxy CA, API sunucusu ile uzantı API sunucusu arasındaki iletişimin güvenliğini sağlar.

Sertifika sağlama

Kubelet'ler için sertifika sağlama işlemi TLS önyüklemesi kullanılarak yapılır. Diğer tüm sertifikalar için YAML tabanlı anahtar ve sertifika oluşturma kullanın.

  • Sertifikalar /etc/kubernetes/pki konumunda depolanır
  • Anahtarlar RSA 4096, EcdsaCurve: P384

Not

Kök sertifikalar 10 yıl geçerlidir. Diğer tüm kök olmayan sertifikalar kısa sürelidir ve dört gün boyunca geçerlidir.

Sertifika yenileme ve yönetimi

Kök olmayan sertifikalar otomatik olarak yenilenir. Aşağıdaki sertifikalar dışında Kubernetes için tüm denetim düzlemi sertifikaları yönetilir:

  • Kubelet sunucu sertifikası
  • Kubeconfig istemci sertifikası

En iyi güvenlik uygulaması olarak, kullanıcı kimlik doğrulaması için Active Directory çoklu oturum açma özelliğini kullanmanız önerilir.

Sertifika iptali

İptal nadir görülen bir olay olmalı ve sertifika yenileme sırasında uygulanmalıdır.

İptal etmek istediğiniz sertifikanın seri numarasını aldıktan sonra iptal bilgilerini tanımlamak ve kalıcı hale getirmek için Kubernetes Özel Kaynağı'nı kullanın. Her iptal nesnesi bir veya daha fazla iptal girdisi içerebilir.

İptal gerçekleştirmek için aşağıdakilerden birini kullanın:

  • Seri numarası
  • Grup
  • DNS adı
  • IP Adresi

Yalnızca belirli bir zaman damgası öncesinde verilen sertifikaları iptal etmek için notBefore zaman belirtilebilir. notBefore zaman belirtilmezse, iptalle eşleşen tüm mevcut ve gelecekteki sertifikalar iptal edilir.

Not

Sunucu sertifikasının kubelet iptali şu anda kullanılamıyor.

İptal işlemi bir seri numarası kullanılarak gerçekleştirildiği sürece, kümenizi çalışma durumuna almak için aşağıda açıklanan PowerShell komutunu kullanabilirsiniz Repair-AksHciClusterCerts . İptal işlemi diğer alanlar kullanılarak gerçekleştirildiyse, komutunu kullanarak kümenizi kurtarabilmeniz için notBefore time değerini belirttiğinizden Repair-AksHciClusterCerts emin olun.

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 

Sorun giderme ve bakım

Günlüğe kaydetme ve izleme için aşağıdaki betiklere ve belgelere bakın:

Çalışan düğümleri için sertifikaları yenileme

Çalışan düğümleri için başarısız sertifika yenilemeleri sertifika-renewal-worker podu tarafından günlüğe kaydedilir. Sertifika yenileme bir çalışan düğümünde başarısız olmaya devam ederse ve sertifikaların süresi dolarsa düğüm kaldırılır ve yerine yeni bir çalışan düğümü oluşturulur.

Burada , certificate-renewal-worker ön ekiyle pod günlüklerini görüntüleme örneği verilmiştir:

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

Sertifika yenileme podundan günlükleri almak için:

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

Denetim düzlemi düğümleri için sertifikaları yenileme

Denetim düzlemi düğümleri için başarısız sertifika yenilemeleri certificate-renewal-controller pod tarafından günlüğe kaydedilir. Denetim düzlemi düğümünde sertifikaların süresi dolarsa, sonunda diğer düğümler tarafından ulaşılamaz hale gelebilir. Tüm denetim düzlemi düğümleri bu duruma girerse, bir TLS hatası nedeniyle küme kullanılamaz duruma gelir. kullanarak kümeye erişmeye kubectlçalışarak ve ardından süresi dolan x509 sertifikalarıyla ilgili bir hata iletisi varsa bağlantının başarısız olduğunu doğrulayarak kümenin bu duruma girip girmediğini onaylayabilirsiniz.

Burada , certificate-renewal-controller ön ekiyle pod günlüklerini görüntüleme örneği verilmiştir:

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

Sertifika yenileme podundan günlükleri almak için:

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

Denetim düzlemi düğümleri çalışan düğümleri gibi yeniden oluşturulamaz, ancak süresi dolan sertifikalarla ilgili hataları düzeltmeye yardımcı olmak için Repair-AksHciClusterCerts modülünü kullanabilirsiniz. Süresi dolan sertifikalar nedeniyle küme başarısız oluyorsa aşağıda gösterildiği gibi komutunu çalıştırın:

Repair-AksHciClusterCerts -Name mytargetcluster 

kümeye aracılığıyla kubectlulaşılamaz hale gelirse, günlükleri /var/log/pods klasöründe bulabilirsiniz.

Sonraki adımlar

Bu nasıl yapılır kılavuzunda sertifikaları sağlamayı ve yönetmeyi öğrendiniz. Ardından şunları yapabilirsiniz: