Kubernetes 活跃度探测 httpGet 架构无法正常工作

问题描述

我正在 kubernetes 上部署一些 Web 应用程序,我想为此应用程序设置活动探测。 当我使用 liveness probe 配置我的部署时,kubelet 会开始健康检查。我使用方案“HTTP”参数定义了 httpGet,但 kubelet 随机使用了 https 模式。

这是我的活性探针配置:

livenessProbe:
  failureThreshold: 4
  httpGet:
    path: /
    port: 80
    scheme: HTTP
  initialDelaySeconds: 40
  periodSeconds: 5
  successthreshold: 1
  timeoutSeconds: 2

这是 kubelet 的结果:

kubectl 描述 pod greenlight-7877dc58b7-6s78l

输出

警告不健康的 31 秒(x4 超过 46 秒)kubelet Liveness 探测失败:获取“https://10.244.4.182/”:拨打 tcp 10.244.4.182:443: 连接:连接被拒绝

Kubernetes 版本:v1.19.9

感谢帮助!

解决方法

由于您明确声明 livenessProbe 使用 HTTP,因此可能是您的应用程序将流量重定向到 HTTPS。确保您的应用程序在基本路径 200 OK 上返回 /,而不是重定向(任何 3xx 代码)。

您可以修复该问题,也可以使用 TCP probe

apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: k8s.gcr.io/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20