健康检查无法解析 GKE 集群中托管的 ClamAV

问题描述 投票:0回答:1

无法解决 GKE 集群中托管于端口 3310、7357 的 clamAV:1.2 部署的运行状况检查相关问题。

面对一些后端服务处于UNHEALTHY状态,在定义的服务中添加路由路径后的入口。

我已经通过 部署文件在 GKE 集群中部署了 clamAV:1.2 docker 镜像。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: clam-av
spec:
  replicas: 1
  selector:
    matchLabels:
      run: clam-av
  template:
    metadata:
      labels:
        run: clam-av
    spec:
      nodeSelector:
        cloud.google.com/gke-nodepool: XXX-XXX-pool
      terminationGracePeriodSeconds: 60
      containers:
      - name: clamav-container
        image: clamav/clamav:1.2
        resources:
          requests:
            cpu: 200m
            memory: 1Gi
        imagePullPolicy: Always       
        ports:
        - containerPort: 3310
        # - containerPort: 7357
       

为此部署创建了服务文件

apiVersion: v1
kind: Service
metadata:
  name: clam-av-service
  annotations:
    cloud.google.com/backend-config: '{"default": "backend-for-clamAV"}'
spec:
  selector:
    run: clam-av
  ports:
  - name: http3310
    protocol: TCP
    port: 80
    targetPort: 3310
  # - name: http7357
  #   protocol: TCP
  #   port: 80
  #   targetPort: 7357
  type: ClusterIP

还创建了一个BackendConfig:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: backend-for-clamAV
spec:
  timeoutSec: 150
  connectionDraining:
    drainingTimeoutSec: 150
  healthCheck:
    checkIntervalSec: 15
    port: 80
    type: HTTP
    requestPath: /
    healthyThreshold: 1
    unhealthyThreshold: 3
    timeoutSec: 15

尝试将spec.healthcheck.type设置为TCP,因为clamAV 3310是TCP连接。但 GCP 入口不支持 TCP。

任何解决此问题的建议将不胜感激。谢谢你!

yaml google-kubernetes-engine kubernetes-ingress kubernetes-health-check clamav
1个回答
0
投票

错误消息是

Some backend services are in UNHEALTHY
状态,表明只有少数后端受到影响,而不是
all backend services are in UNHEALTHY state.

尝试以下故障排除步骤来解决问题

  1. 检查所有 Pod 是否正在运行,Pod 中的所有容器均已准备就绪且 Pod 状态为“正在运行”。使用以下命令。

    $ kubectl 获取 po -n

    使用以下命令检查可疑 Pod 的日志:

    $ kubectl 日志 -c

    一般来说,您应该检查指向负载均衡器的所有 Pod。

  2. 确认 livenessProbe 和 readinessProbe 是否配置正确且响应为 200。

    文档中所述:

目前,所有服务后端必须满足以下任一要求才能通过 GCE 负载均衡器发送给它的 HTTP 健康检查: 1. 在“/”上响应 200。内容并不重要。 2. 在支持服务的 Pod 上公开任意 URL 作为就绪探针。

确保 readinessProbe 指向您向 Ingress 公开的同一端口。

  1. 描述您的入口 $ kubectl 描述入口 并检查后端。

  2. 通过运行命令

    netstat -tnl \| grep 80
    检查服务是否正确侦听端口 80。

  3. 检查后端服务的健康检查日志,这将返回有助于进一步调试的响应代码。

© www.soinside.com 2019 - 2024. All rights reserved.