Speciális NGINX bejövőforgalom-vezérlő és bejövő konfigurációk az alkalmazás útválasztási bővítményével
Az alkalmazás-útválasztási bővítmény két módon konfigurálja a bejövő vezérlőket és a bejövő objektumokat:
- Az NGINX bejövőforgalom-vezérlő konfigurációja, például több vezérlő létrehozása, privát terheléselosztók konfigurálása és statikus IP-címek beállítása.
- Konfiguráció bejövő erőforrásonként széljegyzeteken keresztül.
Előfeltételek
Egy AKS-fürt az alkalmazás-útválasztási bővítményrel.
Csatlakozás az AKS-fürthöz
Ha a helyi számítógépről szeretne csatlakozni a Kubernetes-fürthöz, használja kubectl
a Kubernetes parancssori ügyfelet. Telepítheti helyileg az az aks install-cli paranccsal. Ha az Azure Cloud Shellt használja, a kubectl
már telepítve van.
Konfigurálja a kubectl-et a Kubernetes-fürthöz való csatlakozáshoz a az aks get-credentials
parancs használatával.
az aks get-credentials -resource-group <ResourceGroupName> --name <ClusterName>
Az NGINX bejövőforgalom-vezérlő konfigurálása
Az alkalmazás-útválasztási bővítmény egy Kubernetes egyéni erőforrásdefiníciót (CRD) NginxIngressController
használ az NGINX bejövő vezérlők konfigurálásához. Létrehozhat további bejövő vezérlőket, vagy módosíthatja a meglévő konfigurációt.
NginxIngressController
A CRD rendelkezik egy loadBalancerAnnotations
mezővel, amely a terheléselosztó széljegyzeteinek beállításával szabályozza az NGINX bejövőforgalom-vezérlő szolgáltatásának viselkedését.
Az alapértelmezett NGINX bejövőforgalom-vezérlő
Ha engedélyezi az alkalmazás-útválasztási bővítményt az NGINX használatával, létrehoz egy bejövő vezérlőt default
, amelyet egy app-routing-namespace
nyilvános azure-terheléselosztóval konfigurált. Ez a bejövőforgalom-vezérlő a bejövő osztály nevét webapprouting.kubernetes.azure.com
használja.
Másik nyilvános NGINX bejövőforgalom-vezérlő létrehozása
Egy másik NGINX bejövő vezérlő létrehozása nyilvános Azure Load Balancerrel:
Másolja a következő YAML-jegyzékfájlt egy nginx-public-controller.yaml nevű új fájlba, és mentse a fájlt a helyi számítógépre.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-public spec: ingressClassName: nginx-public controllerNamePrefix: nginx-public
Hozza létre az NGINX bejövőforgalom-vezérlő erőforrásait a
kubectl apply
paranccsal.kubectl apply -f nginx-public-controller.yaml
A következő példakimenet a létrehozott erőforrást mutatja be:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-public created
Belső NGINX bejövőforgalom-vezérlő létrehozása privát IP-címmel
NGINX bejövőforgalom-vezérlő létrehozása privát IP-címmel rendelkező belső Azure Load Balancerrel:
Másolja a következő YAML-jegyzékfájlt egy nginx-internal-controller.yaml nevű új fájlba, és mentse a fájlt a helyi számítógépre.
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"
Hozza létre az NGINX bejövőforgalom-vezérlő erőforrásait a
kubectl apply
paranccsal.kubectl apply -f nginx-internal-controller.yaml
A következő példakimenet a létrehozott erőforrást mutatja be:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
NGINX bejövőforgalom-vezérlő létrehozása statikus IP-címmel
NGINX bejövőforgalom-vezérlő létrehozása statikus IP-címmel az Azure Load Balancerben:
Hozzon létre egy Azure-erőforráscsoportot a
az group create
paranccsal.az group create --name myNetworkResourceGroup --location eastus
Hozzon létre egy statikus nyilvános IP-címet a
az network public ip create
paranccsal.az network public-ip create \ --resource-group myNetworkResourceGroup \ --name myIngressPublicIP \ --sku Standard \ --allocation-method static
Feljegyzés
Ha alapszintű termékváltozatú terheléselosztót használ az AKS-fürtben, használja az Alapszintű paramétert a
--sku
nyilvános IP-cím definiálásakor. Csak az alapszintű termékváltozat-ip-címek működnek az alapszintű termékváltozat terheléselosztójával, és csak a standard termékváltozatú IP-címek működnek a standard termékváltozatú terheléselosztókkal.Győződjön meg arról, hogy az AKS-fürt által használt fürtidentitás delegált engedélyekkel rendelkezik a nyilvános IP-cím erőforráscsoportjára a
az role assignment create
parancs használatával.Feljegyzés
Frissítse
<ClusterName>
az<ClusterResourceGroup>
AKS-fürt nevét és az erőforráscsoport nevét.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}
Másolja a következő YAML-jegyzékfájlt egy nginx-staticip-controller.yaml nevű új fájlba, és mentse a fájlt a helyi számítógépre.
Feljegyzés
service.beta.kubernetes.io/azure-pip-name
Használhatja a nyilvános IP-címet, vagy használhatjaservice.beta.kubernetes.io/azure-load-balancer-ipv4
egy IPv4-címhez ésservice.beta.kubernetes.io/azure-load-balancer-ipv6
egy IPv6-címhez, ahogyan az a YAML-példában látható. Aservice.beta.kubernetes.io/azure-pip-name
széljegyzet hozzáadása biztosítja a leghatékonyabb LoadBalancer-létrehozást, és erősen ajánlott a lehetséges szabályozás elkerülése érdekében.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"
Hozza létre az NGINX bejövőforgalom-vezérlő erőforrásait a
kubectl apply
paranccsal.kubectl apply -f nginx-staticip-controller.yaml
A következő példakimenet a létrehozott erőforrást mutatja be:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-static created
Ellenőrizze, hogy a bejövőforgalom-vezérlő létrejött-e
A parancs használatával kubectl get nginxingresscontroller
ellenőrizheti az NGINX bejövőforgalom-vezérlő állapotát.
Feljegyzés
Frissítsen <IngressControllerName>
az "NginxIngressController" létrehozásakor használt névvel.
kubectl get nginxingresscontroller -n <IngressControllerName>
Az alábbi példakimenet a létrehozott erőforrást mutatja be. Eltarthat néhány percig, amíg a vezérlő elérhetővé válik:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE
nginx-public nginx-public nginx True
Megtekintheti a problémák elhárításának feltételeit is:
kubectl get nginxingresscontroller -n <IngressControllerName> -o jsonpath='{range .items[*].status.conditions[*]}{.lastTransitionTime}{"\t"}{.status}{"\t"}{.type}{"\t"}{.message}{"\n"}{end}'
Az alábbi példakimenet egy kifogástalan bejövőforgalom-vezérlő feltételeit mutatja be:
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
Bejövő forgalom vezérlőjének használata
Másolja a következő YAML-jegyzékfájlt egy ingress.yaml nevű új fájlba, és mentse a fájlt a helyi számítógépre.
Feljegyzés
Frissítsen
<Hostname>
a DNS-gazdagép nevével. Ez<IngressClassName>
az, amelyet a rendszer létrehozásakorNginxIngressController
definiált.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
Hozza létre a fürterőforrásokat a
kubectl apply
paranccsal.kubectl apply -f ingress.yaml -n hello-web-app-routing
A következő példakimenet a létrehozott erőforrást mutatja be:
ingress.networking.k8s.io/aks-helloworld created
A felügyelt bejövő forgalom létrehozásának ellenőrzése
A parancs használatával ellenőrizheti, hogy a felügyelt bejövő forgalom létrejött-e kubectl get ingress
.
kubectl get ingress -n hello-web-app-routing
Az alábbi példakimenet a létrehozott felügyelt bejövő forgalmat mutatja. A bejövő osztály, a gazdagép és az IP-cím eltérő lehet:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Bejövőforgalom-vezérlők tisztítása
A parancs használatával eltávolíthatja az NGINX bejövőforgalom-vezérlőt kubectl delete nginxingresscontroller
.
Feljegyzés
Frissítsen <IngressControllerName>
a létrehozáskor NginxIngressController
használt névvel.
kubectl delete nginxingresscontroller -n <IngressControllerName>
Bejövő erőforrásonkénti konfiguráció széljegyzetekkel
Az NGINX bejövőforgalom-vezérlője támogatja a megjegyzéseket adott bejövő objektumokhoz a viselkedés testreszabásához.
A bemeneti objektumot a megfelelő széljegyzet hozzáadásával jegyzetelheti meg a metadata.annotations
mezőben.
Feljegyzés
A széljegyzetkulcsok és -értékek csak sztringek lehetnek. Más típusokat, például logikai vagy numerikus értékeket kell idézni, azaz "true"
, "false"
"100"
.
Íme néhány példa a gyakori konfigurációkhoz használható széljegyzetekre. Tekintse át az NGINX bejövőjegyzetek dokumentációját a teljes listához.
Egyéni maximális törzsméret
Az NGINX esetében a rendszer 413-es hibát ad vissza az ügyfélnek, ha a kérelem mérete meghaladja az ügyfélkérés törzsének megengedett maximális méretét. Az alapértelmezett érték felülbírálásához használja a megjegyzést:
nginx.ingress.kubernetes.io/proxy-body-size: 4m
Íme egy példa a bejövő forgalom konfigurálásához ezzel a megjegyzéssel:
Feljegyzés
Frissítsen <Hostname>
a DNS-gazdagép nevével.
Ez <IngressClassName>
az, amelyet a rendszer létrehozásakor NginxIngressController
definiált.
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
Egyéni kapcsolat időtúllépése
Módosíthatja azt az időtúllépést, amelyet az NGINX bejövőforgalom-vezérlő a számítási feladattal való kapcsolat bezárására vár. Minden időtúllépési érték egységtelen és másodpercben van megadva. Az alapértelmezett időtúllépés felülbírálásához az alábbi jegyzettel állítson be érvényes 120 másodperces proxyolvasási időtúllépést:
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
Tekintse át az egyéb konfigurációs beállítások egyéni időtúllépéseit .
Íme egy példa a bejövő forgalom konfigurálásához ezzel a megjegyzéssel:
Feljegyzés
Frissítsen <Hostname>
a DNS-gazdagép nevével.
Ez <IngressClassName>
az, amelyet a rendszer létrehozásakor NginxIngressController
definiált.
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
Háttérprotokoll
Alapértelmezés szerint az NGINX bejövőforgalom-vezérlő a szolgáltatások elérésére használja HTTP
. Alternatív háttérprotokollok( például HTTPS
vagy GRPC
) konfigurálásához használja a megjegyzést:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
vagy
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
Tekintse át az egyéb konfigurációs beállítások háttérprotokolljait .
Íme egy példa a bejövő forgalom konfigurálásához ezzel a megjegyzéssel:
Feljegyzés
Frissítsen <Hostname>
a DNS-gazdagép nevével.
Ez <IngressClassName>
az, amelyet a rendszer létrehozásakor NginxIngressController
definiált.
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
Eltérő eredetű erőforrások megosztása (CORS)
Ha engedélyezni szeretné a forrásközi erőforrás-megosztást (CORS) egy bejövő szabályban, használja a megjegyzést:
nginx.ingress.kubernetes.io/enable-cors: "true"
Tekintse át a CORS engedélyezését más konfigurációs beállításokhoz.
Íme egy példa a bejövő forgalom konfigurálásához ezzel a megjegyzéssel:
Feljegyzés
Frissítsen <Hostname>
a DNS-gazdagép nevével.
Ez <IngressClassName>
az, amelyet a rendszer létrehozásakor NginxIngressController
definiált.
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-átirányítás letiltása
Alapértelmezés szerint a vezérlő (308) HTTPS-re irányítja át, ha a TLS engedélyezve van a bejövő forgalomhoz. Ha le szeretné tiltani ezt a funkciót adott bejövő erőforrások esetében, használja a megjegyzést:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
Tekintse át a kiszolgálóoldali HTTPS-kényszerítéseket átirányítással más konfigurációs beállítások esetében.
Íme egy példa a bejövő forgalom konfigurálásához ezzel a megjegyzéssel:
Feljegyzés
Frissítsen <Hostname>
a DNS-gazdagép nevével.
Ez <IngressClassName>
az, amelyet a rendszer létrehozásakor NginxIngressController
definiált.
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-újraírás
Bizonyos esetekben a háttérszolgáltatás közzétett URL-címe eltér a bejövőforgalom-szabályban megadott elérési úttól. Átírás nélkül minden kérés a 404-et adja vissza. Ez különösen hasznos az útvonalalapú útválasztás esetében, ahol két különböző webalkalmazást is kiszolgálhat ugyanazon a tartományon belül. A szolgáltatás által várt elérési utat a széljegyzet használatával állíthatja be:
nginx.ingress.kubernetes.io/rewrite-target": /$2
Íme egy példa a bejövő forgalom konfigurálásához ezzel a megjegyzéssel:
Feljegyzés
Frissítsen <Hostname>
a DNS-gazdagép nevével.
Ez <IngressClassName>
az, amelyet a rendszer létrehozásakor NginxIngressController
definiált.
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
Következő lépések
Az alkalmazás teljesítményének és használatának elemzése során megismerheti az alkalmazás-útválasztási bővítmény bejövő nginx vezérlőmetrikáinak monitorozását a Grafana Prometheus használatával.
Azure Kubernetes Service
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: