Připojení certifikátů certifikační autority pro doplněk Istio service mesh ve službě Azure Kubernetes Service
V doplňku sítě služby Istio pro službu Azure Kubernetes Service ve výchozím nastavení vygeneruje certifikační autorita Istio (CA) kořenový certifikát a klíč podepsaný svým držitelem a používá je k podepsání certifikátů úloh. Pokud chcete chránit kořenový klíč certifikační autority, měli byste použít kořenovou certifikační autoritu, která běží na zabezpečeném počítači offline. Kořenovou certifikační autoritu můžete použít k vydávání zprostředkujících certifikátů certifikačním autoritám Istio, které běží v každém clusteru. Certifikační autorita Istio může podepisovat certifikáty úloh pomocí certifikátu a klíče určeného správcem a distribuovat kořenový certifikát určený správcem do úloh jako kořen důvěryhodnosti. Tento článek se věnuje tomu, jak používat vlastní certifikáty a klíče pro certifikační autoritu Istio v doplňku Istio service mesh pro službu Azure Kubernetes Service.
V tomto článku se dozvíte, jak nakonfigurovat certifikační autoritu Istio s kořenovým certifikátem, podpisovým certifikátem a klíčem poskytovaným jako vstupy pomocí služby Azure Key Vault do doplňku Istio service mesh.
Než začnete
Ověření verze Azure CLI
Doplněk vyžaduje instalaci Azure CLI verze 2.57.0 nebo novější. Verzi můžete ověřit spuštěním az --version
. Pokud chcete nainstalovat nebo upgradovat, přečtěte si téma [Instalace Azure CLI][azure-cli-install].
Nastavení služby Azure Key Vault
K zadání certifikátu a vstupů klíčů do doplňku Istio potřebujete prostředek služby Azure Key Vault.
Potřebujete vygenerovat kořenový certifikát, zprostředkující certifikáty, zprostředkující klíč a řetěz certifikátů offline. Kroky 1 až 3 tady mají příklad, jak tyto soubory vygenerovat.
Vytváření tajných kódů ve službě Azure Key Vault pomocí certifikátů a klíče:
az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem> az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path-to-folder/cert-chain.pem>
Povolte zprostředkovatele služby Azure Key Vault pro ovladač CSI úložiště tajných kódů pro váš cluster:
az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER
Poznámka:
Při obměně certifikátů můžete řídit, jak rychle se tajné kódy synchronizují do clusteru, můžete použít
--rotation-poll-interval
parametr doplňku Poskytovatele tajných kódů služby Azure Key Vault. Příklad:az aks addon update --resource-group $RESOURCE_GROUP --name $CLUSTER --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 20s
Autorizovat spravovanou identitu přiřazenou uživatelem doplňku, aby měla přístup k prostředku služby Azure Key Vault:
OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId' -o tsv) az keyvault set-policy --name $AKV_NAME --object-id $OBJECT_ID --secret-permissions get list
Poznámka:
Pokud jste vytvořili službu Key Vault s autorizací Azure RBAC pro váš model oprávnění místo zásad přístupu k trezoru, postupujte podle těchto pokynů a vytvořte oprávnění pro spravovanou identitu. Přidejte přiřazení role Azure pro
Key Vault Reader
spravovanou identitu přiřazenou uživatelem doplňku.
Nastavení doplňku sítě služeb založeného na Istio s certifikáty certifikační autority plug-in
Povolte doplněk sítě služby Istio pro váš existující cluster AKS a při odkazování na tajné kódy služby Azure Key Vault, které byly vytvořeny dříve:
az aks mesh enable --resource-group $RESOURCE_GROUP --name $CLUSTER \ --root-cert-object-name root-cert \ --ca-cert-object-name ca-cert \ --ca-key-object-name ca-key \ --cert-chain-object-name cert-chain \ --key-vault-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$AKV_NAME
Poznámka:
U existujících clusterů s doplňkem Istio pomocí kořenového certifikátu podepsaného svým držitelem vygenerovaného certifikační autoritou Istio není přepnutí na certifikační autoritu modulu plug-in podporováno. Nejprve je potřeba síť v těchto clusterech zakázat a pak ji znovu povolit pomocí výše uvedeného příkazu, abyste prošli vstupy certifikační autority modulu plug-in.
Ověřte, že se v
cacerts
clusteru vytvoří:kubectl get secret -n aks-istio-system
Očekávaný výstup:
NAME TYPE DATA AGE cacerts opaque 4 13h sh.helm.release.v1.azure-service-mesh-istio-discovery.v380 helm.sh/release.v1 1 2m15s sh.helm.release.v1.azure-service-mesh-istio-discovery.v381 helm.sh/release.v1 1 8s
Ověřte, že řídicí rovina Istio převzala vlastní certifikační autoritu:
kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController | grep x509
Očekávaný výstup by měl vypadat přibližně takto:
2023-11-06T15:49:15.493732Z info x509 cert - Issuer: "CN=Intermediate CA - A1,O=Istio,L=cluster-A1", Subject: "", SN: e191d220af347c7e164ec418d75ed19e, NotBefore: "2023-11-06T15:47:15Z", NotAfter: "2033-11-03T15:49:15Z" 2023-11-06T15:49:15.493764Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Intermediate CA - A1,O=Istio,L=cluster-A1", SN: 885034cba2894f61036f2956fd9d0ed337dc636, NotBefore: "2023-11-04T01:40:02Z", NotAfter: "2033-11-01T01:40:02Z" 2023-11-06T15:49:15.493795Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Root A,O=Istio", SN: 18e2ee4089c5a7363ec306627d21d9bb212bed3e, NotBefore: "2023-11-04T01:38:27Z", NotAfter: "2033-11-01T01:38:27Z"
Obměně certifikační autority
Možná budete muset pravidelně obměňovat certifikační autority z důvodů zabezpečení nebo zásad. V této části se dozvíte, jak zpracovat scénáře obměny zprostředkující certifikační autority a kořenové certifikační autority.
Obměně zprostředkující certifikační autority
Zprostředkující certifikační autoritu můžete otočit a zároveň zachovat stejnou kořenovou certifikační autoritu. Aktualizujte tajné kódy v prostředku služby Azure Key Vault pomocí nového certifikátu a souborů klíčů:
az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem> az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path/cert-chain.pem>
Počkejte na dobu trvání
--rotation-poll-interval
. Zkontrolujte, jestlicacerts
se tajný klíč v clusteru aktualizoval na základě nové zprostředkující certifikační autority aktualizované v prostředku služby Azure Key Vault:kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController
Očekávaný výstup by měl vypadat přibližně takto:
2023-11-07T06:16:21.091844Z info Update Istiod cacerts 2023-11-07T06:16:21.091901Z info Using istiod file format for signing ca files 2023-11-07T06:16:21.354423Z info Istiod has detected the newly added intermediate CA and updated its key and certs accordingly 2023-11-07T06:16:21.354910Z info x509 cert - Issuer: "CN=Intermediate CA - A2,O=Istio,L=cluster-A2", Subject: "", SN: b2753c6a23b54d8364e780bf664672ce, NotBefore: "2023-11-07T06:14:21Z", NotAfter: "2033-11-04T06:16:21Z" 2023-11-07T06:16:21.354967Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Intermediate CA - A2,O=Istio,L=cluster-A2", SN: 17f36ace6496ac2df88e15878610a0725bcf8ae9, NotBefore: "2023-11-04T01:40:22Z", NotAfter: "2033-11-01T01:40:22Z" 2023-11-07T06:16:21.355007Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Root A,O=Istio", SN: 18e2ee4089c5a7363ec306627d21d9bb212bed3e, NotBefore: "2023-11-04T01:38:27Z", NotAfter: "2033-11-01T01:38:27Z" 2023-11-07T06:16:21.355012Z info Istiod certificates are reloaded
Úlohy přijímají certifikáty z řídicí roviny Istio, které jsou ve výchozím nastavení platné po dobu 24 hodin. Pokud pody nerestartujete, všechny úlohy získávají nové listové certifikáty založené na nové zprostředkující certifikační autoritě za 24 hodin. Pokud chcete vynutit, aby všechny tyto úlohy získaly nové listové certifikáty hned od nové zprostředkující certifikační autority, musíte úlohy restartovat.
kubectl rollout restart deployment <deployment name> -n <deployment namespace>
Obměně kořenové certifikační autority
Tajné kódy služby Azure Key Vault je potřeba aktualizovat pomocí kořenového souboru certifikátu se zřetězením starých a nových kořenových certifikátů:
az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem> az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path/cert-chain.pem>
root-cert.pem
Obsah tohoto formátu:-----BEGIN CERTIFICATE----- <contents of old root certificate> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <contents of new root certificate> -----END CERTIFICATE-----
Doplněk zahrnuje
CronJob
spuštění každých deset minut v clusteru a kontroluje aktualizace kořenového certifikátu. Pokud zjistí aktualizaci, restartuje řídicí rovinu Istio (istiod
nasazení) a vyzvedne aktualizace. Můžete zkontrolovat jeho protokoly a ověřit, že byla zjištěna aktualizace kořenového certifikátu a že se řídicí rovina Istio restartovala:kubectl logs -n aks-istio-system $(kubectl get pods -n aks-istio-system | grep 'istio-cert-validator-cronjob-' | sort -k8 | tail -n 1 | awk '{print $1}')
Očekávaný výstup:
Root certificate update detected. Restarting deployment... deployment.apps/istiod-asm-1-17 restarted Deployment istiod-asm-1-17 restarted.
Po
istiod
restartování by mělo být uvedeno, že do domény důvěryhodnosti byly přidány dva certifikáty:kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system
Očekávaný výstup:
2023-11-07T06:42:00.287916Z info Using istiod file format for signing ca files 2023-11-07T06:42:00.287928Z info Use plugged-in cert at etc/cacerts/ca-key.pem 2023-11-07T06:42:00.288254Z info x509 cert - Issuer: "CN=Intermediate CA - A2,O=Istio,L=cluster-A2", Subject: "", SN: 286451ca8ff7bf9e6696f56bef829d42, NotBefore: "2023-11-07T06:40:00Z", NotAfter: "2033-11-04T06:42:00Z" 2023-11-07T06:42:00.288279Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Intermediate CA - A2,O=Istio,L=cluster-A2", SN: 17f36ace6496ac2df88e15878610a0725bcf8ae9, NotBefore: "2023-11-04T01:40:22Z", NotAfter: "2033-11-01T01:40:22Z" 2023-11-07T06:42:00.288298Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Root A,O=Istio", SN: 18e2ee4089c5a7363ec306627d21d9bb212bed3e, NotBefore: "2023-11-04T01:38:27Z", NotAfter: "2033-11-01T01:38:27Z" 2023-11-07T06:42:00.288303Z info Istiod certificates are reloaded 2023-11-07T06:42:00.288365Z info spiffe Added 2 certs to trust domain cluster.local in peer cert verifier
Musíte buď počkat na 24 hodin (výchozí čas platnosti certifikátu typu list), nebo vynutit restartování všech úloh. Díky tomu všechny úlohy rozpoznávají staré i nové certifikační autority pro ověřování mTLS.
kubectl rollout restart deployment <deployment name> -n <deployment namespace>
Tajné kódy služby Azure Key Vault teď můžete aktualizovat jenom pomocí nové certifikační autority (bez staré certifikační autority):
az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem> az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path/cert-chain.pem>
Zkontrolujte protokoly a ověřte detekci aktualizace kořenového
CronJob
certifikátu a restartováníistiod
:kubectl logs -n aks-istio-system $(kubectl get pods -n aks-istio-system | grep 'istio-cert-validator-cronjob-' | sort -k8 | tail -n 1 | awk '{print $1}')
Očekávaný výstup:
Root certificate update detected. Restarting deployment... deployment.apps/istiod-asm-1-17 restarted Deployment istiod-asm-1-17 restarted.
Po
istiod
aktualizaci by se mělo potvrdit pouze použití nové kořenové certifikační autority:kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController
Očekávaný výstup:
2023-11-07T08:01:17.780299Z info x509 cert - Issuer: "CN=Intermediate CA - B1,O=Istio,L=cluster-B1", Subject: "", SN: 1159747c72cc7ac7a54880cd49b8df0a, NotBefore: "2023-11-07T07:59:17Z", NotAfter: "2033-11-04T08:01:17Z" 2023-11-07T08:01:17.780330Z info x509 cert - Issuer: "CN=Root B,O=Istio", Subject: "CN=Intermediate CA - B1,O=Istio,L=cluster-B1", SN: 2aba0c438652a1f9beae4249457023013948c7e2, NotBefore: "2023-11-04T01:42:12Z", NotAfter: "2033-11-01T01:42:12Z" 2023-11-07T08:01:17.780345Z info x509 cert - Issuer: "CN=Root B,O=Istio", Subject: "CN=Root B,O=Istio", SN: 3f9da6ddc4cb03749c3f43243a4b701ce5eb4e96, NotBefore: "2023-11-04T01:41:54Z", NotAfter: "2033-11-01T01:41:54Z"
Z ukázkových výstupů uvedených v tomto článku si můžete všimnout, že jsme přešli z kořene A (používá se při povolování doplňku) do kořenového adresáře B.
Můžete buď znovu počkat na 24 hodin, nebo vynutit restartování všech úloh. Vynucení restartování získají nové listové certifikáty od nové kořenové certifikační autority okamžitě.
kubectl rollout restart deployment <deployment name> -n <deployment namespace>
Azure Kubernetes Service