- PVSM.RU - https://www.pvsm.ru -
В данной HOWTO мы исправим баг в древней версии nginx ingress controller v0.20.0 и научимся работать с зависимостями Go старых версий через dep + vendor.

Оригинал статьи взят по согласию автора с сайта vitya.top [1].
ingress-nginx версии v0.20.0 добавляет лишние слэши при rewrite. Это мешает бесшовной миграции на последнюю версию (v0.32.0), поэтому разработчикам в ряде случаев пришлось делать такую конструкцию:
path: /service/api/v1/tokens
rewrite-target: /api/v1/tokens
Если добавить / в конец YAML-объект типа Ingress, то ingress-nginx 0.20.0 начинает делать rewrite в /api/v1/tokens//. Отказаться от такой конструкции не получается, потому что кто-то обращается к сервису со слэшем в конце, а кто-то без.
Решили пропатчить старый NGINX Ingress, чтобы избавиться от досадного бага. А затем двигаться по плану:
Но сначала, надо исправить проблему в исходниках контроллера старой версии.
В этих строках [2] переменную location.Rewrite.Target изменить на strings.TrimSuffix(location.Rewrite.Target, "/").
Скачиваем исходники:
go get k8s.io/ingress-nginx
cd ~/go/src/k8.io/ingress-inginx
Переключаем на ветку, которую нужно пофиксить:
git checkout v0.20.0
Правим архитектуру в Makefile. чтобы не собирать лишнее 40 минут:
vim Makefile
(или sed -i -e 's/^ALL_ARCH.*/ALL_ARCH = amd64/g')
Вносим свои правки:
vim internal/ingress/controller/template/template.go +539
(здесь меняем переменную — см. "Цель")
Фиксим Docker-образ для сборки Go:
vim build/go-in-docker.sh
А именно:
Сохраняем правки:
git add -A
git commit -m "Fix trailing slash bug"
Устанавливаем зависимости для сборки:
dep ensure =v # ключевой момент, без этого будет ругаться на internal инклуды
Запускаем сборку и ждём (минут 5):
make
tagged quay.io/kubernetes-ingress-controller/nginx-ingress-controller-amd64:0.20.0
Вешаем тэг и пушим:
docker tag quay.io/kubernetes-ingress-controller/nginx-ingress-controller-amd64:0.20.0 docker.myregistry.com/ops/nginx-ingress-controller:0.20.0-patched-2
docker push docker.myregistry.com/ops/nginx-ingress-controller:0.20.0-patched-2
Готово!
Кстати, мы ищем крутого Kubernetes-админа [3].
Автор: Виктор Ягофаров
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/353148
Ссылки в тексте:
[1] vitya.top: https://vitya.top/build-old-ingress-nginx/
[2] этих строках: https://github.com/kubernetes/ingress-nginx/blob/nginx-0.20.0/internal/ingress/controller/template/template.go#L539
[3] Kubernetes-админа: https://career.habr.com/vacancies/1000058932
[4] Источник: https://habr.com/ru/post/502538/?utm_source=habrahabr&utm_medium=rss&utm_campaign=502538
Нажмите здесь для печати.