访问由Nginx-ingress处理的Web应用程序的子域

时间:2019-04-13 19:19:45

标签: 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>        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>

2 个答案:

答案 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/.*