Udostępnij przez


Konfigurowanie niestandardowej nazwy domeny i certyfikatu SSL przy użyciu dodatku routingu aplikacji dla usługi Azure Kubernetes Service (AKS)

W tym artykule pokazano, jak skonfigurować niestandardowe nazwy domen i certyfikaty SSL/TLS dla ruchu przychodzącego usługi AKS przy użyciu usługi Azure Key Vault i usługi Azure DNS z dodatkiem routingu aplikacji dla usługi AKS.

Prerequisites

  • Klaster usługi AKS z dodatkiem routingu aplikacji.

  • Azure Key Vault, jeśli chcesz skonfigurować zakończenie SSL i przechowywać certyfikaty w skarbcu hostowanym na platformie Azure. Jeśli go nie masz, zobacz Tworzenie magazynu kluczy przy użyciu interfejsu wiersza polecenia platformy Azure.

  • Aby włączyć obsługę ruchu HTTPS, potrzebny jest certyfikat SSL. Jeśli go nie masz, zobacz Tworzenie certyfikatu.

  • Usługa Azure DNS, jeśli chcesz skonfigurować zarządzanie strefami globalnymi i prywatnymi i hostować je na platformie Azure. Jeśli nie masz strefy usługi Azure DNS, możesz je utworzyć. Aby włączyć obsługę stref DNS:

    • Wszystkie globalne strefy DNS platformy Azure muszą znajdować się w tej samej grupie zasobów, która może być inna niż grupa zasobów klastra.
    • Wszystkie prywatne strefy DNS platformy Azure muszą znajdować się w tej samej grupie zasobów, co może różnić się od grupy zasobów klastra.
    • Grupa zasobów nie musi znajdować się w tej samej subskrypcji co klaster.

Wymagane uprawnienia platformy Azure

Twoje konto użytkownika wymaga: właściciela, administratora konta platformy Azure lub roli współadministratora platformy Azure w ramach subskrypcji platformy Azure.

Co robią polecenia: Po uruchomieniu az aks approuting update --attach-kv lub az aks approuting zone add --attach-zones, polecenia te używają uprawnień do przypisywania ról, aby automatycznie przyznać zarządzaną tożsamość dodatku routingu aplikacji następujące role:

  • Rola użytkownika certyfikatu usługi Key Vault w usłudze Azure Key Vault (na potrzeby dostępu do certyfikatów).
  • Rola Współautor strefy DNS w strefach usługi Azure DNS (na potrzeby zarządzania rekordami DNS).

Aby uzyskać więcej informacji na temat tożsamości zarządzanych usługi AKS, zobacz Podsumowanie tożsamości zarządzanych.

Nawiązywanie połączenia z klastrem usługi AKS

Aby nawiązać połączenie z klastrem Kubernetes z komputera lokalnego, należy użyć kubectlklienta wiersza polecenia kubernetes. Możesz zainstalować ją lokalnie przy użyciu az aks install-cli polecenia . Jeśli korzystasz z usługi Azure Cloud Shell, narzędzie kubectl jest już zainstalowane.

  • Skonfiguruj narzędzie kubectl, aby nawiązać połączenie z klastrem az aks get-credentials Kubernetes przy użyciu polecenia .

    # Set environment variables for your resource group and cluster name
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS cluster credentials
    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    

Tworzenie i eksportowanie certyfikatu SSL z podpisem własnym

Do testowania można użyć certyfikatu publicznego z podpisem własnym zamiast certyfikatu z podpisem urzędu certyfikacji. Jeśli masz już certyfikat, możesz pominąć ten krok.

Caution

Certyfikaty z podpisem własnym to certyfikaty cyfrowe, które nie są podpisane przez zaufany urząd certyfikacji innej firmy. Firma lub deweloper odpowiedzialny za witrynę internetową lub oprogramowanie tworzy, wystawia i podpisuje te certyfikaty. Dlatego certyfikaty z podpisem własnym są uważane za niebezpieczne dla publicznych witryn internetowych i aplikacji. Usługa Azure Key Vault ma zaufane partnerstwo z niektórymi urzędami certyfikacji.

  1. Utwórz certyfikat SSL z podpisem własnym do użycia z ingress, używając polecenia openssl req. Pamiętaj, aby zastąpić <host-name> nazwą DNS, której używasz.

    openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<host-name>" -addext "subjectAltName=DNS:<host-name>"
    
  2. Wyeksportuj certyfikat SSL i pomiń wiersz hasła przy użyciu openssl pkcs12 -export polecenia .

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

Importowanie certyfikatu SSL z podpisem własnym do usługi Azure Key Vault

  • Zaimportuj certyfikat SSL do usługi Azure Key Vault przy użyciu az keyvault certificate import polecenia . Jeśli certyfikat jest chroniony hasłem, możesz przekazać hasło za pomocą flagi --password .

    # Set environment variables for your key vault name and certificate name
    export KEY_VAULT_NAME=<key-vault-name>
    export KEY_VAULT_CERT_NAME=<key-vault-certificate-name>
    
    # Import the SSL certificate into Azure Key Vault
    az keyvault certificate import --vault-name $KEY_VAULT_NAME --name $KEY_VAULT_CERT_NAME --file aks-ingress-tls.pfx [--password <certificate password if specified>]
    

Note

Aby włączyć dodatek routingu aplikacji w celu ponownego ładowania certyfikatów z usługi Azure Key Vault podczas ich zmiany, należy włączyć funkcję autorotytacji wpisów tajnych sterownika CSI magazynu wpisów tajnych. Po włączeniu autorotacji sterownik aktualizuje montaż podu i sekret Kubernetes, sprawdzając zmiany poprzez sondowanie okresowo na podstawie zdefiniowanego interwału sondowania rotacji. Domyślny interwał sondowania rotacji to dwie minuty.

Włączanie integracji z usługą Azure Key Vault

Usługa Azure Key Vault oferuje dwa systemy autoryzacji: kontrola dostępu oparta na rolach (RBAC) platformy Azure, która działa na płaszczyźnie zarządzania oraz model zasad dostępu, który działa zarówno na płaszczyźnie zarządzania, jak i na płaszczyźnie danych. Operacja --attach-kv wybiera odpowiedni model dostępu do użycia.

  1. Pobierz identyfikator zasobu dla magazynu kluczy przy użyciu polecenia az keyvault show i ustaw dane wyjściowe jako zmienną środowiskową.

    KEY_VAULT_ID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)
    
  2. Zaktualizuj dodatek do routingu aplikacji, aby umożliwić działanie dostawcy usługi Azure Key Vault dla komponentu CSI Secrets Store Driver i zastosować wymagane przypisania ról, używając polecenia az aks approuting update z argumentami --enable-kv i --attach-kv.

    az aks approuting update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-kv --attach-kv ${KEY_VAULT_ID}
    

Tworzenie globalnej strefy DNS platformy Azure

Jeśli masz już strefę usługi Azure DNS, możesz pominąć ten krok.

  • Utwórz strefę usługi Azure DNS przy użyciu az network dns zone create polecenia .

    # Set environment variables for your resource group and DNS zone name
    export RESOURCE_GROUP=<resource-group-name>
    export ZONE_NAME=<zone-name>
    
    # Create the Azure DNS zone
    az network dns zone create --resource-group $RESOURCE_GROUP --name $ZONE_NAME
    

Włączanie integracji usługi Azure DNS

  1. Pobierz identyfikator zasobu dla strefy DNS przy użyciu az network dns zone show polecenia i ustaw dane wyjściowe na zmienną środowiskową.

    ZONE_ID=$(az network dns zone show --resource-group $RESOURCE_GROUP --name $ZONE_NAME --query "id" --output tsv)
    
  2. Zaktualizuj dodatek routingu aplikacji, aby włączyć integrację usługi Azure DNS przy użyciu az aks approuting zone polecenia . Można przekazać rozdzielaną przecinkami listę identyfikatorów zasobów strefy DNS.

    az aks approuting zone add --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --ids=${ZONE_ID} --attach-zones
    

Tworzenie klasy Ingress używającej nazwy hosta i certyfikatu z Azure Key Vault.

Dodatek routingu aplikacji tworzy klasę Ingress w klastrze o nazwie webapprouting.kubernetes.azure.com. Podczas tworzenia obiektu Ingress za pomocą tej klasy aktywowane jest rozszerzenie.

  1. Pobierz identyfikator URI certyfikatu do użycia w ingrezie z Azure Key Vault za pomocą polecenia az keyvault certificate show.

    az keyvault certificate show --vault-name $KEY_VAULT_NAME --name $KEY_VAULT_CERT_NAME --query "id" --output tsv
    

    Następujące przykładowe dane wyjściowe pokazują identyfikator URI certyfikatu zwrócony z polecenia :

    https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ab12c34567d89e01f2345g6h78ijkl90
    
  2. Skopiuj następujący manifest YAML do nowego pliku o nazwie ingress.yaml i zapisz plik na komputerze lokalnym.

    Zaktualizuj <host-name> nazwą hosta DNS i <key-vault-certificate-uri> adresem URI zwróconym z poprzedniego polecenia. Wartość ciągu dla <key-vault-certificate-uri> powinna zawierać tylko https://yourkeyvault.vault.azure.net/certificates/certname. Usuń wersję certyfikatu na końcu ciągu identyfikatora URI, aby pobrać bieżącą wersję.

    Klucz secretName w sekcji tls definiuje nazwę tajemnicy zawierającej certyfikat dla tego zasobu Ingress. Ten certyfikat jest wyświetlany w przeglądarce, gdy klient przechodzi do adresu URL określonego w kluczu <host-name> . Upewnij się, że wartość secretName jest równa keyvault-, a następnie wartości nazwy zasobu Ingress (od metadata.name). W przykładzie YAML secretName musi być równe keyvault-<your-ingress-name>.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.azure.com/tls-cert-keyvault-uri: <key-vault-certificate-uri>
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <host-name>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - <host-name>
        secretName: keyvault-<your-ingress-name>
    
  3. Utwórz zasoby klastra przy użyciu kubectl apply polecenia .

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

    W poniższych przykładowych danych wyjściowych przedstawiono utworzony zasób:

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

Sprawdź, czy utworzono zarządzany punkt wejścia

  • Sprawdź, czy zarządzane wejście zostało utworzone przy użyciu polecenia kubectl get ingress.

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

    Poniższe przykłady danych wyjściowych pokazują utworzony zarządzany ingress:

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

Dowiedz się więcej o monitorowaniu metryk kontrolera Ingress NGINX dołączonego do dodatku routingu aplikacji, przy użyciu Prometheusa i Grafany, w ramach analizowania wydajności i użycia aplikacji.