【问题标题】:readinessProbe use DNS instead of IP Address for HostreadinessProbe 使用 DNS 而不是主机的 IP 地址
【发布时间】: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


【解决方案1】:

我想出了办法。

不用tcpSocket,只用exec。 在容器中执行你的 tcpCheck 脚本来检查 service:port 的可用性。

使用您的 init-container 与主容器共享脚本。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    相关资源
    最近更新 更多