【问题标题】:Kubernetes readness cannot visit service by DNSKubernetes readness 无法通过 DNS 访问服务
【发布时间】:2019-04-08 06:44:27
【问题描述】:

我将 Elastic Search 和 Fluentd 部署在同一命名空间 test 中,并在下面编写配置以确保 Fluentd 可以访问 Elastic serach:

        livenessProbe:
          failureThreshold: 5
          httpGet:
            host: elasticsearch-logging
            path: /
            port: 9200
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1

这不起作用,所以我使用了整个 DNS 名称,但仍然失败:

Readiness probe failed: Get http://elasticsearch-logging.test.svc.cluster.local:9200/: dial tcp: lookup elasticsearch-logging.test.svc.cluster.local: no such host

我删除了 liveness 部分并在 Fluentd pod 中使用 curl,这很有效:

root@fluentd-es-2dvmf:/# curl http://elasticsearch-logging:9200/
{
  "name" : "elasticsearch-logging-0",
  "cluster_name" : "skydiscovery-es-cluster",
  "cluster_uuid" : "fr3oSzpHT_qP9HQJ1WygnA",
  "version" : {
    "number" : "6.2.4",
    "build_hash" : "ccec39f",
    "build_date" : "2018-04-12T20:37:28.497551Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

为什么他们的行为不同?

有什么办法吗?

【问题讨论】:

    标签: networking kubernetes kube-dns


    【解决方案1】:

    请验证您的部署。
    在描述中我们可以看到“livenessProbe”,而在“错误部分”中有“Readiness probe”。

    从“fluentd”pod(集群 IP)的角度来看,服务名称ip地址都是已知的(如您所见,按名称或按 IP 地址执行 curl)。

    Kubelet节点)的角度来看(在“活跃度探测”期间)请改用“服务 ip 地址”。
    出于测试目的,您可以将“服务 IP 地址”和“服务名称”添加到您已知的 /etc/hosts 文件中。 请分享您的结果。

    【讨论】:

      【解决方案2】:

      这是一个关于探测的潜规则,详情参考PR。 与任何错误设置无关。

      将 pod ip 和服务名称映射到 /etc/hosts 可以工作,因为主机可以连接到 pod ip 但无法解析服务名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-16
        • 2017-10-02
        • 2015-12-21
        • 2021-01-09
        • 2021-05-23
        • 2021-09-24
        • 1970-01-01
        • 2019-07-26
        相关资源
        最近更新 更多