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
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-17
SecretProviderClass 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ındaaks-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-17
Cronjob nesnesi ad alanındaaks-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 dizisindekicacerts
kök sertifika ad alanında yapılandırma eşlemesiistio-ca-root-cert
aks-istio-system
ile eşleşmiyorsa dağıtımı yeniden başlatıristiod-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
Istio hizmet ağı eklentisi giriş ağ geçidi sorunlarını giderme
Istio hizmet ağı eklentisi küçük düzeltme yükseltme sorunlarını giderme
Üçü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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin