GKE Ingress 健康检查在入口上失败但在 Loadbalncer 上成功

GKE Ingress health check failed on ingress but succeed on Loadbalncer

在 GKE 上,我的部署工作正常,状态 运行 和运行状况检查正常: 这里是:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: erp-app
  labels:
    app: erp-app
    switch: app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: erp-app
  template:
    metadata:
      labels:
        app: erp-app
    spec:
      containers:
        - name: erp-container
          # Extract this from Google Container Registry
          image: gcr.io/project/project:latest
          imagePullPolicy: Always
          env:
          ports:
            - containerPort: 8080
          livenessProbe:
            failureThreshold: 10
            httpGet:
              path: /
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 150
            periodSeconds: 30
            successThreshold: 1
            timeoutSeconds: 30
          readinessProbe:
            failureThreshold: 10
            httpGet:
              path: /
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 150
            periodSeconds: 30
            successThreshold: 1
            timeoutSeconds: 20

然后,我创建了一个服务,将端口 8080 映射到 80

apiVersion: v1
kind: Service
metadata:
    labels:
        app: erp-app
    name: erp-loadbalancer
spec:
    ports:
        - port: 80
          protocol: TCP
          targetPort: 8080
    selector:
        app: erp-app
    sessionAffinity: None
    type: NodePort

然后,GKE Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
    name: app-ingress
    annotations:
        networking.gke.io/managed-certificates: managed-cert
        kubernetes.io/ingress.class: "gce"
spec:
    defaultBackend:
        service:
            name: erp-loadbalancer
            port:
                number: 80

事情是,入口不想工作,因为后端健康检查没有通过。如果我在 gcloud (https://console.cloud.google.com/compute/healthChecks) 上检查运行状况检查,我已经在 / 上为 http 端口 80 创建了(在此路径上,应用程序服务于 200) 如果我强制它是 tcp,那么健康检查通过。但是 google 自动将其切换回 http,从而导致 404。

我的问题是:我的服务器在使用外部负载均衡器时可用而在使用入口时不可用时配置有什么问题? (后端不健康状态)

答案:

我的页面 / 正在向 /login.jsp

发送 301 redirect

301 不是 GCP 健康检查的有效状态代码

所以我将它和我的 readinessProb 更改为 /login.jsp,这使得整个入口工作正常