Share via


Een aangepaste domeinnaam en SSL-certificaat instellen met de invoegtoepassing voor toepassingsroutering

Een toegangsbeheerobject is een API-object dat regels definieert, waardoor externe toegang tot services in een AKS-cluster (Azure Kubernetes Service) is toegestaan. Wanneer u een inkomend object maakt dat gebruikmaakt van de invoegtoepassing voor toepassingsroutering nginx Inkomend verkeer, maakt, configureert en beheert de invoegtoepassing een of meer ingangscontrollers in uw AKS-cluster.

In dit artikel leest u hoe u een geavanceerde configuratie voor inkomend verkeer instelt om het verkeer te versleutelen met SSL/TLS-certificaten die zijn opgeslagen in een Azure Key Vault en Hoe u Azure DNS gebruikt om DNS-zones te beheren.

Invoegtoepassing voor toepassingsroutering met nginx-functies

De invoegtoepassing voor toepassingsroutering met nginx levert het volgende:

  • Eenvoudige configuratie van beheerde nginx-ingangscontrollers.
  • Integratie met een externe DNS, zoals Azure DNS voor globaal en privézonebeheer
  • SSL-beëindiging met certificaten die zijn opgeslagen in een sleutelkluis, zoals Azure Key Vault.

Vereisten

  • Een AKS-cluster met de invoegtoepassing voor toepassingsroutering.
  • Azure Key Vault als u SSL-beëindiging wilt configureren en certificaten wilt opslaan in de kluis die wordt gehost in Azure.
  • Azure DNS als u globaal en privézonebeheer wilt configureren en deze in Azure wilt hosten.
  • Als u een Azure Key Vault of Azure DNS-zone wilt koppelen, hebt u de rol Eigenaar, Azure-accountbeheerder of Co-beheerder van Azure nodig voor uw Azure-abonnement.

Verbinding maken naar uw AKS-cluster

Als u vanaf uw lokale computer verbinding wilt maken met het Kubernetes-cluster, gebruikt kubectlu de Kubernetes-opdrachtregelclient. U kunt deze lokaal installeren met behulp van de opdracht az aks install-cli . Als u Azure Cloud Shell gebruikt, is kubectl al geïnstalleerd.

Configureer kubectl om verbinding te maken met uw Kubernetes-cluster met behulp van de az aks get-credentials opdracht.

az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>

HTTPS-verkeer beëindigen met certificaten van Azure Key Vault

Als u ondersteuning voor HTTPS-verkeer wilt inschakelen, raadpleegt u de volgende vereisten:

  • Een SSL-certificaat. Als u nog geen certificaat hebt, kunt u een certificaat maken.

Een Azure Key Vault maken om het certificaat op te slaan

Notitie

Als u al een Azure Key Vault hebt, kunt u deze stap overslaan.

Maak een Azure Key Vault met behulp van de az keyvault create opdracht.

az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true

Een zelfondertekend SSL-certificaat maken en exporteren

Voor testen kunt u een zelfondertekend openbaar certificaat gebruiken in plaats van een certificaat dat is ondertekend met een certificeringsinstantie (CA). Als u al een certificaat hebt, kunt u deze stap overslaan.

Let op

Zelfondertekende certificaten zijn digitale certificaten die niet zijn ondertekend door een vertrouwde certificeringsinstantie van derden. Zelfondertekende certificaten worden gemaakt, uitgegeven en ondertekend door het bedrijf of de ontwikkelaar die verantwoordelijk is voor de website of software die wordt ondertekend. Daarom worden zelfondertekende certificaten als onveilig beschouwd voor openbare websites en toepassingen. Azure Key Vault heeft een vertrouwde samenwerking met de enkele certificeringsinstanties.

  1. Maak een zelfondertekend SSL-certificaat voor gebruik met het toegangsbeheerobject met behulp van de openssl req opdracht. Zorg ervoor dat u vervangt door <Hostname> de DNS-naam die u gebruikt.

    openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
    
  2. Exporteer het SSL-certificaat en sla de wachtwoordprompt over met behulp van de openssl pkcs12 -export opdracht.

    openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
    

Certificaat importeren in Azure Key Vault

Importeer het SSL-certificaat in Azure Key Vault met behulp van de az keyvault certificate import opdracht. Als uw certificaat is beveiligd met een wachtwoord, kunt u het wachtwoord doorgeven via de --password vlag.

az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]

Belangrijk

Als u de invoegtoepassing wilt inschakelen voor het opnieuw laden van certificaten uit Azure Key Vault wanneer deze worden gewijzigd, moet u de functie voor automatischerotatie van het geheimarchief-CSI-stuurprogramma inschakelen met het --enable-secret-rotation argument. Wanneer automatischerotatie is ingeschakeld, werkt het stuurprogramma de podkoppeling en het Kubernetes-geheim bij door periodiek te peilen naar wijzigingen, op basis van het rotatiepollinterval dat u definieert. Het standaardinterval voor rotatiepeiling is twee minuten.

Integratie van Azure Key Vault inschakelen

Gebruik op een cluster waarvoor de invoegtoepassing voor toepassingsroutering is ingeschakeld de az aks approuting update opdracht --enable-kv en --attach-kv argumenten om de Azure Key Vault-provider in te schakelen voor het stuurprogramma Secrets Store CSI en de vereiste roltoewijzingen toe te passen.

Azure Key Vault biedt twee autorisatiesystemen: op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC), dat op het beheervlak werkt en het toegangsbeleidsmodel, dat zowel op het beheervlak als op het gegevensvlak werkt. De --attach-kv bewerking kiest het juiste toegangsmodel dat moet worden gebruikt.

Notitie

De az aks approuting update --attach-kv opdracht gebruikt de machtigingen van de gebruiker die de opdracht uitvoert om de Azure Key Vault-roltoewijzing te maken. Deze rol wordt toegewezen aan de beheerde identiteit van de invoegtoepassing. Zie Samenvatting van beheerde identiteiten in AKS voor meer informatie over beheerde AKS-identiteiten.

Haal de Resource-id van Azure Key Vault op.

KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)

Werk vervolgens de invoegtoepassing voor app-routering bij om het CSI-stuurprogramma voor het geheimarchief van Azure Key Vault in te schakelen en de roltoewijzing toe te passen.

az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}

Azure DNS-integratie inschakelen

Als u ondersteuning voor DNS-zones wilt inschakelen, controleert u de volgende vereisten:

  • De invoegtoepassing voor app-routering kan worden geconfigureerd om automatisch records te maken in een of meer globale en privé-DNS-zones van Azure voor hosts die zijn gedefinieerd op toegangsbeheerresources. Alle globale Azure DNS-zones moeten zich in dezelfde resourcegroep bevinden en alle privé-Azure DNS-zones moeten zich in dezelfde resourcegroep bevinden. Als u geen Azure DNS-zone hebt, kunt u er een maken.

Een openbare Azure DNS-zone maken

Notitie

Als u al een Azure DNS-zone hebt, kunt u deze stap overslaan.

  1. Maak een Azure DNS-zone met behulp van de az network dns zone create opdracht.

    az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
    

Azure DNS-zone koppelen aan de invoegtoepassing voor toepassingsroutering

Notitie

De az aks approuting zone add opdracht gebruikt de machtigingen van de gebruiker die de opdracht uitvoert om de azure DNS-zoneroltoewijzing te maken. Deze rol wordt toegewezen aan de beheerde identiteit van de invoegtoepassing. Zie Samenvatting van beheerde identiteiten in AKS voor meer informatie over beheerde AKS-identiteiten.

  1. Haal de resource-id voor de DNS-zone op met behulp van de az network dns zone show opdracht en stel de uitvoer in op een variabele met de naam ZONEID.

    ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
    
  2. Werk de invoegtoepassing bij om de integratie met Azure DNS in te schakelen met behulp van de az aks approuting zone opdracht. U kunt een door komma's gescheiden lijst met resource-id's voor DNS-zone doorgeven.

    az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
    

Het toegangsbeheerobject maken dat gebruikmaakt van een hostnaam en een certificaat van Azure Key Vault

De invoegtoepassing voor toepassingsroutering maakt een toegangsbeheerobjectklasse op het cluster met de naam webapprouting.kubernetes.azure.com. Wanneer u een inkomend object met deze klasse maakt, wordt de invoegtoepassing geactiveerd.

  1. Haal de certificaat-URI op die moet worden gebruikt in het toegangsbeheerobject van Azure Key Vault met behulp van de az keyvault certificate show opdracht.

    az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
    

    In de volgende voorbeelduitvoer ziet u de certificaat-URI die is geretourneerd door de opdracht:

    https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
    
  2. Kopieer het volgende YAML-manifest naar een nieuw bestand met de naam ingress.yaml en sla het bestand op uw lokale computer op.

    Werk <Hostname> bij met de naam van uw DNS-host en <KeyVaultCertificateUri> met de URI die is geretourneerd vanuit de opdracht om een query uit te voeren op Azure Key Vault in stap 1 hierboven. De tekenreekswaarde waarvoor *<KeyVaultCertificateUri>* moet alleen worden opgenomen https://yourkeyvault.vault.azure.net/certificates/certname. De certificaatversie aan het einde van de URI-tekenreeks moet worden weggelaten om de huidige versie op te halen.

    De secretName sleutel in de tls sectie definieert de naam van het geheim dat het certificaat voor deze toegangsbeheerresource bevat. Dit certificaat wordt weergegeven in de browser wanneer een client naar de URL bladert die is opgegeven in de <Hostname> sleutel. Zorg ervoor dat de waarde secretName gelijk is aan keyvault- gevolgd door de waarde van de resourcenaam voor inkomend verkeer (van metadata.name). In het voorbeeld van YAML secretName moet deze gelijk zijn aan 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. Maak de clusterbronnen met behulp van de kubectl apply opdracht.

    kubectl apply -f ingress.yaml -n hello-web-app-routing
    

    In de volgende voorbeelduitvoer ziet u de gemaakte resource:

    Ingress.networking.k8s.io/aks-helloworld created
    

Controleren of het beheerde inkomend verkeer is gemaakt

U kunt controleren of het beheerde inkomend verkeer is gemaakt met behulp van de kubectl get ingress opdracht.

kubectl get ingress -n hello-web-app-routing

In de volgende voorbeelduitvoer ziet u het gemaakte beheerde inkomend verkeer:

NAME             CLASS                                HOSTS               ADDRESS       PORTS     AGE
aks-helloworld   webapprouting.kubernetes.azure.com   myapp.contoso.com   20.51.92.19   80, 443   4m

Volgende stappen

Meer informatie over het bewaken van de metrische gegevens voor inkomend-nginx-controller die zijn opgenomen in de invoegtoepassing voor toepassingsroutering met Prometheus in Grafana als onderdeel van het analyseren van de prestaties en het gebruik van uw toepassing.