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"