kubernetes GKE入口资源不工作,404错误提示

gmol1639  于 2023-06-28  发布在  Kubernetes
关注(0)|答案(3)|浏览(140)

我创建了入口资源,但它不工作。请注意-我没有使用gke默认值部署ingress控制器(在托管gke中部署ingress控制器是强制性的吗)

我分别创建了两个nginx deployment和nodeport服务这里是kubectl get all

NAME                        READY   STATUS    RESTARTS   AGE
pod/app1-57df48bcd9-d48l9   1/1     Running   0          69m
pod/app2-8478484c64-khn5w   1/1     Running   0          69m
pod/test-d4df74fc9-kkzjd    1/1     Running   0          42m

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/app1         NodePort    10.121.13.120   <none>        8080:32252/TCP   67m
service/app2         NodePort    10.121.15.112   <none>        80:31412/TCP     58m
service/kubernetes   ClusterIP   10.121.0.1      <none>        443/TCP          79m
service/test         NodePort    10.121.13.108   <none>        6060:32493/TCP   42m

NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/app1   1/1     1            1           69m
deployment.apps/app2   1/1     1            1           69m
deployment.apps/test   1/1     1            1           42m

NAME                              DESIRED   CURRENT   READY   AGE
replicaset.apps/app1-57df48bcd9   1         1         1       69m
replicaset.apps/app2-8478484c64   1         1         1       69m
replicaset.apps/test-d4df74fc9    1         1         1       42m

=========================

并根据以下yaml部署入口资源

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: connection
spec:
  rules:
  - http:
      paths:
      - path: /app1
        backend:
          serviceName: app1
          servicePort: 8080
      - path: /app2
        backend:
          serviceName: app2
          servicePort: 80

入口描述

Name:             connection
Namespace:        default
Address:          xxxxxxxxxxxxx
Default backend:  default-http-backend:80 (10.56.0.9:8080)
Rules:
  Host        Path  Backends
  ----        ----  --------
  *
              /       app1:8080 (10.56.2.4:80)
              /app2   app2:80 (10.56.1.4:80)
Annotations:  ingress.kubernetes.io/backends:
                {"k8s-be-31412--b52155807170af3c":"HEALTHY","k8s-be-32252--b52155807170af3c":"HEALTHY","k8s-be-32504--b52155807170af3c":"HEALTHY"}
              ingress.kubernetes.io/forwarding-rule: k8s-fw-default-connection--b52155807170af3c
              ingress.kubernetes.io/rewrite-target: /
              ingress.kubernetes.io/target-proxy: k8s-tp-default-connection--b52155807170af3c
              ingress.kubernetes.io/url-map: k8s-um-default-connection--b52155807170af3c
              ingress.kubernetes.io/use-regex: true
              kubernetes.io/ingress.class: gce
Events:
  Type    Reason  Age   From                     Message
  ----    ------  ----  ----                     -------
  Normal  ADD     58m   loadbalancer-controller  default/connection
  Normal  CREATE  57m   loadbalancer-controller  ip: xxxxxxxxxx

当我尝试访问http://ingresLBip/app1http://ingessLBip/app2时,我收到404未找到错误
如果我用单个后端配置ingres资源,那么它将为单个服务工作。
有人在gke上遇到这个问题吗?需要安装nginx控制器吗?

lnxxn5zx

lnxxn5zx1#

我假设您的应用程序正在侦听/,而不是/app1/app2路径。这就解释了为什么单一的后端工作。在gce-ingress控制器中,seems是一个限制,它不支持rewrite-target注解。如果该线程是当前线程,则必须更新应用程序以使用路径,或者必须放弃gce-ingress并使用nginx-ingress

lb3vh1jj

lb3vh1jj2#

你可以使用nginx ingress,因为GKE ingress中还没有对rewrite-target annotation的支持。
docs之后安装nginx ingress。按如下所示更改入口资源

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: connection
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - path: /app1
        backend:
          serviceName: app1
          servicePort: 8080
      - path: /app2
        backend:
          serviceName: app2
          servicePort: 80
5m1hhzi4

5m1hhzi43#

你可以通过经典的负载均衡器来实现这一点,只要端点存在于你部署的应用中,比如/app 1和/app 2。
你不能使用GKE ingress,你需要使用一个经典的负载均衡器和独立的NEGs。
这里有记录
是这样的-
1.确保您的服务使用独立的NEG。
1.确保通过端点的helthcheck。

相关问题