【发布时间】:2020-04-30 23:55:30
【问题描述】:
我目前将我的 Nginx Pod readinessProbe 配置为监控 Redis 端口 6379,并在 redis-service (ClusterIP) 后面配置我的 redis-pod。
所以我的想法是通过使用 DNS 的 redis 服务监控 Redis 端口而不是 IP 地址。
当我使用readinessProbe.host: redis-service.default.svc.cluster.local 时,Nginx-pod 没有运行。当我描述 Nginx-pod $ kubectl describe pods nginx 时,我在事件部分发现以下错误:
Readiness probe failed: dial tcp: lookup redis-service.default.svc.cluster.local: no such host
只有当我使用 ClusterIP 而不是 DNS 时它才有效。
请帮我弄清楚如何使用 DNS 而不是 ClusterIP。
我的 Pod 文件:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
containers:
- image: nginx
name: nginx
livenessProbe:
httpGet:
path: /
port: 80
readinessProbe:
tcpSocket:
host: redis-service.default.svc.cluster.local
port: 6379
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
谢谢。
【问题讨论】:
-
我认为像这样探索其他服务通常没有意义。假设我们有一个非常慢的 Nginx,需要一分钟才能启动;是否因为 Redis 后备存储已启动而声称它已“准备就绪”?
-
@DavidMaze 是的,在我让用户访问 Nginx 之前,我需要先确保 Redis 正在运行并且能够接受数据包。我可以知道您推荐的方式是什么吗?
-
我同意@DavidMaze 的观点,这似乎是一种直接探测redis 的奇怪方法——尤其是因为这实际上 并没有测试nginx 服务。你是否有可能改为探测redis 通过 nginx?例如如果 nginx 应该将
/redis-endpoint上的请求路由到redis-service,那么只需将 nginx 就绪探针设置为获取/redis-endpoint。这样您就可以同时测试两者,而不必担心 redis 的 DNS/IP。
标签: nginx kubernetes redis