当前位置: 首页 > 知识库问答 >
问题:

使用容器本机负载平衡的GKE入口无法检测健康检查(字段'resource.httpHealthCheck'的值无效)

单耘豪
2023-03-14

我正在Google Kubernetes引擎上运行一个集群,目前我正在尝试从使用具有外部负载平衡(和NodePort服务)的入口切换到使用具有容器本机负载平衡(和ClusterIP服务)的入口,遵循以下文档:容器本机负载平衡

为了与我的服务通信,我使用了以下入口配置,在使用NodePort服务而不是ClusterIP时,该配置可以正常工作:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: mw-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: mw-cluster-ip
    networking.gke.io/managed-certificates: mw-certificate
    kubernetes.io/ingress.allow-http: "false"
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: billing-frontend-service
              servicePort: 80
          - path: /auth/api/*
            backend:
              serviceName: auth-service
              servicePort: 8083

现在,在文档之后,我不再使用readinessProbe作为容器部署的一部分作为健康检查,而是将ClusterIP服务与BackendConfig结合使用。对于每个部署,我都使用如下服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: auth
  name: auth-service
  namespace: default
  annotations:
    cloud.google.com/backend-config: '{"default": "auth-hc-config"}'
spec:
  type: ClusterIP
  selector:
    app: auth
  ports:
    - port: 8083
      protocol: TCP
      targetPort: 8083

和后端配置:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: auth-hc-config
spec:
  healthCheck:
    checkIntervalSec: 10
    port: 8083
    type: http
    requestPath: /auth/health

作为参考,这是readinessProbe以前的样子:

          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /auth/health
              port: 8083
              scheme: HTTP
            periodSeconds: 10

现在来看实际问题。我首先部署了容器和服务,它们似乎启动得很好。然而,入口似乎没有正确地进行健康检查,并在云控制台中显示这一点:

Error during sync: error running backend syncing routine: error ensuring health check: googleapi: Error 400: Invalid value for field 'resource.httpHealthCheck': ''. HTTP healthCheck missing., invalid

集群和节点池正在运行GKE版本1.17.6-gke.11,因此不需要注释cloud.google.com/neg:'{"ingress": true}'。我已经检查过并且服务注释正确:

Annotations:       cloud.google.com/backend-config: {"default": "auth-hc-config"}
                   cloud.google.com/neg: {"ingress":true}
                   cloud.google.com/neg-status: {"network_endpoint_groups":{"8083":"k8s1-2078beeb-default-auth-service-8083-16a14039"},"zones":["europe-west3-b"]}

共有1个答案

施敏达
2023-03-14

我发现了我的问题。显然BackendConfig的type属性区分大小写。一旦我将其从超文本传输协议更改为HTTP,它在我重新创建入口后就工作了。

 类似资料:
  • 我有一个ECS集群,它有多个节点(任务定义),由应用程序负载平衡器前置。在负载平衡器和容器级别(在任务定义内)配置健康检查有意义吗? 负载平衡器对每个注册的目标运行配置的健康检查,以便注销故障节点。在容器级别设置健康检查可以完成相同的事情:ECS将注销任何未通过健康检查的容器(根据您的配置)。ECS将始终实例化更多任务定义实例,以满足您所需的计数。 对我来说,如果任务定义只有一个容器,那么只在负载

  • 我在GCP中建立了自己的Elasticsearch集群。群集已启动并运行良好。 集群包含两个客户端节点,我可以使用它们在内部访问并通过运行状况检查http://IP:9200/和

  • Google容器引擎(kubernetes) 使用我的Web服务器应用程序(Torando/python)部署/pod kubernetes中Web服务器服务的入口-它在GCP中创建了负载均衡器 负载均衡器中的后端服务,后端是Web服务器 指向后端服务器的前端 将自定义域和子域引导到相关后端的主机和路径规则 防火墙规则设置为由入口创建 当我创建上述所有内容时,我使用正确的端口和所有内容创建了一个新

  • 根据以下官方文件,我在GKE上安装了Kubernetes入口控制器。 入口控制器运行良好。 它自动创建TCP负载平衡器、健康检查和防火墙规则。我的kubernetes群集有3个节点。有趣的是,有两次健康检查失败。它传递给入口控制器正在运行的实例。我调试了它,但没有找到任何线索。谁能帮我一下吗。

  • 我们已经在Google Cloud中设置了Wordpress(如果有关系,请在Google Container Engnine中设置库伯内特斯)并配置了HTTP负载均衡器。作为执行此操作的一部分,我们设置了一个健康检查,配置如下: 但奇怪的是,当我跟踪Wordpress实例的日志时,它看起来像这样: 也就是说,看起来健康检查每隔一秒发送一次(甚至更多?)。为什么会这样?

  • 我试图在谷歌云上设置网络负载均衡器,但健康检查总是返回不健康的结果。 我给你我遵循的步骤 > 我创建了两个windows Server 2012 R2实例 我检查了端口80在这两个实例上是否对公众开放 我创建了转发规则,谷歌云给了我一个外部IP 我在两个服务器实例的网络环回接口中设置了外部IP 我创建了一个网络路由,用于转发两个实例上的流量(路由菜单) 我为169.254.169.254/32(网