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