【问题标题】:GKE Ingress health check failed on ingress but succeed on LoadbalncerGKE Ingress 健康检查在入口上失败但在 Loadbalncer 上成功
【发布时间】:2022-11-25 01:31:53
【问题描述】:

在 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,那么健康检查通过。但是谷歌会自动将其切换回 http,从而导致 404。

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

【问题讨论】:

  • 我完全不明白你需要什么。您需要配置哪个 TCP 或 HTTP?请总结一下您的需求,谢谢。
  • 这回答了你的问题了吗? Why GKE Ingress controller gives 404 error
  • @TimChiang 对不起,我提出了我的问题。我需要配置 Ingress 以便我可以设置 ssl 证书
  • @AlexG 不幸的是,在我的例子中,入口没有设置好,因为它显示:后端不可用
  • 您可以根据类似的问题线程12考虑 redinessProbe 选项。确保 readinessProbe 指向您向 Ingress 公开的同一端口。

标签: google-cloud-platform google-kubernetes-engine gke-networking


【解决方案1】:

回答:

我的页面 / 正在向 /login.jsp 发送 301 redirect

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

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

【讨论】:

    【解决方案2】:

    交叉共享,以防有人遇到同样的问题:

    https://stackoverflow.com/a/74564439/4547221

    长话短说GCP 将自动创建基于readinessProbe 的健康检查,否则,将使用根/

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2020-03-01
      • 1970-01-01
      • 2020-06-25
      • 2019-05-05
      • 1970-01-01
      • 2022-01-24
      • 2020-12-18
      • 2019-12-22
      相关资源
      最近更新 更多