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ć kubectl
klienta 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.
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>"
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.
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.
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)
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.
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
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/certname
tylko wartość . Wersja certyfikatu na końcu ciągu identyfikatora URI powinna zostać pominięta, aby uzyskać bieżącą wersję.Klucz
secretName
wtls
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, pokeyvault-
której następuje wartość nazwy zasobu ruchu przychodzącego (zmetadata.name
). W przykładzie YAMLsecretName
musi być równekeyvault-<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>
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.
Azure Kubernetes Service