Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek vás provede dvěma způsoby konfigurace kontrolerů příchozího přenosu dat a objektů příchozího přenosu dat pomocí doplňku směrování aplikací pro službu Azure Kubernetes Service (AKS):
- 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 vstupní prostředek prostřednictvím anotací.
Požadavky
- Cluster AKS s aktivovaným doplňkem směrování aplikací
-
kubectlnakonfigurováno pro připojení ke clusteru AKS. Další informace najdete v tématu Připojení ke clusteru AKS.
Připojení ke clusteru AKS
Pokud se chcete připojit ke clusteru Kubernetes z místního počítače, použijte kubectlklienta příkazového řádku Kubernetes. Můžete jej lokálně nainstalovat pomocí příkazu az aks install-cli. Pokud používáte Azure Cloud Shell, kubectl je už nainstalovaný.
Nakonfigurujte kubectl pro připojení ke clusteru Kubernetes pomocí příkazu
az aks get-credentials.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Vlastnosti konfigurace pro kontrolery příchozího přenosu dat NGINX
Doplněk směrování aplikace je používán pro konfiguraci ingresních kontrolerů NGINX prostřednictvím definice vlastního prostředku Kubernetes (CRD).NginxIngressController Můžete vytvořit další kontrolery příchozího přenosu dat nebo upravit existující konfigurace.
Následující tabulka uvádí vlastnosti, které můžete nastavit pro konfiguraci NginxIngressController:
| Pole | Typ | Popis | Povinné | Výchozí |
|---|---|---|---|---|
controllerNamePrefix |
řetězec | Název spravovaných prostředků NGINX Ingress Controlleru. | Ano | nginx |
customHTTPErrors |
pole | Pole kódů chyb, které se mají odeslat do výchozího back-endu, pokud dojde k chybě. | Ne | |
defaultBackendService |
objekt | Služba pro směrování nesrovnaného provozu HTTP Obsahuje vnořené vlastnosti: | Ne | |
name |
řetězec | Název služby. | Ano | |
namespace |
řetězec | Prostor názvů služby | Ano | |
defaultSSLCertificate |
objekt | Obsahuje výchozí certifikát pro přístup k výchozí back-endové službě. Obsahuje vnořené vlastnosti: | Ne | |
forceSSLRedirect |
Boolean | Vynutí přesměrování HTTPS, pokud je nastaven certifikát. | Ne | false |
keyVaultURI |
řetězec | Identifikátor URI tajného klíče služby Key Vault, který certifikát ukládá. | Ne | |
secret |
objekt | Obsahuje tajné informace pro výchozí certifikát SSL. Obsahuje vnořené vlastnosti: | Ne | |
name |
řetězec | Název tajného kódu. | Ano | |
namespace |
řetězec | Tajný jmenný prostor. | Ano | |
httpDisabled |
Boolean | Příznak pro zakázání HTTP provozu ke kontroleru. | Ne | |
ingressClassName |
řetězec | IngressClass název používaný kontrolerem. | Ano | nginx.approuting.kubernetes.azure.com |
loadBalancerAnnotations |
objekt | Mapa anotací pro řízení chování služby NGINX ingress controlleru nastavením anotací vyrovnávače zatížení | Ne | |
scaling |
objekt | Konfigurace pro škálování kontroleru Obsahuje vnořené vlastnosti: | Ne | |
maxReplicas |
integer | Horní limit pro repliky. | Ne | 100 |
minReplicas |
integer | Nižší limit pro repliky. | Ne | 2 |
threshold |
řetězec | Prahová hodnota škálování definující, jak agresivně se má škálovat.
rapid se rychle škáluje pro náhlé špičky, steady upřednostňuje nákladovou efektivitu a balanced je kombinací. |
Ne | balanced |
Řízení výchozí konfigurace kontroleru příchozího přenosu dat NGINX
Když povolíte doplněk směrování aplikace pomocí NGINX, vytvoří ingresní kontroler nazvaný default v app-routing-namespace, který je nakonfigurován s veřejně přístupným vyrovnávačem zatížení Azure. Tento ingress kontroler používá název ingress třídy webapprouting.kubernetes.azure.com.
Můžete také určit, jestli výchozí hodnota získá veřejnou nebo interní IP adresu nebo jestli se vůbec vytvoří při povolování doplňku.
Mezi možné možnosti konfigurace patří:
-
None: Výchozí kontroler příchozího přenosu dat NGINX se nevytvořil a pokud už existuje, neodstraní se. Pokud chcete, můžete ručně odstranit výchozí upravený zdrojNginxIngressController. -
Internal: Výchozí NGINX ingressový kontroler je vytvořen s interním vyrovnávačem zatížení. Všechny změny anotací veNginxIngressControllervlastním prostředku při změně na externí se přepíšou. -
External: Výchozí kontroler příchozího přenosu dat NGINX vytvořený s externím nástrojem pro vyrovnávání zatížení. Veškeré změny v poznámkách uNginxIngressControllervlastního prostředku, které jej činí interním, se přepíšou. -
AnnotationControlled(výchozí): Výchozí ingresní kontroler NGINX je vytvořen s externím vyrovnávačem zatížení. Můžete upravit výchozíNginxIngressControllervlastní prostředek a nakonfigurovat poznámky k vyrovnávání zatížení.
Řízení výchozí konfigurace kontroleru příchozího přenosu dat v novém clusteru
Povolte směrování aplikací v novém clusteru pomocí příkazu
az aks creates příznaky--enable-app-routinga--app-routing-default-nginx-controller. Musíte nastavit<DefaultIngressControllerType>na jednu z možností konfigurace popsaných v Řízení výchozí konfigurace NGINX ingress kontroleru.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --location $LOCATION \ --enable-app-routing \ --app-routing-default-nginx-controller <DefaultIngressControllerType>
Aktualizace výchozí konfigurace kontroleru příchozího přenosu dat v existujícím clusteru
Pomocí příkazu
az aks approuting updates příznakem--nginxaktualizujte výchozí konfiguraci kontroleru příchozího provozu aplikace v existujícím clusteru. Musíte nastavit<DefaultIngressControllerType>na jednu z možností konfigurace popsaných v Řízení výchozí konfigurace NGINX ingress kontroleru.az aks approuting update \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --nginx <DefaultIngressControllerType>
Vytvoření dalšího veřejně přístupného kontroleru příchozího přenosu dat NGINX
Zkopírujte následující manifest YAML do nového souboru s názvem
nginx-public-controller.yamla uložte ho 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-publicPomocí příkazu vytvořte prostředky kontroleru příchozího přenosu dat
kubectl applyNGINX.kubectl apply -f nginx-public-controller.yamlNá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
Zkopírujte následující manifest YAML do nového souboru s názvem
nginx-internal-controller.yamla uložte ho 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 applyNGINX.kubectl apply -f nginx-internal-controller.yamlNá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
Pomocí příkazu vytvořte skupinu
az group createprostředků Azure.az group create --name $NETWORK_RESOURCE_GROUP --location $LOCATIONPomocí příkazu vytvořte statickou veřejnou IP adresu
az network public ip create.az network public-ip create \ --resource-group $NETWORK_RESOURCE_GROUP \ --name $PUBLIC_IP_NAME \ --sku Standard \ --allocation-method staticPoznámka:
Pokud v clusteru AKS používáte nástroj pro vyrovnávání zatížení skladové položky Basic , použijte
Basicpro tento--skuparametr při definování veřejné IP adresy. JenBasicIP adresy SKU fungují s nástrojem pro vyrovnávání zatížení Basic a pouzeStandardIP adresy SKU fungují s nástrojem pro vyrovnávání zatížení Standard.Pomocí příkazu
az role assignment createzajistěte, že identita používaná clusterem AKS má delegovaná oprávnění ke skupině prostředků veřejné IP adresy.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}Zkopírujte následující manifest YAML do nového souboru s názvem
nginx-staticip-controller.yamla uložte ho do místního počítače.Poznámka:
Můžete použít
service.beta.kubernetes.io/azure-pip-namenázev veřejné IP adresy nebo použítservice.beta.kubernetes.io/azure-load-balancer-ipv4pro IPv4 adresu aservice.beta.kubernetes.io/azure-load-balancer-ipv6adresu IPv6, jak je znázorněno v příkladu YAML. Přidáním poznámkyservice.beta.kubernetes.io/azure-pip-namezajistíte nejúčinnější vytvoření load balanceru a důrazně se doporučuje, aby se předešlo potenciálnímu omezení.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"Pomocí příkazu vytvořte prostředky kontroleru příchozího přenosu dat
kubectl applyNGINX.kubectl apply -f nginx-staticip-controller.yamlNá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 ověřte stav kontroleru
kubectl get nginxingresscontrollerpříchozího přenosu dat NGINX.kubectl get nginxingresscontroller --name $INGRESS_CONTROLLER_NAMENá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
Zobrazení podmínek kontroleru příchozího přenosu dat
Zobrazte podmínky kontroleru ingress pro diagnostiku jakýchkoli problémů pomocí příkazu
kubectl get nginxingresscontroller.kubectl get nginxingresscontroller --name $INGRESS_CONTROLLER_NAME -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 ingressového kontroleru ve zdravém stavu:
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žijte kontroler ingressu v ingressu
Zkopírujte následující manifest YAML do nového souboru s názvem
ingress.yamla uložte ho do místního počítače.Poznámka:
Aktualizujte
<HostName>s názvem vašeho hostitele DNS. Jedná se o<IngressClassName>, 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: PrefixVytvořte prostředky clusteru pomocí příkazu
kubectl apply.kubectl apply -f ingress.yaml --namespace hello-web-app-routingNásledující příklad výstupu ukazuje vytvořený prostředek:
ingress.networking.k8s.io/aks-helloworld created
Ověřte, že byl vytvořen spravovaný vstup
Ověřte, že byl vytvořen spravovaný vstup pomocí příkazu
kubectl get ingress.kubectl get ingress --namespace hello-web-app-routingVýstup by měl vypadat podobně jako v následujícím příkladu výstupu:
NAME CLASS HOSTS ADDRESS PORTS AGE aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Odebrání kontrolerů příchozího přenosu dat
Pomocí příkazu
kubectl delete nginxingresscontrollerodeberte vstupní kontrolér NGINX.kubectl delete nginxingresscontroller --name $INGRESS_CONTROLLER_NAME
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 označit 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 uvedeny v uvozovkách. Například: "true", "false", "100".
Následující části obsahují příklady běžných konfigurací. Úplný seznam najdete v dokumentaci k anotacím vstupního bodu 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 vstupu pomocí této anotace:
Poznámka:
Aktualizujte <HostName> s názvem vašeho hostitele DNS.
Jedná se o <IngressClassName>, 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ý NGINX Ingress Controller čeká na ukončení připojení k vaší úloze. Hodnoty všech časových limitů jsou bez jednotek a uváděny 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 vstupu pomocí této anotace:
Poznámka:
Aktualizujte <HostName> s názvem vašeho hostitele DNS.
Jedná se o <IngressClassName>, 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 zázemí
NGINX ingress controller ve výchozím nastavení používá HTTP pro přístup ke službám. Pokud chcete nakonfigurovat alternativní back-endové protokoly, například HTTPS nebo GRPC, použijte jednu z následujících poznámek:
# HTTPS annotation
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
# GRPC annotation
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
Zkontrolujte back-endové protokoly a vyhledejte další možnosti konfigurace.
Tady je příklad konfigurace vstupu pomocí této anotace:
Poznámka:
Aktualizujte <HostName> s názvem vašeho hostitele DNS.
Jedná se o <IngressClassName>, 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
Sdílení prostředků mezi různými zdroji (CORS - Cross-Origin Resource Sharing)
Pokud chcete povolit sdílení prostředků mezi zdroji (CORS) v pravidle Ingress, použijte následující anotaci:
nginx.ingress.kubernetes.io/enable-cors: "true"
Zkontrolujte povolení CORS pro další možnosti konfigurace.
Tady je příklad konfigurace vstupu pomocí této anotace:
Poznámka:
Aktualizujte <HostName> s názvem vašeho hostitele DNS.
Jedná se o <IngressClassName>, 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
Kontroler přesměruje (308) na HTTPS, pokud je ve výchozím nastavení povolený protokol TLS pro příchozí přenos dat. Pokud chcete tuto funkci zakázat pro konkrétní prostředky příchozího přenosu dat, použijte následující 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 vstupu pomocí této anotace:
Poznámka:
Aktualizujte <HostName> s názvem vašeho hostitele DNS.
Jedná se o <IngressClassName>, 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. Tato konfigurace je užitečná se směrováním na základě cesty , kde můžete obsluhovat dvě různé webové aplikace ve stejné doméně. Cestu očekávanou službou můžete nastavit pomocí následující poznámky:
nginx.ingress.kubernetes.io/rewrite-target: /$2
Tady je příklad konfigurace vstupu pomocí této anotace:
Poznámka:
Aktualizujte <HostName> s názvem vašeho hostitele DNS.
Jedná se o <IngressClassName>, 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
Aktualizace cesty kontroly stavu NGINX
Výchozí cesta sondy stavu pro Azure Load Balancer přidružený k kontroleru příchozího přenosu dat NGINX musí být nastavená na "/healthz". Chcete-li zajistit správné kontroly stavu, ověřte, že služba kontroleru příchozího přenosu dat má následující poznámku:
metadata:
annotations:
service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path: "/healthz"
Pokud ke správě kontroleru příchozího přenosu dat NGINX používáte Helm, můžete definovat poznámku sondy stavu Azure Load Balanceru v souboru hodnot a použít ji během upgradu:
controller:
service:
annotations:
service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path: "/healthz"
Tato konfigurace pomáhá udržovat dostupnost služeb a vyhnout se neočekávaným přerušení provozu během upgradů.
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