K8S (minikube) роутинг

Подскажите пожалуйста, в какую сторону копать, для того что бы настроить роутинг в k8s.

Задачка:

Есть ingress:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: api-ingress
  annotations:
    nginx.org/proxy-connect-timeout: "30s"
    nginx.org/proxy-read-timeout: "20s"
    nginx.org/client-max-body-size: "4m"
    nginx.org/proxy-max-temp-file-size: "20480m"
    nginx.org/proxy-pass-headers: "X-Real-IP,X-Forwarded-For,X-Forwarded-Proto,X-Forwarded-Host,X-Forwarded-Port"
    nginx.ingress.kubernetes.io/upstream-vhost
    nginx.ingress.kubernetes.io/rewrite-target: /$1

spec:
  rules:
    - host: domain.local
      http:
        paths:
          - path: /mails
            pathType: Exact
            backend:
              serviceName: ms-mails-web-service
              servicePort: 9500

В сервиса ms-mails-web-service есть 2 роута:

  • [GET] /mails

  • [POST] /mails/verify

нужно настроить роутинг так, что бы запросы шли на /mails и /mails/verify. Пока работает так:

domain.local/mails и domain.local/mails/verify отдают страницу /mails, а должны быть разные.

В NGINX такую задачу решал конфигом

location ~^/mails {
    try_files $uri @msMails;
}

location @msMails {
    proxy_pass http://some-ip:9002;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_body $request_body;
}
  • p.s. Нужно реализовать роутинг для api, проксировать body (post, PUT, PATCH запросы).
  • p.p.s. Искал в документации proxy_pass как в nginx, но так ничего и не понял.
  • p.p.p.s. Готовых решений не прошу, буду рад просто ссылке на доку))
  • p.p.p.p.s. я не DevOps, просто интересно потыкать k8s))

Ответы (2 шт):

Автор решения: Владимир

Нужно изменить конфиг ingress:

- path: /mails

на

- path: mails(.*)

тогда, при запросе domain/mails на поде будет

 "REQUEST_URI" => "/"

а при запросе domain/mails/verify

"REQUEST_URI" => "//verify"

источник: https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/rewrite

так же там есть (/|$) пока не совсем понимаю зачем это.

И не нравиться что "REQUEST_URI" => "//verify" ,а не "REQUEST_URI" => "/verify"

→ Ссылка
Автор решения: Владимир

заменяем

 `nginx.ingress.kubernetes.io/rewrite-target: /$1` 

на

 `nginx.ingress.kubernetes.io/rewrite-target: /$2`

потом - path: mails(.*) на - path: mails(/|$)(.*)

тогда "REQUEST_URI" => "//verify" измениться на "REQUEST_URI" => "/verify"

→ Ссылка