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 kubectlklienta 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:

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.

  1. 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>"
    
  2. 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.

  1. 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.

  1. 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)
    
  2. 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.

  1. 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
    
  2. 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 obsahovat https://yourkeyvault.vault.azure.net/certificates/certnamepouze . 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 v tls čá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 hodnota secretName je rovna keyvault- hodnotě, za kterou následuje název prostředku příchozího přenosu dat (z metadata.name). V příkladu YAML secretName musí být rovno keyvault-<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>
    
  3. 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.