Google Kubernetes入口健康检查总是失败

Google Kubernetes入口健康检查总是失败,kubernetes,google-cloud-platform,google-kubernetes-engine,kubernetes-ingress,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Kubernetes Ingress,我已经在端口80上配置了一个通过apache公开的web应用程序pod。我无法配置从internet访问的服务+入口。问题是后端服务总是报告为不健康 吊舱配置: apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: name: webapp name: webapp namespace: my-app spec: replicas: 1 selector: matchLabels:

我已经在端口80上配置了一个通过apache公开的web应用程序pod。我无法配置从internet访问的服务+入口。问题是后端服务总是报告为不健康

吊舱配置:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    name: webapp
  name: webapp
  namespace: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      name: webapp
  template:
    metadata:
      labels:
        name: webapp
    spec:
      containers:
      - image: asia.gcr.io/my-app/my-app:latest
        name: webapp
        ports:
        - containerPort: 80
          name: http-server
服务配置:

apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  type: NodePort
  selector:
    name: webapp
  ports:
    - protocol: TCP
      port: 50000
      targetPort: 80
入口配置:

kind: Ingress
metadata:
  name: webapp-ingress
spec:
  backend:
    serviceName: webapp-service
    servicePort: 50000
这导致后端服务报告不健康

运行状况检查设置:

Path: /
Protocol: HTTP
Port: 32463
Proxy protocol: NONE

附加信息:我尝试了一种不同的方法,将部署公开为带有外部IP的负载平衡器,效果非常好。尝试使用NodePort+入口时,此问题仍然存在。

对于GKE,在创建入口时会自动创建负载平衡器上的运行状况检查。由于HC是自动创建的,所以防火墙规则也是自动创建的

由于未配置readinessProbe,因此LB创建了一个默认HC(您列出的那个)。为了正确地调试,您需要隔离故障点所在的位置

首先,确保你的吊舱正常服务于交通

kubectl exec[pod_name]--wget localhost:80

如果应用程序内置了
curl
,则可以使用它而不是
wget
。 如果应用程序既没有wget也没有curl,请跳到下一步

  • 获取以下输出并跟踪输出: kubectl get po-l name=webapp-o wide
    kubectl获得svc webapp服务

  • 你需要保留服务和吊舱集群

  • SSH到集群中的一个节点并运行
    sudotoolboxbash

  • 安装卷曲:

  • 易于安装卷曲`

  • 测试POD以确保它们为群集中的流量提供服务:
  • curl-I[pod_clusterIP]:80

    这需要返回一个200响应

  • 测试服务:
  • curl-I[service_clusterIP]:80

    如果pod未返回200响应,则表明容器工作不正常或pod上的端口未打开

    如果pod正常工作,但服务不正常,则iptables中的路由存在问题,该路由由kube代理管理,这将是集群的问题


    最后,如果pod和服务都正常工作,那么负载平衡器的健康检查就有问题,谷歌也需要调查这个问题。

    这是什么样的健康检查?防火墙是否允许通信到此端口?@suren-运行状况检查由负载平衡器在创建入口时配置。防火墙规则也与此一起创建,允许访问。这很奇怪。你等了多久了?通常需要3-4分钟才能显示一个健康的后端。你检查过防火墙规则吗?端口32463是否打开?32463应该是服务的节点端口,应该为健康检查IP的整个节点端口范围自动创建防火墙规则,这不应该是防火墙问题。您是否可以帮助解决此类奇怪情况?可能进行屏幕共享吗?我了解到,当存在入口时,准备就绪探测器工作不正常。对我来说,它在重新部署入口时也不起作用。其他一些人报告说,需要删除健康检查,因为即使在修改后,它们也做了错误的事情。我最终让/和/健康Z返回了200,并且它起作用了。我认为这是可以解决的。。