Google Kubernetes入口运行状况检查始终失败

ulydmbyx  于 2022-11-28  发布在  Kubernetes
关注(0)|答案(2)|浏览(113)

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

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和工作完美。当尝试使用一个节点端口+入口,这个问题仍然存在。

kpbpu008

kpbpu0081#

使用GKE,在创建入口时会自动创建负载平衡器上的健康检查。由于HC是自动创建的,因此防火墙规则也是自动创建的。
由于您没有配置readinessProbe,因此LB创建了一个默认HC(您列出的HC)。要正确调试此HC,您需要隔离故障点。
首先,确保您的pod能够正常服务流量;
kubectl exec [pod_name] -- wget localhost:80
如果应用程序内置了curl,则可以使用它来代替wget。如果应用程序既没有wget也没有curl,则跳到下一步。
1.获取以下输出并跟踪输出:
kubectl获取po -l名称= Web应用程序-o宽
kubectl获取服务Web应用程序服务
您需要保留服务和Pod群集IP
1.通过SSH连接到集群中的节点,然后运行sudo toolbox bash
1.安装卷边:
apt-get安装旋度
1.测试Pod以确保它们为集群内的流量提供服务:
curl -I [单元群集IP]:80
这需要返回一个200响应
1.测试服务:
curl -I [服务群集IP]:80
如果Pod未返回200响应,则容器未正常工作或Pod上的端口未打开。
如果pod工作正常但服务不工作,则说明由kube-proxy管理的iptables中的路由存在问题,这可能是群集的问题。
最后,如果单元和服务都正常工作,则负载平衡器运行状况检查存在问题,Google需要调查该问题。

1l5u6lss

1l5u6lss2#

正如帕特里克提到的,检查将由GCP自动创建。默认情况下,GKE将使用readinessProbe.httpGet.path进行健康检查。
但如果没有配置readinessProbe,则它将只使用根路径/,该路径必须返回HTTP 200 (OK)响应(并不总是这样,例如,如果应用重定向到另一个路径,则GCP健康检查将失败)。

相关问题