Кубернетес: нет пути к хозяину - PullRequest
0 голосов
/ 03 октября 2018

У меня есть пользовательская настройка Bare-Metal Kubernetes (настройка кластера вручную с использованием Kubernetes Hard Way).Кажется, все работает, но я не могу получить доступ к службам извне.

Я могу получить список служб, когда curl:

https://<ip-addr>/api/v1/namespaces/kube-system/services

Однако, когда я пытаюсь прокси (используя kubectl proxy,а также используя <master-ip-address>:<port>):

https://<ip-addr>/api/v1/namespaces/kube-system/services/toned-gecko-grafana:80/proxy/

я получаю:

Error: 'dial tcp 10.44.0.16:3000: connect: no route to host'
Trying to reach: 'http://10.44.0.16:3000/'
  • Даже если я обычно скручиваю http://10.44.0.16:3000/ я получаюта же ошибка.Это результат того, свернулся ли я изнутри виртуальной машины, на которой установлен Kubernetes. Я смог решить эту проблему, проверьте ниже.

  • Я могу получить доступ к своим службам извне, используя NodePort.

  • Я могу получить доступ к своим услугам, если выставлю их через Nginx-Ingress.

  • Я использую Weave в качестве CNI, и журналы были нормальными, кромепара строк журнала о том, что он не может получить доступ к пространствам имен (ошибка RBAC).Хотя после этого журналы были в порядке.

  • При использовании CoreDNS журналы выглядят нормально.Логи APIServer и Kubelet выглядят нормально.События Kubernetes тоже выглядят нормально.

  • Дополнительное примечание : назначенный мне IP-адрес службы DNS 10.3.0.10, а службаДиапазон IP-адресов: 10.3.0.0/24, а сеть POD - 10.2.0.0/16.Я не уверен, что это 10.44.x.x или откуда оно.

Вот вывод одной из служб:

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "kubernetes-dashboard",
    "namespace": "kube-system",
    "selfLink": "/api/v1/namespaces/kube-system/services/kubernetes-dashboard",
    "uid": "5c8bb34f-c6a2-11e8-84a7-00163cb4ceeb",
    "resourceVersion": "7054",
    "creationTimestamp": "2018-10-03T00:22:07Z",
    "labels": {
      "addonmanager.kubernetes.io/mode": "Reconcile",
      "k8s-app": "kubernetes-dashboard",
      "kubernetes.io/cluster-service": "true"
    },
    "annotations": {
      "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"addonmanager.kubernetes.io/mode\":\"Reconcile\",\"k8s-app\":\"kubernetes-dashboard\",\"kubernetes.io/cluster-service\":\"true\"},\"name\":\"kubernetes-dashboard\",\"namespace\":\"kube-system\"},\"spec\":{\"ports\":[{\"port\":443,\"targetPort\":8443}],\"selector\":{\"k8s-app\":\"kubernetes-dashboard\"}}}\n"
    }
  },
  "spec": {
    "ports": [
      {
        "protocol": "TCP",
        "port": 443,
        "targetPort": 8443,
        "nodePort": 30033
      }
    ],
    "selector": {
      "k8s-app": "kubernetes-dashboard"
    },
    "clusterIP": "10.3.0.30",
    "type": "NodePort",
    "sessionAffinity": "None",
    "externalTrafficPolicy": "Cluster"
  },
  "status": {
    "loadBalancer": {

    }
  }
}

Я не уверен, как отладить это, даже некоторые указатели в правильном направлении помогут. Если что-то еще требуется, пожалуйста, дайтея знаю.


Выход из kubectl get svc:

NAME                   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
coredns-primary        ClusterIP   10.3.0.10    <none>        53/UDP,53/TCP,9153/TCP   4h51m
kubernetes-dashboard   NodePort    10.3.0.30    <none>        443:30033/TCP            4h51m

РЕДАКТИРОВАТЬ:

Оказывается, я не сделалу меня есть служба kube-dns, работающая по какой-то причине, несмотря на то, что CoreDNS запущен. Это было как упомянуто здесь: https://github.com/kubernetes/kubeadm/issues/1056#issuecomment-413235119

Теперь я могу успешно свернуться изнутри виртуальной машины, но прокси-доступ все еще дает мне то же самоеошибка: No route to host. Я не уверен, почему или как это решило бы проблему, поскольку я не вижу здесь работающего DNS, но это исправило проблемы. Буду признателен за любые возможные объяснения по этому поводу.

1 Ответ

0 голосов
/ 03 октября 2018

Когда вы используете kubectl proxy, по умолчанию вы должны использовать 127.0.0.1:8001 в качестве URL-адреса HTTP Kube API.Затем ваши запросы к http://127.0.0.1:8001 дополняются заголовками аутентификации и передаются на сервер API.Таким образом, вы должны попробовать http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/toned-gecko-grafana:80/proxy/, а не с https и api ip

Также убедитесь, что у вас установлен socat на узлах kube.

...