Thank you for reading this post, don't forget to subscribe!
Есть приложуха написанная на nodejs.
внутри приложение отвечает на порту 3001 по локейшену /
мой ingress (шаблон HELM чарта) изначально выглядел таким образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
--- {{- if .Values.ingress.enabled }} apiVersion: extensions/v1beta1 kind: Ingress metadata: name: {{ .Values.ingress.ingress_name }} namespace: {{ .Values.ingress.namespace }} spec: rules: - host: {{ .Values.ingress.domain }} http: paths: - path: / backend: serviceName: {{ .Values.service_name }} servicePort: {{ .Values.service_port }} {{- end}} |
в таком варианте всё нормально работает, НО запущенное там приложение является api и в таком варианте оно у меня открывается по доменному имени, т.е.
при обращении к site.com будет открываться наша api
а хотелось бы чтобы открывалась по site.com/api
если ничего не менять и обратиться по site.com/api то будет 404 ошибка, так как такого локейшена в контейнере нету
что я сделал, я добавил вот такую конструкцию:
1 2 3 |
nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^/api/(.*) /$1; |
которая все обращения к site.com/api перекидывает на site.com/
в общем виде шаблон выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
--- {{- if .Values.ingress.enabled }} apiVersion: extensions/v1beta1 kind: Ingress metadata: name: {{ .Values.ingress.ingress_name }} namespace: {{ .Values.ingress.namespace }} annotations: nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^/api/(.*) /$1; spec: rules: - host: {{ .Values.ingress.domain }} http: paths: - path: / backend: serviceName: {{ .Values.service_name }} servicePort: {{ .Values.service_port }} {{- end}} |
в таком виде если внутри приложения есть какие то ещё локейшены (в моём случае /check ) то всё будет пахать.