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

时间:2020-03-09 04:15:05

标签: kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress

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

访问“ /”时,它会提供默认的tomcat 404-找不到页面,而通过/ app1访问时,它会显示“默认后端-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

1 个答案:

答案 0 :(得分:1)

不幸的是,当前默认的 GKE Ingress Controller 实现不支持重写目标。仍然存在一个公开的github问题,您可以找到here

您要实现的目标是将入口路径重写为应用程序公开的某些特定路径,在您的情况下为 Apache Tomcat Web服务器

是否有可能重新配置您的应用以通过 Apache Tomcat 从主路径提供服务?如果是这样,您可以通过在入口资源中配置以下路径,使其在<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