web-dev-qa-db-fra.com

Kubernetes: aucune route vers l'hôte

J'ai une configuration personnalisée Bare-Metal Kubernetes (configuration manuelle du cluster à l'aide de Kubernetes à la dure). Tout semble fonctionner, mais je ne peux pas accéder aux services en externe.

Je peux obtenir la liste des services lorsque curl:

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

Cependant, lorsque j'essaie de proxy (en utilisant kubectl proxy, ainsi qu'en utilisant le <master-ip-address>:<port>):

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

Je reçois:

Error: 'dial tcp 10.44.0.16:3000: connect: no route to Host'
Trying to reach: 'http://10.44.0.16:3000/'
  • Même si je boucle normalement http://10.44.0.16:3000/ J'ai la même erreur. C'est le résultat si je recourbe de l'intérieur du VM où Kubernetes est installé. A pu résoudre ce problème, vérifiez ci-dessous.

  • Je peux accéder à mes services en externe à l'aide de NodePort.

  • Je peux accéder à mes services si je les expose via Nginx-Ingress.

  • J'utilise Weave comme CNI, et les journaux étaient normaux, à l'exception de quelques lignes de journal au début indiquant qu'il ne pouvait pas accéder aux espaces de noms (erreur RBAC). Bien que les journaux étaient bien après ça.

  • À l'aide de CoreDNS, les journaux semblent normaux. Les journaux APIServer et Kubelet semblent normaux. Les événements Kubernetes semblent également normaux.

  • Remarque supplémentaire: l'IP du service DNS que j'ai attribué est 10.3.0.10, et la plage d'adresses IP du service est: 10.3.0.0/24, et POD Network est 10.2.0.0/16. Je ne sais pas quoi 10.44.x.x est ou d'où vient-il.

Voici la sortie d'un des services:

{
  "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": {

    }
  }
}

Je ne sais pas comment déboguer cela, même certains pointeurs dans la bonne direction pourraient aider. Si quelque chose d'autre est requis, faites-le moi savoir.


Sortie de 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

MODIFIER:

Il s'avère que je n'avais pas kube-dns service en cours d'exécution pour une raison quelconque, malgré l'exécution de CoreDNS. C'était comme mentionné ici: https://github.com/kubernetes/kubeadm/issues/1056#issuecomment-413235119

Maintenant, je peux boucler de l'intérieur du VM avec succès, mais l'accès proxy me donne toujours la même erreur: No route to Host. Je ne sais pas pourquoi ni comment cela résoudrait le problème, car je ne vois pas le DNS en jeu ici, mais cela a résolu le problème. J'apprécierais également toute explication possible à ce sujet.

8

Lorsque vous utilisez kubectl proxy, par défaut, vous devez utiliser 127.0.0.1:8001 en tant qu'URL de l'API HTTP Kube. Vos demandes à http://127.0.0.1:8001 sont ensuite augmentés avec des en-têtes d'authentification et transmis au serveur API. Vous devriez donc essayer http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/toned-gecko-grafana:80/proxy/ plutôt qu'avec https et api ip

Assurez-vous également que socat est installé sur les nœuds kube.