Niekoľko príkladov užitočných Kubernetes anotácií na prispôsobenie správania Ingress objektov v Kubernetes clusteri.
Vlastná maximálna veľkosť tela požiadavky
Pre NGINX sa vráti chyba 413 klientovi, keď veľkosť v požiadavke prekročí maximálnu povolenú veľkosť tela požiadavky klienta. Táto veľkosť môže byť nakonfigurovaná parametrom client_max_body_size. Na globálne nastavenie tohto parametra pre všetky Ingress pravidlá môže byť hodnota proxy-body-size nastavená v NGINX ConfigMap. Na použitie vlastných hodnôt v Ingress pravidle definujte túto anotáciu:
nginx.ingress.kubernetes.io/proxy-body-size: hodnota
Príklad použitia anotácie body-size:
kind: Ingress
metadata:
annotations:
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "0"
V tomto prípade nastavenie veľkosti na 0 vypína kontrolu veľkosti tela požiadavky klienta.
--
Vlastné časové limity
Pomocou konfiguračného configmap je možné nastaviť predvolený globálny časový limit pre pripojenia k upstream serverom. V niektorých scenároch je potrebné mať rôzne hodnoty. Na umožnenie tohto môžete použiť anotácie, ktoré umožňujú toto prispôsobenie:
nginx.ingress.kubernetes.io/proxy-connect-timeout: hodnota
nginx.ingress.kubernetes.io/proxy-send-timeout: hodnota
nginx.ingress.kubernetes.io/proxy-read-timeout: hodnota
Príklad použitia anotácie timeout:
kind: Ingress
metadata:
annotations:
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
Všetky hodnoty časového limitu sú bez jednotiek a v sekundách. V tomto príklade nastavenie časového limitu na "120" nastaví platný časový limit pre čítanie proxy na 120 sekúnd.
--
Presmerovanie pomocou rewrite-target
Môžete jednoducho presmerovať prichádzajúce požiadavky na inú URL pomocou anotácie rewrite-target:
nginx.ingress.kubernetes.io/rewrite-target: hodnota
Príklad použitia rewrite-target:
kind: Ingress
metadata:
annotations:
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: https://example1.com/
name: example-rewrite
spec:
rules:
- host: example2.com
V tomto príklade je všetka prevádzka na www.example2.com presmerovaná na https://www.example1.com/
--
Presmerovanie pomocou server snippet
Pomocou anotácie nginx.ingress.kubernetes.io/server-snippet je možné pridať vlastnú konfiguráciu do konfiguračného bloku servera. Berte na vedomie, že táto anotácia môže byť použitá iba raz na host.
Príklad použitia server snippet na presmerovanie špecifickej URL:
kind: Ingress
metadata:
annotations:
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/server-snippet: |
location ~ /b {
rewrite / https:www.example1.sk$uri permanent;
}
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/use-regex: "true"
name: example-snippet
spec:
rules:
- host: www.example2.sk
V tomto príklade je všetka prevádzka na www.example2.sk smerovaná na www.example2.sk, ale www.example2.sk/b je presmerovaná na www.example1.sk/b.
--
Záver
V tomto blogu som dal iba niekoľko príkladov. Existuje veľa ďalších anotácií na úpravu správania Ingress objektov. Viac informácií nájdete na https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/


