Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De invoegtoepassing voor toepassingsroutering ondersteunt twee manieren om toegangsbeheerobjecten en inkomende objecten te configureren:
- Configuratie van de NGINX-ingangscontroller , zoals het maken van meerdere controllers, het configureren van privé-load balancers en het instellen van statische IP-adressen.
- Configuratie per ingressresource via annotaties.
Vereisten
Een AKS-cluster met de invoegtoepassing voor toepassingsroutering.
Verbinding maken met uw AKS-cluster
Als u vanaf uw lokale computer verbinding wilt maken met het Kubernetes-cluster, gebruikt kubectl
u de Kubernetes-opdrachtregelclient. U kunt deze lokaal installeren met behulp van de opdracht az aks install-cli . Als u Azure Cloud Shell gebruikt, is kubectl
al geïnstalleerd.
Configureer kubectl om verbinding te maken met uw Kubernetes-cluster met behulp van de az aks get-credentials
opdracht.
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
Configuratie van de NGINX-ingangscontroller
De invoegtoepassing voor toepassingsroutering maakt gebruik van een aangepaste Kubernetes-resourcedefinitie (CRD) die wordt aangeroepen NginxIngressController
om NGINX-ingangscontrollers te configureren. U kunt meer ingangscontrollers maken of bestaande configuratie wijzigen.
In deze tabel ziet u een overzicht van eigenschappen die u kunt instellen om een NginxIngressController
te configureren.
Veld | Typologie | Beschrijving | Verplicht | Verstek |
---|---|---|---|---|
controllerNamePrefix |
touw | Naam voor de beheerde NGINX Ingress Controller-bronnen. | Ja | nginx |
customHTTPErrors |
array | Matrix van foutcodes die moeten worden verzonden naar de standaardback-end in het geval van een fout. | Nee. | |
defaultBackendService |
Voorwerp | Service voor het routeren van niet-overeenkomend HTTP-verkeer. Bevat geneste eigenschappen: | Nee. | |
name |
touw | Servicenaam. | Ja | |
namespace |
touw | Servicenaamruimte. | Ja | |
defaultSSLCertificate |
Voorwerp | Bevat het standaardcertificaat voor toegang tot de standaardback-endservice. Bevat geneste eigenschappen: | Nee. | |
forceSSLRedirect |
booleaan | Dwingt HTTPS-omleiding af wanneer een certificaat is ingesteld. | Nee. | false |
keyVaultURI |
touw | URI voor een Key Vault-geheim dat het certificaat opslaat. | Nee. | |
secret |
Voorwerp | Bevat geheime informatie voor het standaard-SSL-certificaat. Bevat geneste eigenschappen: | Nee. | |
name |
touw | Geheime naam. | Ja | |
namespace |
touw | Geheime naamruimte. | Ja | |
httpDisabled |
booleaan | Vlag om HTTP-verkeer naar de controller uit te schakelen. | Nee. | |
ingressClassName |
touw | IngressClass-naam die door de controller wordt gebruikt. | Ja | nginx.approuting.kubernetes.azure.com |
loadBalancerAnnotations |
Voorwerp | Een kaart met aantekeningen om het gedrag van de service van de NGINX-ingangscontroller te beheren door load balancer-aantekeningen in te stellen. | Nee. | |
scaling |
Voorwerp | Configuratie voor het schalen van de controller. Bevat geneste eigenschappen: | Nee. | |
maxReplicas |
geheel getal | Bovengrens voor replica's. | Nee. | 100 |
minReplicas |
geheel getal | Ondergrens voor replica's. | Nee. | 2 |
threshold |
touw | Drempelwaarde die bepaalt hoe agressief geschaald moet worden.
rapid schaalt snel voor plotselinge pieken, steady bevordert kosteneffectiviteit en balanced is een combinatie. |
Nee. | balanced |
Algemene configuraties
De standaardconfiguratie van de NGINX-ingangscontroller beheren
Wanneer u de invoegtoepassing voor toepassingsroutering inschakelt met NGINX, wordt er een ingangscontroller gemaakt die is aangeroepen default
in de app-routing-namespace
geconfigureerde met een openbare Azure Load Balancer. Deze ingress-controller maakt gebruik van een ingress-klasnaam van webapprouting.kubernetes.azure.com
.
U kunt ook bepalen of de standaardinstelling een openbaar of intern IP-adres krijgt, of of deze helemaal wordt gemaakt bij het inschakelen van de invoegtoepassing.
Hier volgen de mogelijke configuratieopties:
-
None
: De standaard Nginx-ingangscontroller wordt niet gemaakt en wordt niet verwijderd als deze al bestaat. Gebruikers moeten de standaardNginxIngressController
aangepaste resource desgewenst handmatig verwijderen. -
Internal
: De standaard Nginx-ingangscontroller wordt gemaakt met een interne load balancer. Eventuele wijzigingen in aantekeningen in deNginxIngressController
aangepaste resource om deze extern te maken, worden overschreven. -
External
: De standaard Nginx-ingangscontroller die is gemaakt met een externe load balancer. Eventuele wijzigingen in de aantekeningen van deNginxIngressController
aangepaste resource als deze intern moet zijn, worden overschreven. -
AnnotationControlled
(standaard): De standaard Nginx-ingangscontroller wordt gemaakt met een externe load balancer. Gebruikers kunnen de standaardNginxIngressController
aangepaste resource bewerken om aantekeningen van load balancers te configureren.
De standaardconfiguratie van de ingangscontroller beheren bij het maken van het cluster
Als u toepassingsroutering op een nieuw cluster wilt inschakelen, gebruikt u de az aks create
opdracht, waarbij u de --enable-app-routing
en de --app-routing-default-nginx-controller
vlaggen opgeeft. U moet de <DefaultIngressControllerType>
configuratieopties instellen die eerder zijn beschreven.
az aks create \
--resource-group <ResourceGroupName> \
--name <ClusterName> \
--location <Location> \
--enable-app-routing \
--app-routing-default-nginx-controller <DefaultIngressControllerType>
De standaardconfiguratie van de ingress-controller in een bestaand cluster bijwerken
Als u de standaardconfiguratie van de ingangscontroller voor toepassingsroutering op een bestaand cluster wilt bijwerken, gebruikt u de az aks approuting update
opdracht en geeft u de --nginx
vlag op. U moet de <DefaultIngressControllerType>
configuratieopties instellen die eerder zijn beschreven.
az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --nginx <DefaultIngressControllerType>
Een andere openbare NGINX-ingangscontroller maken
Een andere NGINX-ingangscontroller maken met een openbare Azure Load Balancer:
Kopieer het volgende YAML-manifest naar een nieuw bestand met de naam nginx-public-controller.yaml en sla het bestand op uw lokale computer op.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-public spec: ingressClassName: nginx-public controllerNamePrefix: nginx-public
Maak de NGINX-controllerbronnen voor inkomend verkeer met behulp van de
kubectl apply
opdracht.kubectl apply -f nginx-public-controller.yaml
In de volgende voorbeelduitvoer ziet u de gemaakte resource:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-public created
Een interne NGINX-ingangscontroller maken met een privé-IP-adres
Een NGINX-ingangscontroller maken met een interne Azure Load Balancer met een privé-IP-adres:
Kopieer het volgende YAML-manifest naar een nieuw bestand met de naam nginx-internal-controller.yaml en sla het bestand op uw lokale computer op.
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"
Maak de NGINX-controllerbronnen voor inkomend verkeer met behulp van de
kubectl apply
opdracht.kubectl apply -f nginx-internal-controller.yaml
In de volgende voorbeelduitvoer ziet u de gemaakte resource:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Een NGINX-ingangscontroller maken met een statisch IP-adres
Een NGINX-ingangscontroller maken met een statisch IP-adres op de Azure Load Balancer:
Maak een Azure-resourcegroep met behulp van de
az group create
opdracht.az group create --name myNetworkResourceGroup --location eastus
Maak een statisch openbaar IP-adres met behulp van de
az network public ip create
opdracht.az network public-ip create \ --resource-group myNetworkResourceGroup \ --name myIngressPublicIP \ --sku Standard \ --allocation-method static
Notitie
Als u een Basic SKU-load balancer in uw AKS-cluster gebruikt, gebruik u Basic voor de
--sku
parameter bij het definiëren van een openbaar IP-adres. Alleen Basic SKU-IP's werken met de Basic SKU-load balancer en alleen Standard SKU-IP's werken met Standard SKU-load balancers.Zorg ervoor dat de clusteridentiteit die door het AKS-cluster wordt gebruikt, gedelegeerde machtigingen heeft voor de resourcegroep van het openbare IP-adres met behulp van de
az role assignment create
opdracht.Notitie
Werk
<ClusterName>
en<ClusterResourceGroup>
bij met de naam en resourcegroepnaam van uw AKS-cluster.CLIENT_ID=$(az aks show --name <ClusterName> --resource-group <ClusterResourceGroup> --query identity.principalId -o tsv) RG_SCOPE=$(az group show --name myNetworkResourceGroup --query id -o tsv) az role assignment create \ --assignee ${CLIENT_ID} \ --role "Network Contributor" \ --scope ${RG_SCOPE}
Kopieer het volgende YAML-manifest naar een nieuw bestand met de naam nginx-staticip-controller.yaml en sla het bestand op uw lokale computer op.
Notitie
U kunt deze gebruiken
service.beta.kubernetes.io/azure-pip-name
voor een openbare IP-naam of voorservice.beta.kubernetes.io/azure-load-balancer-ipv4
een IPv4-adres enservice.beta.kubernetes.io/azure-load-balancer-ipv6
voor een IPv6-adres, zoals wordt weergegeven in het voorbeeld van YAML. Het toevoegen van deservice.beta.kubernetes.io/azure-pip-name
annotatie zorgt ervoor dat de meest efficiënte LoadBalancer wordt gemaakt en wordt ten zeerste aanbevolen om mogelijk throttlen te voorkomen.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: "myIngressPublicIP" service.beta.kubernetes.io/azure-load-balancer-resource-group: "myNetworkResourceGroup"
Maak de NGINX-controllerbronnen voor inkomend verkeer met behulp van de
kubectl apply
opdracht.kubectl apply -f nginx-staticip-controller.yaml
In de volgende voorbeelduitvoer ziet u de gemaakte resource:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-static created
Controleren of de ingangscontroller is gemaakt
U kunt de status van de NGINX-ingangscontroller controleren met behulp van de kubectl get nginxingresscontroller
opdracht.
Notitie
Werk <IngressControllerName>
bij met de naam die u hebt gebruikt bij het maken van de `NginxIngressController`.
kubectl get nginxingresscontroller -n <IngressControllerName>
In de volgende voorbeelduitvoer ziet u de gemaakte resource. Het kan enkele minuten duren voordat de controller beschikbaar is:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE
nginx-public nginx-public nginx True
U kunt ook de voorwaarden bekijken om eventuele problemen op te lossen:
kubectl get nginxingresscontroller -n <IngressControllerName> -o jsonpath='{range .items[*].status.conditions[*]}{.lastTransitionTime}{"\t"}{.status}{"\t"}{.type}{"\t"}{.message}{"\n"}{end}'
In de volgende voorbeelduitvoer ziet u de toestand van een gezonde ingresscontroller.
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
De ingresscontroller gebruiken in een ingress
Kopieer het volgende YAML-manifest naar een nieuw bestand met de naam ingress.yaml en sla het bestand op uw lokale computer op.
Notitie
Werk
<Hostname>
bij met uw DNS-hostnaam. Het<IngressClassName>
is degene die u hebt gedefinieerd bij het maken van deNginxIngressController
.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: Prefix
Maak de clusterbronnen met behulp van de
kubectl apply
opdracht.kubectl apply -f ingress.yaml -n hello-web-app-routing
In de volgende voorbeelduitvoer ziet u de gemaakte resource:
ingress.networking.k8s.io/aks-helloworld created
Controleren of de beheerde Ingress is aangemaakt
U kunt verifiëren of het beheerde Ingress is gemaakt met behulp van het kubectl get ingress
commando.
kubectl get ingress -n hello-web-app-routing
In de volgende voorbeelduitvoer ziet u de gemaakte beheerde Ingress. De ingangsklasse, host en IP-adres kunnen afwijken:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Opruimen van ingress controllers
U kunt de NGINX-ingangscontroller verwijderen met behulp van de kubectl delete nginxingresscontroller
opdracht.
Notitie
Werk <IngressControllerName>
bij met de naam die u hebt gebruikt bij het maken van de NginxIngressController
.
kubectl delete nginxingresscontroller -n <IngressControllerName>
Resource per inkomend verkeer configureren via aantekeningen
De NGINX-ingangscontroller biedt ondersteuning voor het toevoegen van aantekeningen aan specifieke objecten voor inkomend verkeer om hun gedrag aan te passen.
U kunt aantekeningen toevoegen aan het inkomende object door de respectieve aantekening toe te voegen in het metadata.annotations
veld.
Notitie
Aantekeningssleutels en -waarden kunnen alleen tekenreeksen zijn. Andere typen, zoals Booleaanse waarden of numerieke waarden, moeten worden geciteerd, bijvoorbeeld "true"
, "false"
. "100"
Hier volgen enkele voorbeelden van aantekeningen voor algemene configuraties. Raadpleeg de documentatie over NGINX-ingressannotaties voor een volledige lijst.
Aangepaste maximale grootte van hoofdtekst
Voor NGINX wordt een 413-fout geretourneerd naar de client wanneer de grootte in een aanvraag groter is dan de maximaal toegestane grootte van de hoofdtekst van de clientaanvraag. Als u de standaardwaarde wilt overschrijven, gebruikt u de aantekening:
nginx.ingress.kubernetes.io/proxy-body-size: 4m
Hier volgt een voorbeeld van een configuratie voor inkomend verkeer met behulp van deze aantekening:
Notitie
Werk <Hostname>
bij met uw DNS-hostnaam.
Het <IngressClassName>
is degene die u hebt gedefinieerd bij het maken van de 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
Time-out voor aangepaste verbinding
U kunt de time-out wijzigen waarop de NGINX-ingangscontroller wacht om een verbinding met uw workload te sluiten. Alle time-outwaarden zijn eenheidsloos en in seconden. Als u de standaardtime-out wilt overschrijven, gebruikt u de volgende aantekening om een geldige time-out voor lezen van 120 seconden in te stellen voor de proxy:
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
Bekijk aangepaste time-outs voor andere configuratieopties.
Hier volgt een voorbeeld van een configuratie voor inkomend verkeer met behulp van deze aantekening:
Notitie
Werk <Hostname>
bij met uw DNS-hostnaam.
Het <IngressClassName>
is degene die u hebt gedefinieerd bij het maken van de 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
Back-endprotocol
Standaard gebruikt de NGINX-ingangscontroller HTTP
om de services te bereiken. Als u alternatieve back-endprotocollen zoals HTTPS
of GRPC
wilt configureren, gebruikt u de aantekening:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
of
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
Bekijk back-endprotocollen voor andere configuratieopties.
Hier volgt een voorbeeld van een configuratie voor inkomend verkeer met behulp van deze aantekening:
Notitie
Werk <Hostname>
bij met uw DNS-hostnaam.
Het <IngressClassName>
is degene die u hebt gedefinieerd bij het maken van de 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
Cross-Origin Resource Sharing (CORS) (uitwisseling van bronnen tussen meerdere domeinen)
Om Cross-Origin Resource Sharing (CORS) in te schakelen in een Ingress-regel, gebruikt u de annotatie:
nginx.ingress.kubernetes.io/enable-cors: "true"
Controleer het inschakelen van CORS voor andere configuratie-opties.
Hier volgt een voorbeeld van een configuratie voor inkomend verkeer met behulp van deze aantekening:
Notitie
Werk <Hostname>
bij met uw DNS-hostnaam.
Het <IngressClassName>
is degene die u hebt gedefinieerd bij het maken van de 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
SSL-omleiding uitschakelen
Standaard redirect de controller (308) naar HTTPS als TLS is ingeschakeld voor een ingress. Om deze functie uit te schakelen voor specifieke ingress-resources, gebruikt u de annotatie:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
Controleer https-afdwinging aan de serverzijde via omleiding voor andere configuratieopties.
Hier volgt een voorbeeld van een configuratie voor inkomend verkeer met behulp van deze aantekening:
Notitie
Werk <Hostname>
bij met uw DNS-hostnaam.
Het <IngressClassName>
is degene die u hebt gedefinieerd bij het maken van de 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
URL herschrijven
In verschillende scenario's verschilt de blootgestelde URL in de back-endservice van het opgegeven pad in de Ingress-regel. Zonder herschrijven retourneert een aanvraag 404. Deze configuratie is handig met padgebaseerde routering , waar u twee verschillende webtoepassingen onder hetzelfde domein kunt leveren. U kunt het pad instellen dat door de service wordt verwacht met behulp van de aantekening:
nginx.ingress.kubernetes.io/rewrite-target": /$2
Hier volgt een voorbeeld van een configuratie voor inkomend verkeer met behulp van deze aantekening:
Notitie
Werk <Hostname>
bij met uw DNS-hostnaam.
Het <IngressClassName>
is degene die u hebt gedefinieerd bij het maken van de 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
Volgende stappen
Meer informatie over het monitoren van de metrics van de ingress-nginx-controller die bij de add-on voor applicatieroutering horen met behulp van Prometheus in Grafana als onderdeel van het analyseren van de prestaties en het gebruik van uw toepassing.
Azure Kubernetes Service