重写 Google Kubernetes Engine 入口控制器的上下文路径

Rewrite context path for Google Kubernetes Engine Ingress Controller

我在 tomcat 路径 /app1 中有一个应用程序 运行,我应该如何从入口路径访问它?

当访问“/”时,它给出默认的 tomcat 404 - 未找到页面,当通过 /app1 访问时,它显示 "default backend -404"

我想知道的是: 有没有在不使用 ngnix 入口控制器的情况下配置上下文路径? (仅使用 GKE 的默认入口控制器)

这是我的入口示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gke-my-ingress-1
  annotations:
    kubernetes.io/ingress.global-static-ip-name: gke-my-static-ip
    networking.gke.io/managed-certificates: gke-my-certificate
spec:
  rules:
  - host: mydomain.web.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-service
          servicePort: my-port

编辑:服务输出

kubectl get svc
my-service   NodePort    <IP_REDACTED>   <none>        8080:30310/TCP   5d16h
kubectl describe svc my-service
Name:                     my-service
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"my-service","namespace":"default"},"spec":{"ports":[{"name"...
Selector:                 app=my-deployment-1
Type:                     NodePort
IP:                       <IP_REDACTED>
Port:                     my-port  8080/TCP
TargetPort:               8080/TCP
NodePort:                 my-port  30310/TCP
Endpoints:                <IP_REDACTED>:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

这是我的节点端口服务 yaml:

---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
  - name: my-port
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: my-deployment-1
  type: NodePort

不幸的是,默认 GKE Ingress Controller 的当前实现不支持重写目标。还有一个未解决的 github 问题,您可以找到 here.

你想要实现的是将你的入口路径重写为你的应用程序公开的某些特定路径,在你的情况下 Apache Tomcat 网络服务器.

是否可以重新配置您的应用程序以由 Apache Tomcat 从主路径提供服务?如果是这样,您可以通过在 ingress 资源 中配置以下路径,使其在 <IngressLoadBalancerIP>/app1 上可用,如下例所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: default-backend
          servicePort: 8080
      - path: /app1
        backend:
          serviceName: my-service
          servicePort: 8080

但不幸的是,您无法配置重写,当您转到 <IngressLoadBalancerIP>/app1 时,它会重写到您的 <my-service>/app1

看来目前唯一的解决办法是安装不同的入口控制器,例如nginx insgress controller