Kubernetes 访问由nginx入口处理的webapp子域
我有两个正在运行的服务:Kubernetes 访问由nginx入口处理的webapp子域,kubernetes,shiny,nginx-ingress,Kubernetes,Shiny,Nginx Ingress,我有两个正在运行的服务: $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>
$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
如果我直接通过minikube-service-shinny
访问它,我会从shinny
获得我想要的行为:
应用入口后,子域停止工作:
为什么会发生这种情况?
我想通过url从web
访问shinny
中的内容。
例如,Nginx使用regex来匹配请求的路径/位置。尝试更改:
/shiny/* to /shiny/.*
以下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
资料来源:
编辑:
上述情况导致了更多的麻烦。最后,我使用了以下入口配置:
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
嗨,这并没有解决问题。最后,我只是为每个服务指定了不同的主机名,现在它按预期工作。
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