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 A pu résoudre ce problème, vérifiez ci-dessous.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é.
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.
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.