使用 Ingress Google Cloud 获取“响应 404(后端未找到),路径的服务规则不存在”

Ama*_*man 10 google-cloud-platform kubernetes google-kubernetes-engine kubernetes-ingress

我希望部署在 kubernetes 服务上的后端服务能够使用路径 /sso-dev/ 的入口进行访问,因为我已经在 kubernetes 容器上部署了我的服务,下面提到了部署、服务和入口清单,但是在访问入口时路径为 /sso-dev/ 的负载均衡器 api 会抛出“响应 404(后端未找到),路径的服务规则不存在”错误

我需要帮助才能访问后端服务,该服务与 kubernetes 容器负载平衡 IP 配合良好。

这是我的入口配置

  apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        ingress.kubernetes.io/backends: '{"k8s-be-30969--6d0e236a1c7d6409":"HEALTHY","k8s1-6d0e236a-default-sso-dev-service-80-849fdb46":"HEALTHY"}'
        ingress.kubernetes.io/forwarding-rule: k8s2-fr-uwdva40x-default-my-ingress-h98d0sfl
        ingress.kubernetes.io/target-proxy: k8s2-tp-uwdva40x-default-my-ingress-h98d0sfl
        ingress.kubernetes.io/url-map: k8s2-um-uwdva40x-default-my-ingress-h98d0sfl
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"networking.k8s.io/v1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/backend-protocol":"HTTP","nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"my-ingress","namespace":"default"},"spec":{"rules":[{"http":{"paths":[{"backend":{"service":{"name":"sso-dev-service","port":{"number":80}}},"path":"/sso-dev/*","pathType":"ImplementationSpecific"}]}}]}}
        nginx.ingress.kubernetes.io/backend-protocol: HTTP
        nginx.ingress.kubernetes.io/rewrite-target: /
      creationTimestamp: "2022-06-22T12:30:49Z"
      finalizers:
      - networking.gke.io/ingress-finalizer-V2
      generation: 1
      managedFields:
      - apiVersion: networking.k8s.io/v1
        fieldsType: FieldsV1
        fieldsV1:
          f:metadata:
            f:annotations:
              .: {}
              f:kubectl.kubernetes.io/last-applied-configuration: {}
              f:nginx.ingress.kubernetes.io/backend-protocol: {}
              f:nginx.ingress.kubernetes.io/rewrite-target: {}
          f:spec:
            f:rules: {}
        manager: kubectl-client-side-apply
        operation: Update
        time: "2022-06-22T12:30:49Z"
      - apiVersion: networking.k8s.io/v1
        fieldsType: FieldsV1
        fieldsV1:
          f:metadata:
            f:annotations:
              f:ingress.kubernetes.io/backends: {}
              f:ingress.kubernetes.io/forwarding-rule: {}
              f:ingress.kubernetes.io/target-proxy: {}
              f:ingress.kubernetes.io/url-map: {}
            f:finalizers:
              .: {}
              v:"networking.gke.io/ingress-finalizer-V2": {}
          f:status:
            f:loadBalancer:
              f:ingress: {}
        manager: glbc
        operation: Update
        subresource: status
        time: "2022-06-22T12:32:13Z"
      name: my-ingress
      namespace: default
      resourceVersion: "13073497"
      uid: 253e067f-0711-4d24-a706-497692dae4d9
    spec:
      rules:
      - http:
          paths:
          - backend:
              service:
                name: sso-dev-service
                port:
                  number: 80
            path: /sso-dev/*
            pathType: ImplementationSpecific
    status:
      loadBalancer:
        ingress:
        - ip: 34.111.49.35
Run Code Online (Sandbox Code Playgroud)

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2022-06-22T08:52:11Z"
  generation: 1
  labels:
    app: sso-dev
  managedFields:
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:labels:
          .: {}
          f:app: {}
      f:spec:
        f:progressDeadlineSeconds: {}
        f:replicas: {}
        f:revisionHistoryLimit: {}
        f:selector: {}
        f:strategy:
          f:rollingUpdate:
            .: {}
            f:maxSurge: {}
            f:maxUnavailable: {}
          f:type: {}
        f:template:
          f:metadata:
            f:labels:
              .: {}
              f:app: {}
          f:spec:
            f:containers:
              k:{"name":"cent-sha256-1"}:
                .: {}
                f:image: {}
                f:imagePullPolicy: {}
                f:name: {}
                f:resources: {}
                f:terminationMessagePath: {}
                f:terminationMessagePolicy: {}
            f:dnsPolicy: {}
            f:restartPolicy: {}
            f:schedulerName: {}
            f:securityContext: {}
            f:terminationGracePeriodSeconds: {}
    manager: GoogleCloudConsole
    operation: Update
    time: "2022-06-22T08:52:11Z"
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:deployment.kubernetes.io/revision: {}
      f:status:
        f:availableReplicas: {}
        f:conditions:
          .: {}
          k:{"type":"Available"}:
            .: {}
            f:lastTransitionTime: {}
            f:lastUpdateTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"Progressing"}:
            .: {}
            f:lastTransitionTime: {}
            f:lastUpdateTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
        f:observedGeneration: {}
        f:readyReplicas: {}
        f:replicas: {}
        f:updatedReplicas: {}
    manager: kube-controller-manager
    operation: Update
    subresource: status
    time: "2022-06-22T11:51:22Z"
  name: sso-dev
  namespace: default
  resourceVersion: "13051665"
  uid: c8732885-b7d8-450c-86c4-19769638eb2a
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: sso-dev
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: sso-dev
    spec:
      containers:
      - image: us-east4-docker.pkg.dev/centegycloud-351515/sso/cent@sha256:64b50553219db358945bf3cd6eb865dd47d0d45664464a9c334602c438bbaed9
        imagePullPolicy: IfNotPresent
        name: cent-sha256-1
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 3
  conditions:
  - lastTransitionTime: "2022-06-22T08:52:11Z"
    lastUpdateTime: "2022-06-22T08:52:25Z"
    message: ReplicaSet "sso-dev-8566f4bc55" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  - lastTransitionTime: "2022-06-22T11:51:22Z"
    lastUpdateTime: "2022-06-22T11:51:22Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  observedGeneration: 1
  readyReplicas: 3
  replicas: 3
  updatedReplicas: 3
Run Code Online (Sandbox Code Playgroud)

服务.yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/neg: '{"ingress":true}'
    cloud.google.com/neg-status: '{"network_endpoint_groups":{"80":"k8s1-6d0e236a-default-sso-dev-service-80-849fdb46"},"zones":["us-central1-c"]}'
  creationTimestamp: "2022-06-22T08:53:32Z"
  finalizers:
  - service.kubernetes.io/load-balancer-cleanup
  labels:
    app: sso-dev
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:labels:
          .: {}
          f:app: {}
      f:spec:
        f:allocateLoadBalancerNodePorts: {}
        f:externalTrafficPolicy: {}
        f:internalTrafficPolicy: {}
        f:ports:
          .: {}
          k:{"port":80,"protocol":"TCP"}:
            .: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
        f:selector: {}
        f:sessionAffinity: {}
        f:type: {}
    manager: GoogleCloudConsole
    operation: Update
    time: "2022-06-22T08:53:32Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:finalizers:
          .: {}
          v:"service.kubernetes.io/load-balancer-cleanup": {}
      f:status:
        f:loadBalancer:
          f:ingress: {}
    manager: kube-controller-manager
    operation: Update
    subresource: status
    time: "2022-06-22T08:53:58Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:cloud.google.com/neg-status: {}
    manager: glbc
    operation: Update
    subresource: status
    time: "2022-06-22T12:30:49Z"
  name: sso-dev-service
  namespace: default
  resourceVersion: "13071362"
  uid: 03b0cbe6-1ed8-4441-b2c5-93ae5803a582
spec:
  allocateLoadBalancerNodePorts: true
  clusterIP: 10.32.6.103
  clusterIPs:
  - 10.32.6.103
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - nodePort: 30584
    port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: sso-dev
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 104.197.93.226
Run Code Online (Sandbox Code Playgroud)

负载均衡器

Leo*_*Leo 3

您需要在入口中将 pathType 更改为 Prefix,如下所示:

pathType: Prefix
Run Code Online (Sandbox Code Playgroud)

因为我注意到您正在使用pathType: ImplementationSpecific. 使用这个值,匹配取决于IngressClass,所以我认为对于您的情况pathType Prefix应该更有帮助。此外,您可以在此链接中找到有关 kubernetes 支持的入口路径类型的更多信息。