Ваш вход неверный. С вашим входом, когда есть входящий запрос к /api/hi
, вход будет совпадать с /api
правилом пути и переписать путь к /
в соответствии с rewrite-target
аннотацией.
Чтобы он работал, вам нужно чтобы использовать следующий вход:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: server-api-external
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /api/(.*)
backend:
serviceName: server-api
servicePort: 8081
Теперь небольшое объяснение того, как это работает. Обратите внимание на изменения в поле path
и аннотации rewrite-target
. С этим входом, когда поступает входящий запрос к /api/hi
, вход будет соответствовать правилу пути /api/(.*)
, а затем будет извлекать все совпадения с группой (.*)
(в данном случае это будет hi
). Далее, ingress будет использовать эту подходящую группу и переписать путь к /$1
, поэтому /
+ first group match
. В конце путь, который получает ваше приложение, будет /hi
, и это то, что вы ищете.
См. Nginx Документация Ingress Controller для более подробного объяснения функции перезаписи. .
Дайте мне знать, если что-то недостаточно ясно и нуждается в дополнительном объяснении.