我正在运行两项服务:
$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
中的内容。
例如。 <iframe src=.../shiny/test1></iframe>
。
答案 0 :(得分:1)
以下yaml调整解决了该问题:
"changed text"
来源: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/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
答案 1 :(得分:0)
Nginx使用正则表达式来匹配请求的路径/位置。尝试更改:
/shiny/* to /shiny/.*