Aracılığıyla paylaş


Istio hizmet ağı eklentisi eklentisi CA sertifikası sorunlarını giderme

Bu makalede, Istio hizmet ağı eklentisi için eklenti sertifika yetkilisi (CA) sertifikalarını içeren yaygın sorun giderme sorunları açıklanır ve bu sorunları çözmek için çözümler sunulur. Makalede ayrıca hizmet ağı eklentisi için eklenti CA sertifikalarını ayarlama işlemi de incelenmiştir.

Not

Bu makalede, Kümede Istio düzeltmesinin asm-1-17 dağıtıldığını varsayar.

Önkoşullar

  • Azure CLI.

  • Kümeye bağlanmak için Kubernetes kubectl aracı veya benzer bir araç. Azure CLI kullanarak kubectl yüklemek için az aks install-cli komutunu çalıştırın.

  • Aşağıdaki Linux stili standart kabuk araçları:

    • grep
    • sort
    • tail
    • awk
    • xargs
  • JSON verilerini sorgulamak için jq aracı.

Genel kurulum işlemi

  • Eklenti CA sertifikaları özelliğini kullanmak üzere Istio eklentisini etkinleştirmeden önce, kümede Gizli Dizi Deposu eklentisi için Azure Key Vault sağlayıcısını etkinleştirmeniz gerekir. Azure Key Vault ve kümenin aynı Azure kiracısı üzerinde olduğundan emin olun.

  • Azure Key Vault gizli dizi sağlayıcısı eklentisi etkinleştirildikten sonra, eklentinin oluşturduğu kullanıcı tarafından atanan yönetilen kimlik için Azure Key Vault erişimi ayarlamanız gerekir.

  • Kullanıcı tarafından atanan yönetilen kimliğe Azure Key Vault erişme izni verdikten sonra, Eklenti CA sertifikaları özelliğini Istio eklentisiyle birlikte kullanabilirsiniz. Daha fazla bilgi için Eklenti CA sertifikası kullanmak için Istio eklentisini etkinleştirme bölümüne bakın.

  • Kümenin Azure Key Vault gizli dizilerindeki değişiklikleri otomatik olarak algılaması için otomatik döndürmeyi etkinleştirmeniz gerekir.

  • Ara sertifikada yapılan değişiklikler otomatik olarak uygulansa da, kök sertifikada istiod değişiklik yaptıktan sonra dağıtımın yeniden başlatılması gerekir. Dağıtımın yeniden başlatılması, Dağıtılan kaynaklar bölümünde açıklandığı gibi bir cronjob kullanılarak gerçekleştirilir.

Eklenti CA sertifikası kullanmak için Istio eklentisini etkinleştirme

Istio eklentisi Istio eklenti CA sertifikası özelliği, kümenizdeki ağ üzerinde eklenti kök ve ara sertifikaları yapılandırmanıza olanak tanır. Eklentiyi etkinleştirdiğinizde eklenti sertifikası bilgilerini sağlamak için Azure CLI'da az aks mesh enable komutu için aşağıdaki parametreleri belirtin.

Parametre Açıklama
--key-vault-id<resource-id> Azure Key Vault kaynak kimliği. Bu kaynağın yönetilen kümeyle aynı kiracıda olması beklenir. Bu kaynak kimliği Azure Resource Manager şablonu (ARM şablonu) kaynak kimliği biçiminde olmalıdır.
--root-cert-object-name<root-cert-obj-name> Azure anahtar kasasındaki kök sertifika nesne adı.
--ca-cert-object-name<inter-cert-obj-name> Azure anahtar kasasındaki ara sertifika nesne adı.
--ca-key-object-name<inter-key-obj-name> Azure anahtar kasasındaki ara sertifika özel anahtar nesnesi adı.
--cert-chain-object-name<cert-chain-obj-name> Azure anahtar kasasında sertifika zinciri nesne adı.

Eklenti CA sertifikaları özelliğini kullanmak istiyorsanız beş parametrenin tümünü belirtmeniz gerekir. Tüm Azure anahtar kasası nesnelerinin Gizli dizi türünde olması beklenir.

Daha fazla bilgi için bkz. Azure Kubernetes Service üzerinde Istio tabanlı hizmet ağı eklentisi için CA sertifikalarını takma.

Dağıtılan kaynaklar

Eklenti sertifikaları özelliği için eklenti dağıtımının bir parçası olarak, kümede aşağıdaki kaynaklar dağıtılır:

  • cacerts Kubernetes gizli dizisi, eklenti dağıtımı sırasında ad alanında oluşturuluraks-istio-system. Bu gizli dizi, eşitlenmiş Azure Key Vault gizli dizilerini içerir:

    kubectl describe secret cacerts --namespace aks-istio-system
    
    Name:         cacerts
    Namespace:    aks-istio-system
    Labels:       secrets-store.csi.k8s.io/managed=true
    Annotations:  <none>
    
    Type:  opaque
    
    Data
    ====
    ca-cert.pem:     1968 bytes
    ca-key.pem:      3272 bytes
    cert-chain.pem:  3786 bytes
    root-cert.pem:   3636 bytes
    
  • istio-spc-asm-1-17SecretProviderClass nesnesi, eklenti dağıtımı sırasında ad alanında oluşturuluraks-istio-system. Bu kaynak, Gizli Dizi Deposu Kapsayıcı Depolama Arabirimi (CSI) sürücüsü için Azure'a özgü parametreler içerir:

    kubectl get secretproviderclass --namespace aks-istio-system
    
    NAME                 AGE
    istio-spc-asm-1-17   14h
    
  • Yapılandırma eşlemesi istio-ca-root-cert ad alanında aks-istio-system ve diğer tüm kullanıcı tarafından yönetilen ad alanında oluşturulur. Bu yapılandırma eşlemesi, sertifika yetkilisinin kullandığı kök sertifikayı içerir ve ad alanları içindeki iş yükleri tarafından iş yükünden iş yüküne iletişimi doğrulamak için aşağıdaki gibi kullanılır:

    kubectl describe configmap istio-ca-root-cert --namespace aks-istio-system
    
    Name:         istio-ca-root-cert
    Namespace:    aks-istio-system
    Labels:       istio.io/config=true
    Annotations:  <none>
    
    Data
    ====
    root-cert.pem:
    ----
    -----BEGIN CERTIFICATE-----
    <certificate data>
    -----END CERTIFICATE-----
    
  • istio-cert-validator-cronjob-asm-1-17Cronjob nesnesi ad alanında aks-istio-system oluşturulur. Bu cronjob, kök sertifikadaki güncelleştirmeleri denetlemek için 10 dakikada bir çalışacak şekilde zamanlanmıştır. Kubernetes gizli dizisindeki cacerts kök sertifika ad alanında yapılandırma eşlemesi istio-ca-root-certaks-istio-system ile eşleşmiyorsa dağıtımı yeniden başlatır istiod-asm-1-17 :

    kubectl get cronjob --namespace aks-istio-system
    
    NAME                                    SCHEDULE       SUSPEND   ACTIVE
    istio-cert-validator-cronjob-asm-1-17   */10 * * * *   False     0     
    

    Cronjob günlüklerini son çalıştırma için denetlemek için aşağıdaki komutu çalıştırabilirsiniz:

    kubectl logs --namespace aks-istio-system $(kubectl get pods --namespace aks-istio-system | grep 'istio-cert-validator-cronjob-' | sort -k8 | tail -n 1 | awk '{print $1}')
    

    Bu komut, bir kök sertifika güncelleştirmesi algılanıp algılandığına bağlı olarak aşağıdaki çıkış iletilerinden birini oluşturur:

    Root certificate update not detected.
    
    Root certificate update detected. Restarting deployment...
    deployment.apps/istiod-asm-1-17 restarted
    Deployment istiod-asm-1-17 restarted.
    

Dağıtım günlüklerinde sertifika türünü belirleme

Otomatik olarak imzalanan CA sertifikanız mı yoksa BYO (eklenti) CA sertifikanız mı olduğunu belirlemek için dağıtım günlüklerini görüntüleyebilirsiniz. Günlükleri görüntülemek için aşağıdaki komutu çalıştırın:

kubectl logs deploy/istiod-asm-1-17 --container discovery --namespace aks-istio-system | grep -v validationController

Her sertifika günlüğü girdisi, bu tür bir sertifikayı açıklayan başka bir günlük girdisi olmadan hemen önce. Otomatik olarak imzalanan CA sertifikası için giriş " etc/cacerts/ca-key.pem adresinde takılı sertifika yok; otomatik olarak imzalanan sertifika kullanılır." Eklenti sertifikası için girişte " Etc/cacerts/ca-key.pem konumunda takılı sertifika kullan" ifadesi yer alır. Sertifikalarla ilgili örnek günlük girişleri aşağıdaki tablolarda gösterilmiştir.

  • Otomatik olarak imzalanan CA sertifikası için günlük girdileri

    Zaman damgası Günlük düzeyi İleti
    2023-11-20T23:27:36.649019Z Bilgi Ca dosyalarını imzalamak için istiod dosya biçimini kullanma
    2023-11-20T23:27:36.649032Z Bilgi etc/cacerts/ca-key.pem adresinde takılı sertifika yok; otomatik olarak imzalanan sertifika kullanılır
    2023-11-20T23:27:36.649536Z Bilgi x509 sertifikası - <sertifika ayrıntıları>
    2023-11-20T23:27:36.649552Z Bilgi Istiod sertifikaları yeniden yükleniyor
    2023-11-20T23:27:36.649613Z Bilgi spiffe Eş sertifika doğrulayıcıda cluster.local etki alanına güvenmek için 1 sertifika eklendi
  • BYO (eklenti) CA sertifikası için günlük girdileri

    Zaman damgası Günlük düzeyi İleti
    2023-11-21T00:20:25.808396Z Bilgi Ca dosyalarını imzalamak için istiod dosya biçimini kullanma
    2023-11-21T00:20:25.808412Z Bilgi etc/cacerts/ca-key.pem adresinde prize takılı sertifika kullanma
    2023-11-21T00:20:25.808731Z Bilgi x509 sertifikası - <sertifika ayrıntıları>
    2023-11-21T00:20:25.808764Z Bilgi x509 sertifikası - <sertifika ayrıntıları>
    2023-11-21T00:20:25.808799Z Bilgi x509 sertifikası - <sertifika ayrıntıları>
    2023-11-21T00:20:25.808803Z Bilgi Istiod sertifikaları yeniden yükleniyor
    2023-11-21T00:20:25.808873Z Bilgi spiffe Eş sertifika doğrulayıcıda cluster.local etki alanına güvenmek için 1 sertifika eklendi

Günlük girdisindeki sertifika ayrıntıları veren, konu, seri numarası (SN—uzun onaltılık dize) için virgülle ayrılmış değerler ve sertifikanın geçerli olduğunu tanımlayan başlangıç ve bitiş zaman damgası değerleri olarak gösterilir.

Otomatik olarak imzalanan CA sertifikası için bir ayrıntı girdisi vardır. Bu sertifikanın örnek değerleri aşağıdaki tabloda gösterilmiştir.

Veren Konu SN NotBefore NotAfter
"O=cluster.local" "" <32 basamaklı onaltılık değer> "2023-11-20T23:25:36Z" "2033-11-17T23:27:36Z"

KCG (eklenti) CA sertifikası için üç ayrıntı girdisi vardır. Diğer iki girdi, kök sertifika güncelleştirmesi ve ara sertifikada yapılan bir değişiklik içindir. Bu girdiler için örnek değerler aşağıdaki tabloda gösterilmiştir.

Veren Konu SN NotBefore NotAfter
CN=Ara CA - A1,O=Istio,L=cluster-A1" "" <32 basamaklı onaltılık değer> "2023-11-21T00:18:25Z" "2033-11-18T00:20:25Z"
CN=Kök A,O=Istio" "CN=Ara CA - A1,O=Istio,L=cluster-A1" <40 basamaklı onaltılık değer> "2023-11-04T01:40:22Z" "2033-11-01T01:40:22Z"
CN=Kök A,O=Istio" "CN=Kök A,O=Istio" <40 basamaklı onaltılık değer> "2023-11-04T01:38:27Z" "2033-11-01T01:38:27Z"

Yaygın sorunlar

Sorun 1: Azure Key Vault erişimi yanlış ayarlandı

Azure Key Vault gizli dizileri sağlayıcısı eklentisini etkinleştirdikten sonra, Azure Key Vault eklentinin kullanıcı tarafından atanan yönetilen kimliğine erişim izni vermelisiniz. Azure Key Vault erişiminin yanlış ayarlanması, eklenti yüklemesinin durmasına neden olur.

kubectl get pods --namespace aks-istio-system

Pod listesinde, podların istiod-asm-1-17 bir Init:0/2 durumda takıldığını görebilirsiniz.

ADI HAZIR DURUM YENİ -DEN BAŞLATMA YAŞ
istiod-asm-1-17-6fcfd88478-2x95b 0/1 Sonlandırıcı 0 5m55s
istiod-asm-1-17-6fcfd88478-6x5hh 0/1 Sonlandırıcı 0 5m40s
istiod-asm-1-17-6fcfd88478-c48f9 0/1 Init:0/2 0 54 sn
istiod-asm-1-17-6fcfd88478-wl8mw 0/1 Init:0/2 0 39s

Azure Key Vault erişim sorununu doğrulamak için komutunu çalıştırarak kubectl get pods ad alanında kube-system etiketi olan secrets-store-provider-azure podları bulun:

kubectl get pods --selector app=secrets-store-provider-azure --namespace kube-system --output name | xargs -I {} kubectl logs --namespace kube-system {}

Aşağıdaki örnek çıktıda "403 Yasak" hatası oluştuğu ve anahtar kasasında gizli diziler için "alma" izninin reddedildiğini görebilirsiniz:

"bağlama isteği işlenemedi" err="objectType:secret, objectName:<secret-object-name>, objectVersion:: keyvault alınamadı. BaseClient#GetSecret: İstek yanıtlanırken hata oluştu: StatusCode=403 -- Özgün Hata: autorest/azure: Hizmet bir hata döndürdü. Status=403 Code=\"Forbidden\" Message=\"Kullanıcı, grup veya uygulama 'appid=<appid>; oid=<oid>; iss=<iss>', 'MyAzureKeyVault' anahtar kasası üzerinde gizli dizi alma iznine sahip değil; location=eastus'. Bu sorunu çözme konusunda yardım için bkz https://go.microsoft.com/fwlink/?linkid=2125287. \" InnerError={\"code\":\"AccessDenied\"}"

Bu sorunu çözmek için Azure Key Vault eklentisi için kullanıcı tarafından atanan yönetilen kimliğe erişimi ayarlamak için Azure Key Vault gizli dizilerinde Alma ve Listeleme izinleri alın ve Istio eklentisini yeniden yükleyin. İlk olarak, az aks show komutunu çalıştırarak Azure Key Vault eklentisi için kullanıcı tarafından atanan yönetilen kimliğin nesne kimliğini alın:

OBJECT_ID=$(az aks show --resource-group <my-resource-group> --name <my-managed-cluster> --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId')

Erişim ilkesini ayarlamak için, aldığınız nesne kimliğini belirterek aşağıdaki az keyvault set-policy komutunu çalıştırın:

az keyvault set-policy --name MyAzureKeyVault --object-id $OBJECT_ID --secret-permissions get list

Not

Key Vault oluşturmak için Kasa Erişim İlkesi yerine izin modeliniz için Azure RBAC Yetkilendirmesi'ni mi kullanıyorsunuz? Bu durumda, yönetilen kimlik için izinler oluşturmak için bkz. Azure rol tabanlı erişim denetimiyle Key Vault anahtarlara, sertifikalara ve gizli dizilere erişim sağlama. Eklentinin kullanıcı tarafından atanan yönetilen kimliği için Key Vault Okuyucu için bir Azure rol ataması ekleyin.

Sorun 2: Key Vault gizli dizi değişikliklerinin otomatik olarak algılanması ayarlanmadı

Kümenin Azure Key Vault gizli dizilerindeki değişiklikleri otomatik olarak algılaması için Azure Key Vault sağlayıcısı eklentisi için otomatik döndürmeyi etkinleştirmeniz gerekir. Otomatik döndürme, ara ve kök sertifikalardaki değişiklikleri otomatik olarak algılayabilir. Azure Key Vault sağlayıcısı eklentisini etkinleştiren bir küme için, otomatik döndürmenin etkinleştirilip etkinleştirilmediğini denetlemek için aşağıdaki az aks show komutu çalıştırın:

az aks show --resource-group <my-resource-group> --name <my-managed-cluster> | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.enableSecretRotation'

Küme Azure Key Vault sağlayıcısı eklentisini etkinleştirdiyse döndürme yoklama aralığını belirlemek için aşağıdaki az aks show komutu çalıştırın:

az aks show --resource-group <my-resource-group> --name <my-managed-cluster> | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.rotationPollInterval'

Önceki eşitlemeden sonra yoklama aralığı süresi geçtiğinde Azure Key Vault gizli dizileri kümeyle eşitlenir. Varsayılan aralık değeri iki dakikadır.

Sorun 3: Sertifika değerleri eksik veya yanlış yapılandırılmış

Gizli nesneler Azure Key Vault eksikse veya bu nesneler yanlış yapılandırılmışsa, eklentinin yüklenmesi gecikebilir. Podlar istiod-asm-1-17 durum dışında Init:0/2 ilerlemez. Bu sorunun temel nedenini bulmak için aşağıdaki kubectl describe komutu çalıştırarak söz konusu podun dağıtım günlüklerini görüntüleyin:

kubectl describe deploy/istiod-asm-1-17 --namespace aks-istio-system

komutu, aşağıdaki çıkış tablosuna benzeyen olayları görüntüler. Bu örnekte sorunun nedeni eksik bir gizli dizidir.

Tür Neden Yaş Kaynak İleti
Normal Planlanan 3m9s default-scheduler aks-istio-system/istiod-asm-1-17-6fcfd88478-hqdjj, aks-userpool-24672518-vmss00000000'a başarıyla atandı
Uyarı FailedMount 66 sn kubelet Birimler eklenemiyor veya bağlanamıyor: unmounted volumes=[cacerts], unattached volumes=[], process volumes=[]: timed out for the condition
Uyarı FailedMount 61'ler (3m9'un üzerinde x9) kubelet MountVolume.SetUp , "cacerts" birimi için başarısız oldu: rpc hatası: kod = Bilinmeyen desc = pod aks-istio-system/istiod-asm-1-17-6fcfd88478-hqdjj için gizli dizi deposu nesneleri bağlanamadı, err: rpc hatası: kod = Bilinmeyen desc = nesneler bağlanamadı, hata: objectType:secret, objectName:test-cert-chain, objectVersion:: keyvault alınamadı. BaseClient#GetSecret: İstek yanıtlanırken hata oluştu: StatusCode=404 -- Özgün Hata: autorest/azure: Hizmet bir hata döndürdü. Status=404 Code="SecretNotFound" Message="Bu anahtar kasasında test-cert-chain (ad/kimlik) içeren bir gizli dizi bulunamadı. Bu gizli diziyi yakın zamanda sildiyseniz doğru kurtarma komutunu kullanarak bu gizli diziyi kurtarabilirsiniz. Bu sorunu çözme konusunda yardım için bkz https://go.microsoft.com/fwlink/?linkid=2125182. "

Kaynaklar

Üçüncü taraf bilgileri hakkında yasal uyarı

Bu makalede adı geçen üçüncü taraf ürünleri Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft, bu ürünlerin performansı veya güvenilirliği ile ilgili örtük veya başka türlü hiçbir garanti vermez.

Üçüncü tarafla iletişim sorumluluk reddi

Microsoft, bu konu hakkında ek bilgi bulmanıza yardımcı olmak için üçüncü taraf iletişim bilgileri sağlar. Bu iletişim bilgileri önceden haber verilmeksizin değiştirilebilir. Microsoft, üçüncü taraf iletişim bilgilerinin doğruluğunu garanti etmez.

Yardım için bize ulaşın

Sorularınız veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteği isteyin. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.