Google Kubernetes Ingress健康检查总是失败



我已经在端口80上配置了一个通过apache公开的web应用程序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的负载均衡器,这非常有效。尝试使用NodePort+Ingress时,此问题仍然存在。

使用GKE,在创建入口时会自动创建负载平衡器上的健康检查。由于HC是自动创建的,因此防火墙规则也是自动创建的。

由于您没有配置readinesProbe,LB创建了一个默认的HC(您列出的那个(。为了正确地调试它,你需要隔离故障点在哪里

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

kubectl exec [pod_name] -- wget localhost:80

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

  1. 获取以下输出并跟踪输出:

    kubectl get po-l name=webapp-o wide
    kubectlget svc webapp服务

您需要保留服务和pod集群IP的

  1. SSH到集群中的节点并运行sudo toolbox bash

  2. 安装卷曲:

apt-get-install-ccurl`

  1. 测试pod以确保它们为集群内的流量提供服务:

curl-I[pod_clusterIP]:80

这需要返回一个200响应的

  1. 测试服务:

curl-I[service_clusterIP]:80

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

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

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

正如Patrick所提到的,检查将由GCP自动创建。默认情况下,GKE将使用readinessProbe.httpGet.path进行健康检查。

但是,如果没有配置readinessProbe,那么它将只使用根路径/,它必须返回HTTP 200 (OK)响应(但情况并非总是如此,例如,如果应用程序重定向到另一个路径,那么GCP健康检查将失败(。

相关内容

  • 没有找到相关文章

最新更新