#kubernetes #shiny #nginx-ingress
#kubernetes #блестящий #nginx-вход
Вопрос:
У меня запущены две службы:
$kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 49m
shiny NodePort 10.110.49.57 <none> 3838:30240/TCP 34m
web NodePort 10.98.56.71 <none> 80:31758/TCP 39m
И следующий вход:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: web
servicePort: 80
- path: /shiny/*
backend:
serviceName: shiny
servicePort: 3838
Я получаю желаемое поведение shiny
, если получаю к нему прямой доступ через minikube service shiny
:
После применения входа поддомены перестают работать:
Почему это происходит? Я хотел бы получить доступ к материалам внутри shiny
, из web
, через URL-адреса. Например. <iframe src=.../shiny/test1></iframe>
.
Ответ №1:
Следующие настройки yaml решили проблему:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: web
servicePort: 80
- path: /shiny(/|$)(.*)
backend:
serviceName: shiny
servicePort: 3838
Источник: https://kubernetes.github.io/ingress-nginx/examples/rewrite /
Редактировать:
Вышесказанное привело к еще большим проблемам в будущем. В конце концов, я выбрал следующую конфигурацию входа:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite /$1 break;
rewrite /shiny/(.*) /$1 break;
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: web
servicePort: 80
- path: /shiny
backend:
serviceName: shiny
servicePort: 3838
Ответ №2:
Nginx использует регулярные выражения для сопоставления путей / местоположений ваших запросов. Попробуйте изменить:
/shiny/* to /shiny/.*
Комментарии:
1. Привет, это не решило проблему. В итоге я просто указал разные имена хостов для каждой службы, теперь она работает так, как ожидалось.