Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule przedstawiono dwa sposoby konfigurowania kontrolerów ruchu przychodzącego i obiektów przychodzących za pomocą dodatku routingu aplikacji dla usługi Azure Kubernetes Service (AKS):
- Konfiguracja kontrolera ruchu przychodzącego NGINX, na przykład tworzenie wielu kontrolerów, konfigurowanie prywatnych modułów równoważenia obciążenia i ustawianie statycznych adresów IP.
- Konfiguracja zasobu ruchu przychodzącego za pomocą adnotacji.
Wymagania wstępne
- Klaster AKS z włączonym dodatkiem do routingu aplikacji.
-
kubectlskonfigurowany do połączenia z klastrem AKS. Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z klastrem usługi AKS.
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-credentialsKubernetes przy użyciu polecenia .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Właściwości konfiguracji dla kontrolerów wejściowych NGINX
Dodatek routingu aplikacji używa niestandardowej definicji zasobów Kubernetes (CRD) wywoływanej NginxIngressController do konfigurowania kontrolerów ruchu przychodzącego NGINX. Można utworzyć więcej kontrolerów ruchu przychodzącego lub zmodyfikować istniejące konfiguracje.
W poniższej tabeli wymieniono właściwości, które można ustawić w celu skonfigurowania elementu NginxIngressController:
| (No changes needed) | Typ | opis | Wymagane | Wartość domyślna |
|---|---|---|---|---|
controllerNamePrefix |
ciąg | Nazwa dla zarządzanych zasobów NGINX Ingress Controller. | Tak | nginx |
customHTTPErrors |
macierz | Tablica kodów błędów, które mają być wysyłane do domyślnego zaplecza, jeśli wystąpi błąd. | Nie. | |
defaultBackendService |
obiekt | Usługa przekierowywania niezidentyfikowanego ruchu HTTP. Zawiera zagnieżdżone właściwości: | Nie. | |
name |
ciąg | Nazwa usługi. | Tak | |
namespace |
ciąg | Przestrzeń nazw usługi. | Tak | |
defaultSSLCertificate |
obiekt | Zawiera certyfikat domyślny na potrzeby uzyskiwania dostępu do domyślnej usługi zaplecza. Zawiera zagnieżdżone właściwości: | Nie. | |
forceSSLRedirect |
typ logiczny (boolowski) | Wymusza przekierowanie HTTPS po ustawieniu certyfikatu. | Nie. | false |
keyVaultURI |
ciąg | URI dla tajemnicy w Key Vault, która przechowuje certyfikat. | Nie. | |
secret |
obiekt | Przechowuje informacje tajne dla domyślnego certyfikatu SSL. Zawiera zagnieżdżone właściwości: | Nie. | |
name |
ciąg | Nazwa wpisu tajnego. | Tak | |
namespace |
ciąg | Tajna przestrzeń nazw. | Tak | |
httpDisabled |
typ logiczny (boolowski) | Flaga do wyłączenia ruchu HTTP do kontrolera. | Nie. | |
ingressClassName |
ciąg | IngressClass nazwa używana przez kontroler. | Tak | nginx.approuting.kubernetes.azure.com |
loadBalancerAnnotations |
obiekt | Mapa adnotacji do kontrolowania zachowania usługi kontrolera wejściowego NGINX przez ustawienie adnotacji równoważnika obciążenia. | Nie. | |
scaling |
obiekt | Konfiguracja skalowania kontrolera. Zawiera zagnieżdżone właściwości: | Nie. | |
maxReplicas |
liczba całkowita | Górny limit dla replik. | Nie. | 100 |
minReplicas |
liczba całkowita | Niższy limit dla replik. | Nie. | 2 |
threshold |
ciąg | Próg skalowania definiujący, jak agresywnie skalować.
rapid szybko skaluje się pod kątem nagłych skoków, steady sprzyja opłacalności i balanced jest mieszanką. |
Nie. | balanced |
Kontrolowanie domyślnej konfiguracji kontrolera wejściowego NGINX
Po włączeniu dodatku routingu aplikacji z serwerem NGINX tworzy kontroler ruchu przychodzącego wywoływany default w app-routing-namespace skonfigurowanym publicznym module równoważenia obciążenia platformy Azure. Ten kontroler ruchu przychodzącego używa nazwy klasy ruchu przychodzącego webapprouting.kubernetes.azure.com.
Możesz również kontrolować, czy ustawienie domyślne pobiera publiczny lub wewnętrzny adres IP, albo jeśli zostanie on utworzony w ogóle podczas włączania dodatku.
Możliwe opcje konfiguracji obejmują:
-
None: Domyślny kontroler wejściowy NGINX nie jest tworzony i nie jest usuwany, jeśli już istnieje. Jeśli chcesz, należy usunąć ręcznie domyślnyNginxIngressControllerzasób niestandardowy. -
Internal: domyślny kontroler ruchu przychodzącego NGINX jest tworzony za pomocą wewnętrznego modułu równoważenia obciążenia. Wszelkie zmiany adnotacji w zasobie niestandardowymNginxIngressController, mające na celu uczynienie go zewnętrznym, zostają nadpisane. -
External: domyślny kontroler wejścia NGINX utworzony za pomocą zewnętrznego urządzenia równoważącego obciążenie. Wszelkie zmiany adnotacji w zasobie niestandardowymNginxIngressController, aby uczynić je wewnętrznym, zostaną zastąpione. -
AnnotationControlled(ustawienie domyślne): domyślny kontroler ruchu przychodzącego NGINX jest tworzony za pomocą zewnętrznego modułu równoważenia obciążenia. Możesz edytować domyślnyNginxIngressControllerzasób niestandardowy, aby skonfigurować adnotacje modułu równoważenia obciążenia).
Kontrolowanie domyślnej konfiguracji kontrolera ingress w nowym klastrze
Włącz routing aplikacji w nowym klastrze przy użyciu polecenia
az aks createz opcjami--enable-app-routingi--app-routing-default-nginx-controller. Należy ustawić<DefaultIngressControllerType>na jedną z opcji konfiguracji opisanych w Kontrolowanie domyślnej konfiguracji kontrolera NGINX dla ruchu przychodzącego.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --location $LOCATION \ --enable-app-routing \ --app-routing-default-nginx-controller <DefaultIngressControllerType>
Aktualizowanie domyślnej konfiguracji kontrolera ruchu przychodzącego w istniejącym klastrze
Zaktualizuj konfigurację domyślnego kontrolera ruchu przychodzącego routingu aplikacji w istniejącym klastrze, używając polecenia
az aks approuting updatez flagą--nginx. Należy ustawić<DefaultIngressControllerType>na jedną z opcji konfiguracji opisanych w Kontrolowanie domyślnej konfiguracji kontrolera NGINX dla ruchu przychodzącego.az aks approuting update \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --nginx <DefaultIngressControllerType>
Tworzenie innego publicznego kontrolera ruchu przychodzącego NGINX
Skopiuj następujący manifest YAML do nowego pliku o nazwie
nginx-public-controller.yamli zapisz plik na komputerze lokalnym.apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-public spec: ingressClassName: nginx-public controllerNamePrefix: nginx-publicUtwórz zasoby kontrolera ruchu przychodzącego NGINX przy użyciu
kubectl applypolecenia .kubectl apply -f nginx-public-controller.yamlW poniższych przykładowych danych wyjściowych przedstawiono utworzony zasób:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-public created
Tworzenie wewnętrznego kontrolera ruchu przychodzącego NGINX z prywatnym adresem IP
Skopiuj następujący manifest YAML do nowego pliku o nazwie
nginx-internal-controller.yamli zapisz plik na komputerze lokalnym.apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-internal spec: ingressClassName: nginx-internal controllerNamePrefix: nginx-internal loadBalancerAnnotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true"Utwórz zasoby kontrolera ruchu przychodzącego NGINX przy użyciu
kubectl applypolecenia .kubectl apply -f nginx-internal-controller.yamlW poniższych przykładowych danych wyjściowych przedstawiono utworzony zasób:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Tworzenie kontrolera ruchu przychodzącego NGINX ze statycznym adresem IP
Utwórz grupę zasobów platformy Azure przy użyciu
az group createpolecenia .az group create --name $NETWORK_RESOURCE_GROUP --location $LOCATIONUtwórz statyczny publiczny adres IP przy użyciu
az network public ip createpolecenia .az network public-ip create \ --resource-group $NETWORK_RESOURCE_GROUP \ --name $PUBLIC_IP_NAME \ --sku Standard \ --allocation-method staticUwaga
Jeśli używasz modułu równoważenia obciążenia SKU Basic w klastrze AKS, użyj dla parametru
Basicpodczas określania publicznego adresu IP. TylkoBasicadresy IP SKU działają z modułem równoważenia obciążenia w warstwie Podstawowa i tylkoStandardadresy IP SKU działają z modułami równoważenia obciążenia w warstwie Standardowa.Upewnij się, że tożsamość klastra używana przez klaster usługi AKS ma delegowane uprawnienia do grupy zasobów publicznego adresu IP przy użyciu
az role assignment createpolecenia .CLIENT_ID=$(az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query identity.principalId -o tsv) RG_SCOPE=$(az group show --name $NETWORK_RESOURCE_GROUP --query id -o tsv) az role assignment create \ --assignee ${CLIENT_ID} \ --role "Network Contributor" \ --scope ${RG_SCOPE}Skopiuj następujący manifest YAML do nowego pliku o nazwie
nginx-staticip-controller.yamli zapisz plik na komputerze lokalnym.Uwaga
Możesz użyć nazwy
service.beta.kubernetes.io/azure-pip-namepublicznego adresu IP lub użyćservice.beta.kubernetes.io/azure-load-balancer-ipv4dla adresu IPv4 iservice.beta.kubernetes.io/azure-load-balancer-ipv6adresu IPv6, jak pokazano w przykładzie YAML. Dodanie adnotacjiservice.beta.kubernetes.io/azure-pip-namezapewnia najbardziej wydajne tworzenie równoważenia obciążenia i zdecydowanie zalecane jest, aby uniknąć potencjalnego ograniczania przepustowości.apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-static spec: ingressClassName: nginx-static controllerNamePrefix: nginx-static loadBalancerAnnotations: service.beta.kubernetes.io/azure-pip-name: "$PUBLIC_IP_NAME" service.beta.kubernetes.io/azure-load-balancer-resource-group: "$NETWORK_RESOURCE_GROUP"Utwórz zasoby kontrolera ruchu przychodzącego NGINX przy użyciu
kubectl applypolecenia .kubectl apply -f nginx-staticip-controller.yamlW poniższych przykładowych danych wyjściowych przedstawiono utworzony zasób:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-static created
Sprawdź, czy kontroler ruchu przychodzącego został utworzony
Sprawdź stan kontrolera wejściowego NGINX przy użyciu polecenia
kubectl get nginxingresscontroller.kubectl get nginxingresscontroller --name $INGRESS_CONTROLLER_NAMEPoniższe przykładowe dane wyjściowe pokazują utworzony zasób. Udostępnienie kontrolera może potrwać kilka minut:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE nginx-public nginx-public nginx True
Wyświetl warunki kontrolera wejściowego
Wyświetl warunki kontrolera ruchu przychodzącego, aby rozwiązać wszelkie problemy przy użyciu
kubectl get nginxingresscontrollerpolecenia .kubectl get nginxingresscontroller --name $INGRESS_CONTROLLER_NAME -o jsonpath='{range .items[*].status.conditions[*]}{.lastTransitionTime}{"\t"}{.status}{"\t"}{.type}{"\t"}{.message}{"\n"}{end}'W poniższych przykładowych danych wyjściowych przedstawiono warunki kontrolera ruchu przychodzącego w dobrej kondycji:
2023-11-29T19:59:24Z True IngressClassReady Ingress Class is up-to-date 2023-11-29T19:59:50Z True Available Controller Deployment has minimum availability and IngressClass is up-to-date 2023-11-29T19:59:50Z True ControllerAvailable Controller Deployment is available 2023-11-29T19:59:25Z True Progressing Controller Deployment has successfully progressed
Używanie kontrolera ruchu przychodzącego w ruchu przychodzącym
Skopiuj następujący manifest YAML do nowego pliku o nazwie
ingress.yamli zapisz plik na komputerze lokalnym.Uwaga
Zaktualizuj
<HostName>przy użyciu nazwy hosta DNS. Jest<IngressClassName>to element zdefiniowany podczas tworzenia obiektuNginxIngressController.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: <IngressClassName> rules: - host: <HostName> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: PrefixUtwórz zasoby klastra przy użyciu
kubectl applypolecenia .kubectl apply -f ingress.yaml --namespace hello-web-app-routingW 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 --namespace hello-web-app-routingDane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe:
NAME CLASS HOSTS ADDRESS PORTS AGE aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Usuwanie kontrolerów ruchu przychodzącego
Usuń kontroler wejściowy NGINX używając polecenia
kubectl delete nginxingresscontroller.kubectl delete nginxingresscontroller --name $INGRESS_CONTROLLER_NAME
Konfiguracja zasobu ruchu przychodzącego za pomocą adnotacji
Kontroler wejścia NGINX obsługuje dodawanie adnotacji do określonych obiektów wejściowych w celu dostosowania ich zachowania.
Możesz dodać adnotację do obiektu ruchu przychodzącego, dodając odpowiednią adnotację metadata.annotations w polu.
Uwaga
Klucze adnotacji i wartości mogą być tylko ciągami. Inne typy, takie jak wartości logiczne lub liczbowe, muszą być cytowane. Na przykład: "true", , "false""100".
W poniższych sekcjach przedstawiono przykłady typowych konfiguracji. Pełną listę można znaleźć w dokumentacji adnotacji ruchu przychodzącego NGINX.
Niestandardowy maksymalny rozmiar treści
W przypadku serwera NGINX do klienta jest zwracany błąd 413, gdy rozmiar żądania przekracza maksymalny dozwolony rozmiar treści żądania klienta. Aby zastąpić wartość domyślną, użyj adnotacji:
nginx.ingress.kubernetes.io/proxy-body-size: 4m
Oto przykładowa konfiguracja ruchu przychodzącego przy użyciu tej adnotacji:
Uwaga
Zaktualizuj <HostName> przy użyciu nazwy hosta DNS.
Jest <IngressClassName> to element zdefiniowany podczas tworzenia obiektu NginxIngressController.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 4m
spec:
ingressClassName: <IngressClassName>
rules:
- host: <HostName>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Niestandardowy limit czasu połączenia
Możesz zmienić limit czasu, jaki kontroler ingress NGINX czeka na zamknięcie połączenia z obciążeniem. Wszystkie wartości limitu czasu są bez jednostek i podawane w sekundach. Aby zastąpić domyślny limit czasu, użyj następującej adnotacji, aby ustawić prawidłowy limit czasu odczytu serwera proxy 120 sekund:
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
Sprawdź niestandardowe limity czasu pod kątem innych opcji konfiguracji.
Oto przykładowa konfiguracja ruchu przychodzącego przy użyciu tej adnotacji:
Uwaga
Zaktualizuj <HostName> przy użyciu nazwy hosta DNS.
Jest <IngressClassName> to element zdefiniowany podczas tworzenia obiektu NginxIngressController.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <HostName>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Protokół zaplecza
Kontroler wejściowy NGINX używa HTTP domyślnie do uzyskiwania dostępu do usług. Aby skonfigurować alternatywne protokoły zaplecza, takie jak HTTPS lub GRPC, użyj jednej z następujących adnotacji:
# HTTPS annotation
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
# GRPC annotation
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
Przejrzyj protokoły zaplecza pod kątem innych opcji konfiguracji.
Oto przykładowa konfiguracja ruchu przychodzącego przy użyciu tej adnotacji:
Uwaga
Zaktualizuj <HostName> przy użyciu nazwy hosta DNS.
Jest <IngressClassName> to element zdefiniowany podczas tworzenia obiektu NginxIngressController.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <HostName>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Udostępnianie zasobów z różnych źródeł (CORS)
Aby włączyć Cross-Origin Resource Sharing (CORS) w regule Ingress, użyj następującej adnotacji:
nginx.ingress.kubernetes.io/enable-cors: "true"
Przejrzyj artykuł Enable CORS (Włączanie mechanizmu CORS ) dla innych opcji konfiguracji.
Oto przykładowa konfiguracja ruchu przychodzącego przy użyciu tej adnotacji:
Uwaga
Zaktualizuj <HostName> przy użyciu nazwy hosta DNS.
Jest <IngressClassName> to element zdefiniowany podczas tworzenia obiektu NginxIngressController.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/enable-cors: "true"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <HostName>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Wyłączanie przekierowania SSL
Kontroler przekierowuje (308) do protokołu HTTPS, jeśli protokół TLS jest domyślnie włączony dla ruchu przychodzącego. Aby wyłączyć tę funkcję dla określonych zasobów ruchu przychodzącego, użyj następującej adnotacji:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
Przejrzyj wymuszanie protokołu HTTPS po stronie serwera za pośrednictwem przekierowania , aby uzyskać inne opcje konfiguracji.
Oto przykładowa konfiguracja ruchu przychodzącego przy użyciu tej adnotacji:
Uwaga
Zaktualizuj <HostName> przy użyciu nazwy hosta DNS.
Jest <IngressClassName> to element zdefiniowany podczas tworzenia obiektu NginxIngressController.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <HostName>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Ponowne zapisywanie adresów URL
W niektórych scenariuszach uwidoczniony adres URL w usłudze zaplecza różni się od określonej ścieżki w regule ruchu przychodzącego. Bez ponownego zapisywania żadne żądanie zwraca wartość 404. Ta konfiguracja jest przydatna w przypadku routingu opartego na ścieżkach , w którym można obsługiwać dwie różne aplikacje internetowe w tej samej domenie. Ścieżkę oczekiwaną przez usługę można ustawić przy użyciu następującej adnotacji:
nginx.ingress.kubernetes.io/rewrite-target: /$2
Oto przykładowa konfiguracja ruchu przychodzącego przy użyciu tej adnotacji:
Uwaga
Zaktualizuj <HostName> przy użyciu nazwy hosta DNS.
Jest <IngressClassName> to element zdefiniowany podczas tworzenia obiektu NginxIngressController.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <HostName>
http:
paths:
- path: /app-one(/|$)(.*)
pathType: Prefix
backend:
service:
name: app-one
port:
number: 80
- path: /app-two(/|$)(.*)
pathType: Prefix
backend:
service:
name: app-two
port:
number: 80
Aktualizacja ścieżki sondy kondycji serwera NGINX
Domyślna ścieżka sondy kondycji dla usługi Azure Load Balancer skojarzonej z kontrolerem ingress NGINX musi być ustawiona na "/healthz". Aby sprawdzić poprawność kontroli kondycji, sprawdź, czy usługa kontrolera ruchu przychodzącego ma następującą adnotację:
metadata:
annotations:
service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path: "/healthz"
Jeśli używasz programu Helm do zarządzania kontrolerem wejściowym NGINX, możesz zdefiniować adnotację sondy kondycji Azure Load Balancer w pliku wartości i zastosować ją podczas uaktualniania.
controller:
service:
annotations:
service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path: "/healthz"
Ta konfiguracja pomaga zachować dostępność usługi i uniknąć nieoczekiwanych zakłóceń ruchu podczas uaktualniania.
Następne kroki
Dowiedz się więcej o monitorowaniu metryk kontrolera ruchu przychodzącego-nginx dołączonego do dodatku routingu aplikacji za pomocą rozwiązania Prometheus w narzędziu Grafana w ramach analizowania wydajności i użycia aplikacji.
Azure Kubernetes Service