Kubernetes readness не может посещать службу через DNS

#networking #kubernetes #kube-dns

#сеть #kubernetes #kube-dns

Вопрос:

Я развертываю 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
  

Я удалил часть живучести и использую curl во Fluentd pod, это работает:

 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"
}

  

Почему они ведут себя по-разному?

Есть ли какой-либо способ сделать это?

Ответ №1:

Пожалуйста, подтвердите свое развертывание.
В описании мы видим «Проверку работоспособности«, в то время как в «разделе ошибок» есть «Проверка готовности«.

С точки зрения модуля «fluentd» (кластерный IP) известны как имя службы, так и IP-адрес (как вы можете видеть, выполнение curl по имени или по IP-адресу).

С точки зрения Kubelet (узла) (во время «проверки работоспособности»), пожалуйста, используйте вместо этого «IP-адрес службы«.
В целях тестирования вы можете добавить «IP-адрес службы» и «имя службы» в ваш известный файл /etc /hosts. Пожалуйста, поделитесь своими результатами.

Ответ №2:

Это негласные правила о проверке, подробности см. в PR. Это не связано с какими-либо неправильными настройками.

Сопоставление IP-адреса модуля и имени службы с /etc/hosts может работать, поскольку хост может подключиться к IP-адресу модуля, но не может разрешить имя службы.