Úprava Ingress objektov pomocou anotácií
Napísal Merač June 02, 2021
Niekoľko príkladov užitočných anotácií pre úpravu správania sa Ingress objektov v kubernetes clusteri.
Vlastné nastavenie hodnoty max body size
Pre NGINX, klient dostane error 413 keď veľkosť requestu presiahne maximálnu povolenú veľkosť. Na nastavenie tohto pravidla globálne pre všetky Ingress objekty, hodnotu proxy-body-size môžeme nastaviť v NGINX ConfigMap. Vlastné hodnoty pre jednotlivé Ingress objekty môžeme zadefinovať pomocou tejto anotácie:
nginx.ingress.kubernetes.io/proxy-body-size: value
Príklad použitia body-size anotácie:
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 proxy-body-size na 0 úplne deaktivuje kontrolu veľkosti requestu klienta.
—
Vlastné nastavenie timeoutov
Pomocou konfigurácie v NGINX ConfigMap je možné nastaviť predvolenú globálnu hodnotu timeoutu pre pripojenia k upstream serverom. V niektorých prípadoch je potrebné použiť iné hodnoty. Upraviť nastavenia timeoutov v jednotlivých prípadoch môžeme pomocou anotácií:
nginx.ingress.kubernetes.io/proxy-connect-timeout: value
nginx.ingress.kubernetes.io/proxy-send-timeout: value
nginx.ingress.kubernetes.io/proxy-read-timeout: value
Príklad použitia timeout anotácie:
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"
Timeout sa nastavuje bez udania jednotiek a je v sekundách. V tomto príklade nastavenie hodnoty na 120 znamená 120 sekundový proxy read timeout.
—
Presmerovanie s použitím rewrite-target
Prichádzajúci request môžeme jednoducho presmerovať na inú url pomocou rewrite-target anotácie:
nginx.ingress.kubernetes.io/rewrite-target: value
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ípade všetok trafic na www.example2.com je presmerovaný na https://www.example1.com/
—
Presmerovanie s použitím server-snippet
Použitím anotácie nginx.ingress.kubernetes.io/server-snippet je možné pridať vlastnú konfiguráciu do konfigurácie server blocku. Je dôležité myslieť na to že táto anotácie môže byť použitá pre každý host len raz.
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ípade všetok trafic na www.example2.sk is smerovaný na www.example2.sk, ale www.example2.sk/b is presmerované na www.example1.sk/b.
—
Pár slov na záver
V tomto blogu som uviedol len pár príkladov. Existuje množstvo anotácií, pre úpravu správania sa Ingress objektov. Viac príkladov je možné nájsť na https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/