Dela via


Konfigurera ett anpassat domännamn och SSL-certifikat med tillägget för programroutning

En ingress är ett API-objekt som definierar regler som tillåter extern åtkomst till tjänster i ett AkS-kluster (Azure Kubernetes Service). När du skapar ett inkommande objekt som använder tilläggsklasserna för programdirigering av nginx-ingress skapar, konfigurerar och hanterar tillägget en eller flera ingresskontrollanter i AKS-klustret.

Den här artikeln visar hur du konfigurerar en avancerad ingresskonfiguration för att kryptera trafiken med SSL/TLS-certifikat som lagras i ett Azure Key Vault och använder Azure DNS för att hantera DNS-zoner.

Tillägg för programroutning med nginx-funktioner

Tillägget för programroutning med nginx levererar följande:

  • Enkel konfiguration av hanterade nginx-ingresskontrollanter.
  • Integrering med en extern DNS, till exempel Azure DNS för global och privat zonhantering
  • SSL-avslutning med certifikat som lagras i ett nyckelvalv, till exempel Azure Key Vault.

Förutsättningar

  • Ett AKS-kluster med tillägget för programdirigering.
  • Azure Key Vault om du vill konfigurera SSL-avslutning och lagra certifikat i valvet som finns i Azure.
  • Azure DNS om du vill konfigurera global och privat zonhantering och vara värd för dem i Azure.
  • Om du vill koppla ett Azure Key Vault- eller Azure DNS-zon behöver du rollen Ägare, Azure-kontoadministratör eller Azure-medadministratör i din Azure-prenumeration.
  • Alla offentliga DNS-zoner måste finnas i samma prenumeration och resursgrupp.

Ansluta till ditt AKS-kluster

Om du vill ansluta till Kubernetes-klustret från den lokala datorn använder kubectldu kubernetes-kommandoradsklienten. Du kan installera den lokalt med kommandot az aks install-cli . Om du använder Azure Cloud Shell är kubectl redan installerat.

Konfigurera kubectl för att ansluta till ditt Kubernetes-kluster med hjälp av az aks get-credentials kommandot .

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

Avsluta HTTPS-trafik med certifikat från Azure Key Vault

Information om hur du aktiverar stöd för HTTPS-trafik finns i följande krav:

Skapa ett Azure Key Vault för att lagra certifikatet

Kommentar

Om du redan har ett Azure Key Vault kan du hoppa över det här steget.

Skapa ett Azure Key Vault med kommandot az keyvault create .

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

Skapa och exportera ett självsignerat SSL-certifikat

För testning kan du använda ett självsignerat offentligt certifikat i stället för ett certifikatutfärdare (CA)-signerat certifikat. Om du redan har ett certifikat kan du hoppa över det här steget.

Varning

Självsignerade certifikat är digitala certifikat som inte är signerade av en betrodd certifikatutfärdare från tredje part. Självsignerade certifikat skapas, utfärdas och signeras av företaget eller utvecklaren som ansvarar för att webbplatsen eller programvaran signeras. Därför anses självsignerade certifikat vara osäkra för offentliga webbplatser och program. Azure Key Vault har ett betrott samarbete med vissa certifikatutfärdare.

  1. Skapa ett självsignerat SSL-certifikat som ska användas med ingressen openssl req med kommandot . Se till att du ersätter <Hostname> med det DNS-namn som du använder.

    openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
    
  2. Exportera SSL-certifikatet och hoppa över lösenordsprompten openssl pkcs12 -export med kommandot .

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

Importera certifikat till Azure Key Vault

Importera SSL-certifikatet till Azure Key Vault med hjälp av az keyvault certificate import kommandot . Om certifikatet är lösenordsskyddat kan du skicka lösenordet via --password flaggan.

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

Viktigt!

Om du vill aktivera tillägget för att läsa in certifikat från Azure Key Vault igen när de ändras bör du aktivera funktionen för hemlig autorotation i CSI-drivrutinen för Secret Store med --enable-secret-rotation argumentet . När autorotation är aktiverat uppdaterar drivrutinen poddmonteringen och Kubernetes-hemligheten genom att söka efter ändringar regelbundet, baserat på det rotationsmätningsintervall som du definierar. Standardintervallet för rotationsmätning är två minuter.

Aktivera Azure Key Vault-integrering

I ett kluster med tillägget programroutning aktiverat använder du az aks approuting update kommandot med argumenten --enable-kv och --attach-kv för att aktivera Azure Key Vault-providern för Secrets Store CSI-drivrutinen och tillämpa de rolltilldelningar som krävs.

Azure Key Vault erbjuder två auktoriseringssystem: Rollbaserad åtkomstkontroll i Azure (Azure RBAC) som körs på hanteringsplanet och åtkomstprincipmodellen, som fungerar på både hanteringsplanet och dataplanet. Åtgärden --attach-kv väljer den åtkomstmodell som ska användas.

Kommentar

Kommandot az aks approuting update --attach-kv använder behörigheterna för användaren som kör kommandot för att skapa rolltilldelningen för Azure Key Vault. Den här rollen tilldelas till tilläggets hanterade identitet. Mer information om AKS-hanterade identiteter finns i Sammanfattning av hanterade identiteter.

Hämta resurs-ID:t för Azure Key Vault.

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

Uppdatera sedan tillägget för appdirigering för att aktivera CSI-drivrutinen för Azure Key Vault-hemlighetsarkivet och tillämpa rolltilldelningen.

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

Aktivera Azure DNS-integrering

Om du vill aktivera stöd för DNS-zoner läser du följande krav:

  • Appdirigeringstillägget kan konfigureras för att automatiskt skapa poster i en eller flera globala Och privata DNS-zoner i Azure för värdar som definierats för inkommande resurser. Alla globala Azure DNS-zoner måste finnas i samma resursgrupp och alla privata Azure DNS-zoner måste finnas i samma resursgrupp. Om du inte har en Azure DNS-zon kan du skapa en.

Skapa en offentlig Azure DNS-zon

Kommentar

Om du redan har en Azure DNS-zon kan du hoppa över det här steget.

  1. Skapa en Azure DNS-zon med kommandot az network dns zone create .

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

Koppla Azure DNS-zonen till tillägget för programroutning

Kommentar

Kommandot az aks approuting zone add använder behörigheterna för användaren som kör kommandot för att skapa rolltilldelningen i Azure DNS-zonen. Den här rollen tilldelas till tilläggets hanterade identitet. Mer information om AKS-hanterade identiteter finns i Sammanfattning av hanterade identiteter.

  1. Hämta resurs-ID:t för DNS-zonen med kommandot az network dns zone show och ange utdata till en variabel med namnet ZONEID.

    ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
    
  2. Uppdatera tillägget för att aktivera integrering med Azure DNS med hjälp av az aks approuting zone kommandot . Du kan skicka en kommaavgränsad lista över RESURS-ID:t för DNS-zonen.

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

Skapa den ingress som använder ett värdnamn och ett certifikat från Azure Key Vault

Tillägget för programroutning skapar en Ingress-klass i klustret med namnet webapprouting.kubernetes.azure.com. När du skapar ett ingressobjekt med den här klassen aktiveras tillägget.

  1. Hämta certifikat-URI:n som ska användas i ingressen från Azure Key Vault med hjälp av az keyvault certificate show kommandot .

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

    Följande exempelutdata visar certifikat-URI:n som returneras från kommandot:

    https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
    
  2. Kopiera följande YAML-manifest till en ny fil med namnet ingress.yaml och spara filen på den lokala datorn.

    Uppdatera <Hostname> med namnet på DNS-värden och <KeyVaultCertificateUri> med den URI som returneras från kommandot för att fråga Azure Key Vault i steg 1 ovan. Strängvärdet för *<KeyVaultCertificateUri>* ska endast innehålla https://yourkeyvault.vault.azure.net/certificates/certname. Certifikatversionen i slutet av URI-strängen bör utelämnas för att hämta den aktuella versionen.

    Nyckeln secretName i avsnittet tls definierar namnet på hemligheten som innehåller certifikatet för den här ingressresursen. Det här certifikatet visas i webbläsaren när en klient bläddrar till den URL som anges i <Hostname> nyckeln. Kontrollera att värdet secretName för är lika keyvault- med följt av värdet för resursnamnet Ingress (från metadata.name). I yaml-exemplet secretName måste vara lika med 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. Skapa klusterresurserna kubectl apply med kommandot .

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

    Följande exempelutdata visar den skapade resursen:

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

Kontrollera att den hanterade ingressen har skapats

Du kan kontrollera att den hanterade ingressen har skapats med hjälp av kubectl get ingress kommandot .

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

Följande exempelutdata visar den skapade hanterade ingressen:

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

Nästa steg

Lär dig mer om övervakning av ingress-nginx-kontrollantmått som ingår i tillägget för programroutning med Prometheus i Grafana som en del av analysen av programmets prestanda och användning.