Rozšířený kontroler příchozího přenosu dat NGINX a konfigurace příchozího přenosu dat pomocí doplňku směrování aplikací
Doplněk směrování aplikací podporuje dva způsoby konfigurace kontrolerů příchozího přenosu dat a objektů příchozího přenosu dat:
- Konfigurace kontroleru příchozího přenosu dat NGINX, například vytvoření více kontrolerů, konfigurace privátních nástrojů pro vyrovnávání zatížení a nastavení statických IP adres
- Konfigurace pro prostředek příchozího přenosu dat prostřednictvím poznámek
Požadavky
Cluster AKS s doplňkem pro směrování aplikací.
Připojení ke clusteru AKS
Pokud se chcete připojit ke clusteru Kubernetes z místního počítače, použijte kubectl
klienta příkazového řádku Kubernetes. Můžete ho nainstalovat místně pomocí příkazu az aks install-cli . Pokud používáte Azure Cloud Shell, kubectl
je už nainstalovaný.
Pomocí příkazu nakonfigurujte kubectl pro připojení ke clusteru az aks get-credentials
Kubernetes.
az aks get-credentials -resource-group <ResourceGroupName> --name <ClusterName>
Konfigurace kontroleru příchozího přenosu dat NGINX
Doplněk směrování aplikace používá k konfiguraci kontrolerů příchozího přenosu dat NGINX vlastní definici prostředku Kubernetes (CRD). NginxIngressController
Můžete vytvořit další kontrolery příchozího přenosu dat nebo upravit existující konfiguraci.
NginxIngressController
CRD má loadBalancerAnnotations
pole pro řízení chování služby kontroleru příchozího přenosu dat NGINX nastavením poznámek nástroje pro vyrovnávání zatížení.
Výchozí kontroler příchozího přenosu dat NGINX
Když povolíte doplněk směrování aplikace pomocí NGINX, vytvoří kontroler příchozího přenosu dat volaný default
v app-routing-namespace
nakonfigurované s veřejně přístupným nástrojem pro vyrovnávání zatížení Azure. Tento kontroler příchozího přenosu dat používá název třídy příchozího webapprouting.kubernetes.azure.com
přenosu dat .
Vytvoření dalšího veřejně přístupného kontroleru příchozího přenosu dat NGINX
Vytvoření dalšího kontroleru příchozího přenosu dat NGINX s veřejně přístupným Nástrojem pro vyrovnávání zatížení Azure:
Zkopírujte následující manifest YAML do nového souboru s názvem nginx-public-controller.yaml a uložte soubor do místního počítače.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-public spec: ingressClassName: nginx-public controllerNamePrefix: nginx-public
Pomocí příkazu vytvořte prostředky kontroleru příchozího přenosu dat
kubectl apply
NGINX.kubectl apply -f nginx-public-controller.yaml
Následující příklad výstupu ukazuje vytvořený prostředek:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-public created
Vytvoření interního kontroleru příchozího přenosu dat NGINX s privátní IP adresou
Vytvoření kontroleru příchozího přenosu dat NGINX s interní službou Azure Load Balancer s privátní IP adresou:
Zkopírujte následující manifest YAML do nového souboru s názvem nginx-internal-controller.yaml a uložte soubor do místního počítače.
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"
Pomocí příkazu vytvořte prostředky kontroleru příchozího přenosu dat
kubectl apply
NGINX.kubectl apply -f nginx-internal-controller.yaml
Následující příklad výstupu ukazuje vytvořený prostředek:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Vytvoření kontroleru příchozího přenosu dat NGINX se statickou IP adresou
Vytvoření kontroleru příchozího přenosu dat NGINX se statickou IP adresou v Azure Load Balanceru:
Pomocí příkazu vytvořte skupinu
az group create
prostředků Azure.az group create --name myNetworkResourceGroup --location eastus
Pomocí příkazu vytvořte statickou veřejnou IP adresu
az network public ip create
.az network public-ip create \ --resource-group myNetworkResourceGroup \ --name myIngressPublicIP \ --sku Standard \ --allocation-method static
Poznámka:
Pokud v clusteru AKS používáte nástroj pro vyrovnávání zatížení skladové položky Basic, při definování veřejné IP adresy použijte pro parametr Basic
--sku
. S nástrojem pro vyrovnávání zatížení skladové položky Basic fungují jenom IP adresy skladových položek Úrovně Basic a pouze IP adresy SKU Úrovně Standard fungují s nástroji pro vyrovnávání zatížení SKU Úrovně Standard.Pomocí příkazu se ujistěte, že identita clusteru AKS používaná clusterem AKS má delegovaná oprávnění ke skupině prostředků veřejné IP adresy
az role assignment create
.Poznámka:
Aktualizujte
<ClusterName>
a<ClusterResourceGroup>
použijte název clusteru AKS a název skupiny prostředků.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}
Zkopírujte následující manifest YAML do nového souboru s názvem nginx-staticip-controller.yaml a uložte soubor do místního počítače.
Poznámka:
Můžete použít
service.beta.kubernetes.io/azure-pip-name
název veřejné IP adresy nebo použítservice.beta.kubernetes.io/azure-load-balancer-ipv4
pro IPv4 adresu aservice.beta.kubernetes.io/azure-load-balancer-ipv6
adresu IPv6, jak je znázorněno v příkladu YAML. Přidáním poznámkyservice.beta.kubernetes.io/azure-pip-name
zajistíte nejúčinnější vytváření LoadBalanceru a důrazně se doporučuje zabránit potenciálnímu omezování.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"
Pomocí příkazu vytvořte prostředky kontroleru příchozího přenosu dat
kubectl apply
NGINX.kubectl apply -f nginx-staticip-controller.yaml
Následující příklad výstupu ukazuje vytvořený prostředek:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-static created
Ověření vytvoření kontroleru příchozího přenosu dat
Pomocí příkazu můžete ověřit stav kontroleru kubectl get nginxingresscontroller
příchozího přenosu dat NGINX.
Poznámka:
Aktualizujte <IngressControllerName>
název, který jste použili při vytváření NginxIngressController.
kubectl get nginxingresscontroller -n <IngressControllerName>
Následující příklad výstupu ukazuje vytvořený prostředek. Dostupnost kontroleru může trvat několik minut:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE
nginx-public nginx-public nginx True
Můžete také zobrazit podmínky pro řešení jakýchkoli problémů:
kubectl get nginxingresscontroller -n <IngressControllerName> -o jsonpath='{range .items[*].status.conditions[*]}{.lastTransitionTime}{"\t"}{.status}{"\t"}{.type}{"\t"}{.message}{"\n"}{end}'
Následující příklad výstupu ukazuje podmínky kontroleru příchozího přenosu dat, který je v pořádku:
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
Použití kontroleru příchozího přenosu dat v příchozím přenosu dat
Zkopírujte následující manifest YAML do nového souboru s názvem ingress.yaml a uložte ho do místního počítače.
Poznámka:
Aktualizujte
<Hostname>
název hostitele DNS. Jedná se<IngressClassName>
o ten, který jste definovali při vytvářeníNginxIngressController
.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
Pomocí příkazu vytvořte prostředky clusteru
kubectl apply
.kubectl apply -f ingress.yaml -n hello-web-app-routing
Následující příklad výstupu ukazuje vytvořený prostředek:
ingress.networking.k8s.io/aks-helloworld created
Ověření vytvoření spravovaného příchozího přenosu dat
Spravovaný příchozí přenos dat můžete ověřit pomocí kubectl get ingress
příkazu.
kubectl get ingress -n hello-web-app-routing
Následující příklad výstupu ukazuje vytvořený spravovaný příchozí přenos dat. Třída příchozího přenosu dat, hostitel a IP adresa se může lišit:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Vyčištění kontrolerů příchozího přenosu dat
Kontroler příchozího přenosu dat NGINX můžete odebrat pomocí kubectl delete nginxingresscontroller
příkazu.
Poznámka:
Aktualizujte <IngressControllerName>
název, který jste použili při vytváření souboru NginxIngressController
.
kubectl delete nginxingresscontroller -n <IngressControllerName>
Konfigurace pro prostředek příchozího přenosu dat prostřednictvím poznámek
Kontroler příchozího přenosu dat NGINX podporuje přidávání poznámek ke konkrétním objektům příchozího přenosu dat pro přizpůsobení jejich chování.
Objekt příchozího přenosu dat můžete přidat přidáním příslušné poznámky do metadata.annotations
pole.
Poznámka:
Klíče a hodnoty poznámek můžou být pouze řetězce. Jiné typy, například logické nebo číselné hodnoty, musí být uvozovány, tj. "true"
, "false"
. "100"
Tady je několik příkladů poznámek pro běžné konfigurace. Úplný seznam najdete v dokumentaci k příchozím datům NGINX.
Vlastní maximální velikost těla
V případě serveru NGINX se klientovi vrátí chyba 413, když velikost požadavku překročí maximální povolenou velikost textu požadavku klienta. Pokud chcete přepsat výchozí hodnotu, použijte poznámku:
nginx.ingress.kubernetes.io/proxy-body-size: 4m
Tady je příklad konfigurace příchozího přenosu dat pomocí této poznámky:
Poznámka:
Aktualizujte <Hostname>
název hostitele DNS.
Jedná se <IngressClassName>
o ten, který jste definovali při vytváření 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
Časový limit vlastního připojení
Můžete změnit časový limit, který kontroler příchozího přenosu dat NGINX čeká na zavření připojení k vaší úloze. Všechny hodnoty časového limitu jsou bez jednotkové a v sekundách. Pokud chcete výchozí časový limit přepsat, nastavte platný časový limit 120sekundového čtení proxy serveru pomocí následující poznámky:
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
Zkontrolujte vlastní časové limity pro další možnosti konfigurace.
Tady je příklad konfigurace příchozího přenosu dat pomocí této poznámky:
Poznámka:
Aktualizujte <Hostname>
název hostitele DNS.
Jedná se <IngressClassName>
o ten, který jste definovali při vytváření 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
Protokol back-endu
Ve výchozím nastavení se kontroler příchozího přenosu dat NGINX používá HTTP
k dosažení služeb. Ke konfiguraci alternativních back-endových protokolů, jako HTTPS
je například nebo GRPC
, použijte poznámku:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nebo
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
Zkontrolujte back-endové protokoly a vyhledejte další možnosti konfigurace.
Tady je příklad konfigurace příchozího přenosu dat pomocí této poznámky:
Poznámka:
Aktualizujte <Hostname>
název hostitele DNS.
Jedná se <IngressClassName>
o ten, který jste definovali při vytváření 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)
Pokud chcete povolit sdílení prostředků mezi zdroji (CORS) v pravidle příchozího přenosu dat, použijte poznámku:
nginx.ingress.kubernetes.io/enable-cors: "true"
Další možnosti konfigurace najdete v povolení CORS .
Tady je příklad konfigurace příchozího přenosu dat pomocí této poznámky:
Poznámka:
Aktualizujte <Hostname>
název hostitele DNS.
Jedná se <IngressClassName>
o ten, který jste definovali při vytváření 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
Zakázání přesměrování SSL
Ve výchozím nastavení kontroler přesměruje (308) na HTTPS, pokud je pro příchozí přenos dat povolený protokol TLS. Pokud chcete tuto funkci zakázat pro konkrétní prostředky příchozího přenosu dat, použijte poznámku:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
Zkontrolujte vynucení HTTPS na straně serveru prostřednictvím přesměrování a zkontrolujte další možnosti konfigurace.
Tady je příklad konfigurace příchozího přenosu dat pomocí této poznámky:
Poznámka:
Aktualizujte <Hostname>
název hostitele DNS.
Jedná se <IngressClassName>
o ten, který jste definovali při vytváření 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
Přepisování adres URL
V některých scénářích se vystavená adresa URL v back-endové službě liší od zadané cesty v pravidle příchozího přenosu dat. Bez přepsání jakéhokoli požadavku vrátí hodnotu 404. To je užitečné zejména u směrování na základě cest, kde můžete obsluhovat dvě různé webové aplikace ve stejné doméně. Cestu očekávanou službou můžete nastavit pomocí poznámky:
nginx.ingress.kubernetes.io/rewrite-target": /$2
Tady je příklad konfigurace příchozího přenosu dat pomocí této poznámky:
Poznámka:
Aktualizujte <Hostname>
název hostitele DNS.
Jedná se <IngressClassName>
o ten, který jste definovali při vytváření 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
Další kroky
Přečtěte si o monitorování metrik kontroleru ingress-nginx, které jsou součástí doplňku směrování aplikací pomocí nástroje Prometheus v Grafana jako součást analýzy výkonu a využití vaší aplikace.
Azure Kubernetes Service
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro