Udostępnij za pośrednictwem


Konfigurowanie niestandardowej nazwy domeny i certyfikatu SSL przy użyciu dodatku routingu aplikacji

Ruch przychodzący to obiekt interfejsu API, który definiuje reguły, które umożliwiają dostęp zewnętrzny do usług w klastrze usługi Azure Kubernetes Service (AKS). Podczas tworzenia obiektu ruchu przychodzącego używającego klas ruchu przychodzącego nginx ingress dodatku routingu aplikacji dodatek tworzy, konfiguruje i zarządza co najmniej jednym kontrolerem ruchu przychodzącego w klastrze usługi AKS.

W tym artykule pokazano, jak skonfigurować zaawansowaną konfigurację ruchu przychodzącego w celu zaszyfrowania ruchu przy użyciu certyfikatów SSL/TLS przechowywanych w usłudze Azure Key Vault i używania usługi Azure DNS do zarządzania strefami DNS.

Dodatek routingu aplikacji z funkcjami serwera nginx

Dodatek do routingu aplikacji z serwerem nginx zapewnia następujące elementy:

  • Łatwa konfiguracja zarządzanych kontrolerów ruchu przychodzącego nginx.
  • Integracja z zewnętrznym systemem DNS, takim jak usługa Azure DNS na potrzeby zarządzania strefami globalnymi i prywatnymi
  • Kończenie żądań SSL z certyfikatami przechowywanymi w magazynie kluczy, takim jak usługa Azure Key Vault.

Wymagania wstępne

  • Klaster usługi AKS z dodatkiem routingu aplikacji.
  • Usługa Azure Key Vault, jeśli chcesz skonfigurować kończenie żądań SSL i przechowywać certyfikaty w magazynie hostowanym na platformie Azure.
  • Usługa Azure DNS, jeśli chcesz skonfigurować zarządzanie strefami globalnymi i prywatnymi i hostować je na platformie Azure.
  • Aby dołączyć usługę Azure Key Vault lub strefę usługi Azure DNS, musisz mieć rolę właściciela, administratora konta platformy Azure lub współadministratora platformy Azure w ramach subskrypcji platformy Azure.
  • Wszystkie publiczne strefy DNS muszą znajdować się w tej samej subskrypcji i grupie zasobów.

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 polecenia az aks install-cli . 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 .

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

Kończenie ruchu HTTPS przy użyciu certyfikatów z usługi Azure Key Vault

Aby włączyć obsługę ruchu HTTPS, zobacz następujące wymagania wstępne:

  • Certyfikat SSL. Jeśli go nie masz, możesz utworzyć certyfikat.

Tworzenie usługi Azure Key Vault do przechowywania certyfikatu

Uwaga

Jeśli masz już usługę Azure Key Vault, możesz pominąć ten krok.

Utwórz usługę Azure Key Vault przy użyciu az keyvault create polecenia .

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

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.

Uwaga

Certyfikaty z podpisem własnym to certyfikaty cyfrowe, które nie są podpisane przez zaufany urząd certyfikacji innej firmy. Certyfikaty z podpisem własnym są tworzone, wystawiane i podpisane przez firmę lub dewelopera, który jest odpowiedzialny za podpisaną witrynę internetową lub oprogramowanie. 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 wejściem openssl req przy użyciu polecenia . Pamiętaj, aby zastąpić <Hostname> ciąg nazwą DNS, której używasz.

    openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
    
  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 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 .

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

Ważne

Aby włączyć dodatek do ponownego ładowania certyfikatów z usługi Azure Key Vault podczas ich zmiany, należy włączyć funkcję autorotytacji wpisu tajnego sterownika CSI magazynu wpisów tajnych z argumentem --enable-secret-rotation . Po włączeniu autorotacji sterownik aktualizuje instalację zasobnika i wpis tajny Kubernetes, sondując zmiany 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

W klastrze z włączonym dodatkiem routingu aplikacji użyj az aks approuting update polecenia i --enable-kv --attach-kv , aby włączyć dostawcę usługi Azure Key Vault dla sterownika CSI magazynu wpisów tajnych i zastosować wymagane przypisania ról.

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 wybierze odpowiedni model dostępu do użycia.

Uwaga

Polecenie az aks approuting update --attach-kv używa uprawnień użytkownika uruchamiającego polecenie w celu utworzenia przypisania roli usługi Azure Key Vault. Ta rola jest przypisywana do tożsamości zarządzanej dodatku. Aby uzyskać więcej informacji na temat tożsamości zarządzanych usługi AKS, zobacz Podsumowanie tożsamości zarządzanych.

Pobierz identyfikator zasobu usługi Azure Key Vault.

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

Następnie zaktualizuj dodatek routingu aplikacji, aby włączyć sterownik CSI magazynu wpisów tajnych usługi Azure Key Vault i zastosować przypisanie roli.

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

Włączanie integracji usługi Azure DNS

Aby włączyć obsługę stref DNS, zapoznaj się z następującymi wymaganiami wstępnymi:

  • Dodatek routingu aplikacji można skonfigurować tak, aby automatycznie tworzyć rekordy w co najmniej jednej globalnej i prywatnej strefie DNS platformy Azure dla hostów zdefiniowanych w zasobach ruchu przychodzącego. Wszystkie globalne strefy DNS platformy Azure muszą znajdować się w tej samej grupie zasobów, a wszystkie prywatne strefy DNS platformy Azure muszą znajdować się w tej samej grupie zasobów. Jeśli nie masz strefy usługi Azure DNS, możesz je utworzyć.

Tworzenie publicznej strefy DNS platformy Azure

Uwaga

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

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

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

Dołączanie strefy DNS platformy Azure do dodatku routingu aplikacji

Uwaga

Polecenie az aks approuting zone add używa uprawnień użytkownika uruchamiającego polecenie w celu utworzenia przypisania roli strefy DNS platformy Azure. Ta rola jest przypisywana do tożsamości zarządzanej dodatku. Aby uzyskać więcej informacji na temat tożsamości zarządzanych usługi AKS, zobacz Podsumowanie tożsamości zarządzanych.

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

    ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
    
  2. Zaktualizuj dodatek, aby włączyć integrację z usługą 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 <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
    

Tworzenie ruchu przychodzącego używającego nazwy hosta i certyfikatu z usługi Azure Key Vault

Dodatek routingu aplikacji tworzy klasę ruchu przychodzącego w klastrze o nazwie webapprouting.kubernetes.azure.com. Podczas tworzenia obiektu ruchu przychodzącego za pomocą tej klasy aktywuje dodatek.

  1. Pobierz identyfikator URI certyfikatu do użycia w ruchu przychodzącym z usługi Azure Key Vault przy użyciu az keyvault certificate show polecenia .

    az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --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/ea62e42260f04f17a9309d6b87aceb44
    
  2. Skopiuj następujący manifest YAML do nowego pliku o nazwie ingress.yaml i zapisz plik na komputerze lokalnym.

    Zaktualizuj <Hostname> ciąg nazwą hosta DNS i <KeyVaultCertificateUri> identyfikatorem URI zwróconym z polecenia , aby wykonać zapytanie względem usługi Azure Key Vault w kroku 1 powyżej. Wartość ciągu dla *<KeyVaultCertificateUri>* elementu powinna zawierać https://yourkeyvault.vault.azure.net/certificates/certnametylko wartość . Wersja certyfikatu na końcu ciągu identyfikatora URI powinna zostać pominięta, aby uzyskać bieżącą wersję.

    Klucz secretName w tls sekcji definiuje nazwę wpisu tajnego zawierającego certyfikat dla tego zasobu ruchu przychodzącego. Ten certyfikat jest wyświetlany w przeglądarce, gdy klient przechodzi do adresu URL określonego w kluczu <Hostname> . Upewnij się, że wartość secretName elementu jest równa wartości, po keyvault- której następuje wartość nazwy zasobu ruchu przychodzącego (z 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: <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. 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 ruch przychodzący

Możesz sprawdzić, czy zarządzany ruch przychodzący został utworzony przy użyciu kubectl get ingress polecenia .

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

W poniższych przykładowych danych wyjściowych przedstawiono utworzony zarządzany ruch przychodzący:

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

Następne kroki

Dowiedz się więcej o monitorowaniu metryk kontrolera ingress-nginx dołączonych do dodatku do routingu aplikacji za pomocą rozwiązania Prometheus w narzędziu Grafana w ramach analizowania wydajności i użycia aplikacji.