重写 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。
我在 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。