Nastavení vlastního názvu domény a certifikátu SSL pomocí doplňku pro směrování aplikací
Příchozí přenos dat je objekt rozhraní API, který definuje pravidla, která umožňují externí přístup ke službám v clusteru Azure Kubernetes Service (AKS). Když vytvoříte objekt příchozího přenosu dat, který používá doplňky nginx ingress směrování aplikace, doplněk vytvoří, nakonfiguruje a spravuje jeden nebo více kontrolerů příchozího přenosu dat v clusteru AKS.
V tomto článku se dozvíte, jak nastavit pokročilou konfiguraci příchozího přenosu dat pro šifrování provozu pomocí certifikátů SSL/TLS uložených ve službě Azure Key Vault a použití Azure DNS ke správě zón DNS.
Doplněk směrování aplikací s funkcemi nginx
Doplněk pro směrování aplikací s nginx poskytuje následující:
- Snadná konfigurace spravovaných kontrolerů příchozího přenosu dat nginx
- Integrace s externím DNS, jako je Azure DNS pro globální a privátní správu zón
- Ukončení protokolu SSL s certifikáty uloženými v trezoru klíčů, jako je Azure Key Vault.
Požadavky
- Cluster AKS s doplňkem pro směrování aplikací.
- Azure Key Vault, pokud chcete nakonfigurovat ukončení protokolu SSL a uložit certifikáty v trezoru hostované v Azure.
- Azure DNS, pokud chcete nakonfigurovat globální a privátní správu zón a hostovat je v Azure.
- K připojení služby Azure Key Vault nebo zóny Azure DNS potřebujete roli vlastníka, správce účtu Azure nebo spolusprávce Azure ve vašem předplatném Azure.
- Všechny veřejné zóny DNS musí být ve stejném předplatném a skupině prostředků.
Připojení ke clusteru AKS
Pokud se chcete připojit ke clusteru Kubernetes z místního počítače, použijte kubectl
klienta příkazového řádku Kubernetes. Můžete ho nainstalovat místně pomocí příkazu az aks install-cli . Pokud používáte Azure Cloud Shell, kubectl
je už nainstalovaný.
Pomocí příkazu nakonfigurujte kubectl pro připojení ke clusteru az aks get-credentials
Kubernetes.
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
Ukončení provozu HTTPS pomocí certifikátů ze služby Azure Key Vault
Pokud chcete povolit podporu provozu HTTPS, projděte si následující požadavky:
- Certifikát SSL. Pokud ho nemáte, můžete vytvořit certifikát.
Vytvoření služby Azure Key Vault pro uložení certifikátu
Poznámka:
Pokud už službu Azure Key Vault máte, můžete tento krok přeskočit.
Pomocí příkazu vytvořte službu Azure Key Vault az keyvault create
.
az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true
Vytvoření a export certifikátu SSL podepsaného svým držitelem
K testování můžete místo certifikátu podepsaného certifikační autoritou (CA) použít veřejný certifikát podepsaný svým držitelem. Pokud už certifikát máte, můžete tento krok přeskočit.
Upozornění
Certifikáty podepsané svým držitelem jsou digitální certifikáty, které nejsou podepsané důvěryhodnou certifikační autoritou třetí strany. Certifikáty podepsané svým držitelem jsou vytvořeny, vystaveny a podepsány společností nebo vývojářem, kteří jsou zodpovědní za podepsání webu nebo softwaru. Proto jsou certifikáty podepsané svým držitelem považovány za nebezpečné pro veřejně přístupné weby a aplikace. Azure Key Vault má důvěryhodné partnerství s některými certifikačními autoritami.
Vytvořte certifikát SSL podepsaný svým držitelem, který se použije s příchozím přenosem dat pomocí
openssl req
příkazu. Nezapomeňte nahradit<Hostname>
názvem DNS, který používáte.openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
Pomocí příkazu vyexportujte certifikát SSL a přeskočte výzvu k
openssl pkcs12 -export
zadání hesla.openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
Import certifikátu do služby Azure Key Vault
Importujte certifikát SSL do služby Azure Key Vault pomocí az keyvault certificate import
příkazu. Pokud je certifikát chráněný heslem, můžete ho předat příznakem --password
.
az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]
Důležité
Pokud chcete doplněk povolit opětovné načtení certifikátů ze služby Azure Key Vault při jejich změně, měli byste povolit funkci automatického zápisu tajných kódů ovladače CSI úložiště tajných kódů s argumentem --enable-secret-rotation
. Když je povolená automatická operace, ovladač aktualizuje připojení podu a tajný kód Kubernetes pravidelným dotazováním změn na základě vámi definovaného intervalu dotazování na obměny. Výchozí interval hlasování o obměně je dva minuty.
Povolení integrace služby Azure Key Vault
V clusteru s povoleným doplňkem směrování aplikace použijte az aks approuting update
příkaz a --enable-kv
--attach-kv
argumenty, abyste povolili zprostředkovatele služby Azure Key Vault pro ovladač CSI úložiště tajných kódů a použili požadovaná přiřazení rolí.
Azure Key Vault nabízí dva systémy autorizace: řízení přístupu na základě role v Azure (Azure RBAC), které funguje v rovině správy, a model zásad přístupu, který funguje v rovině správy i v rovině dat. Operace --attach-kv
zvolí vhodný přístupový model, který se má použít.
Poznámka:
Tento az aks approuting update --attach-kv
příkaz používá oprávnění uživatele, který příkaz spouští, k vytvoření přiřazení role služby Azure Key Vault. Tato role se přiřadí ke spravované identitě doplňku. Další informace o spravovaných identitách AKS najdete v souhrnu spravovaných identit.
Načtěte ID prostředku služby Azure Key Vault.
KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)
Potom aktualizujte doplněk pro směrování aplikace, aby se povolil ovladač CSI úložiště tajných kódů služby Azure Key Vault a použil přiřazení role.
az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}
Povolení integrace Azure DNS
Pokud chcete povolit podporu zón DNS, projděte si následující požadavky:
- Doplněk pro směrování aplikací je možné nakonfigurovat tak, aby automaticky vytvářel záznamy v jedné nebo více globálních a privátních zónách DNS Azure pro hostitele definované v prostředcích příchozího přenosu dat. Všechny globální zóny Azure DNS musí být ve stejné skupině prostředků a všechny privátní zóny Azure DNS musí být ve stejné skupině prostředků. Pokud nemáte zónu Azure DNS, můžete ji vytvořit.
Vytvoření veřejné zóny Azure DNS
Poznámka:
Pokud už máte zónu Azure DNS, můžete tento krok přeskočit.
Pomocí příkazu vytvořte zónu
az network dns zone create
Azure DNS.az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
Připojení zóny Azure DNS k doplňku pro směrování aplikací
Poznámka:
Tento az aks approuting zone add
příkaz používá oprávnění uživatele, který příkaz spouští, k vytvoření přiřazení role zóny Azure DNS. Tato role se přiřadí ke spravované identitě doplňku. Další informace o spravovaných identitách AKS najdete v souhrnu spravovaných identit.
Pomocí příkazu načtěte ID prostředku zóny
az network dns zone show
DNS a nastavte výstup na proměnnou s názvem ZONEID.ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
Aktualizujte doplněk, abyste pomocí příkazu povolili integraci s Azure DNS
az aks approuting zone
. Můžete předat čárkami oddělený seznam ID prostředků zóny DNS.az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
Vytvoření příchozího přenosu dat, který používá název hostitele a certifikát ze služby Azure Key Vault
Doplněk směrování aplikace vytvoří třídu příchozího přenosu dat v clusteru s názvem webapprouting.kubernetes.azure.com. Když vytvoříte objekt Ingress s touto třídou, aktivuje doplněk.
Pomocí příkazu získejte identifikátor URI certifikátu, který se použije v příchozím přenosu dat ze služby Azure Key Vault
az keyvault certificate show
.az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
Následující příklad výstupu ukazuje identifikátor URI certifikátu vrácený příkazem:
https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
Zkopírujte následující manifest YAML do nového souboru s názvem ingress.yaml a uložte ho do místního počítače.
Aktualizujte
<Hostname>
název hostitele DNS a<KeyVaultCertificateUri>
pomocí identifikátoru URI vráceného příkazem za účelem dotazování služby Azure Key Vault v kroku 1 výše. Hodnota řetězce by*<KeyVaultCertificateUri>*
měla obsahovathttps://yourkeyvault.vault.azure.net/certificates/certname
pouze . Verze certifikátu na konci řetězce identifikátoru URI by měla být vynechána, aby se získala aktuální verze.Klíč
secretName
vtls
části definuje název tajného klíče, který obsahuje certifikát pro tento prostředek příchozího přenosu dat. Tento certifikát se zobrazí v prohlížeči, když klient přejde na adresu URL zadanou v klíči<Hostname>
. Ujistěte se, že hodnotasecretName
je rovnakeyvault-
hodnotě, za kterou následuje název prostředku příchozího přenosu dat (zmetadata.name
). V příkladu YAMLsecretName
musí být rovnokeyvault-<your Ingress name>
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.azure.com/tls-cert-keyvault-uri: <KeyVaultCertificateUri> name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <Hostname> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix tls: - hosts: - <Hostname> secretName: keyvault-<your ingress name>
Pomocí příkazu vytvořte prostředky clusteru
kubectl apply
.kubectl apply -f ingress.yaml -n hello-web-app-routing
Následující příklad výstupu ukazuje vytvořený prostředek:
Ingress.networking.k8s.io/aks-helloworld created
Ověření vytvoření spravovaného příchozího přenosu dat
Spravovaný příchozí přenos dat můžete ověřit pomocí kubectl get ingress
příkazu.
kubectl get ingress -n hello-web-app-routing
Následující příklad výstupu ukazuje vytvořený spravovaný příchozí přenos dat:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Další kroky
Seznamte se s monitorováním metrik kontroleru Ingress-nginx, které jsou součástí doplňku směrování aplikací pomocí nástroje Prometheus v Grafana , a to v rámci analýzy výkonu a využití vaší aplikace.
Azure Kubernetes Service