Ponad rok temu jak rozpoczynałem jeden projekt podałem prosty skrypt instalacyjny Ingress za pomocą helm. Jedno-linijkowa komenda, która śmigała przez ponad rok (i o dziwo dalej śmiga), nagle spowodowała, że nasze rozwiązanie przestało działać :) Trochę jak robienie wdrożenia w piątek…
Instalacja ingress (reverse proxy) była nam potrzebna by móc przekierowywać ruch do odpowiednich serwisów w zależności od ścieżki. Całość wyśmienicie działała i dało ją się zainstalować za pomocą polecenia:
helm install stable/nginx-ingress --name app-ingress --namespace app --set controller.replicaCount=1 --set controller.service.loadBalancerIP="12.12.12.12"
I ta piękna komenda śmigała aż do momentu… W Ingress korzystaliśmy z konfiguracji która robiła rewrite ścieżki z 12.12.12.12/name1/api na /api w serwisie name1.
W lutym a dokładnie mówiąc w wersji 0.22 ingress zmienił się sposób określania rewrite z (kod pogrubiony):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-ing
namespace: app
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /name1
backend:
serviceName: name1-svc
servicePort: 8080
Na:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-ing
namespace: app
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /name1/?(.*)
backend:
serviceName: name1-svc
servicePort: 8080
Jeżeli nie podamy capture group to nasz URL nie zostanie przepisany (w dokumentacji to ładnie zaznaczyli, trzeba było jednak w nią najpierw zajrzeć), to znaczy: /name1/api/version zostanie zamienione na / a nie na /api/version.
Problemu dałoby się uniknąć gdybyśmy od razu zaznaczyli z jakiej wersji ingress mamy korzystać przy instalacji za pomocą helm. Wystarczyło wykonać następującą komendę:
helm install stable/nginx-ingress --name app-ingress --namespace app --set controller.replicaCount=1 --set controller.service.loadBalancerIP="12.12.12.12" --version 0.26.0
Gdzie --version to wersja chart, wersja paczki helmowej, a nie wersja ingressa. W pliku Chart.yaml jest podana zarówno wersja ingress jak i charts. Warto o tym pamiętać, bo można się też na tym dość łatwo przejechać.
Jak widać, przy pracy z Kubernetes bardzo ważne jest byśmy myśleli nie tylko o tym co teraz jest, ale także o tym co będzie za rok ;)














