【发布时间】:2019-03-08 06:12:11
【问题描述】:
我有一个 Bare-Metal Kubernetes 自定义设置(使用 Kubernetes the 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/'
即使我通常 curl能够解决这个问题,请检查以下内容。http://10.44.0.16:3000/我也会遇到同样的错误。这是我是否从安装了 Kubernetes 的 VM 内部 curl 的结果。我可以使用 NodePort 从外部访问我的服务。
如果我通过 Nginx-Ingress 公开服务,我可以访问它们。
我使用 Weave 作为 CNI,除了开头的几行关于它无法访问命名空间(RBAC 错误)的日志外,其他日志都是正常的。虽然在那之后日志很好。
使用 CoreDNS,日志看起来正常。 APIServer 和 Kubelet 日志看起来很正常。 Kubernetes-Events 看起来也很正常。
-
补充说明:我分配的DNS Service-IP是
10.3.0.10,服务IP范围是:10.3.0.0/24,POD网络是10.2.0.0/16.我不确定10.44.x.x是什么或它来自哪里。- 另外,我正在使用 Nginx-Ingress(Helm Chart:https://github.com/helm/charts/tree/master/stable/nginx-ingress)
这是其中一项服务的输出:
{
"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
现在我可以从 VM 内部成功 curl,但代理访问仍然给我同样的错误:No route to host。我不确定为什么或如何解决这个问题,因为我没有看到 DNS 在这里发挥作用,但无论如何它都解决了这个问题。也希望对此有任何可能的解释。
【问题讨论】:
-
代理时是指使用
kubectl proxy吗?或者只是代理端点。您在哪里运行curl请求?你也可以为kubectl get svc发布一些输出吗? -
proxy,我的意思是kubectl proxy和https://<master-id-addr>:<port>/api/v1/namespaces/kube-system/services/toned-gecko-grafana:80/proxy/在安装了 Kubernetes 的 VM 中运行的 Curl 请求。我已经发布了上面有问题的kubectl get svc的输出。 -
之前是否通过
kubectl proxy工作,但它不起作用? -
不,它从来没有奏效。几个小时前我刚刚设置了我的集群....另外,我更新了问题,请检查最后一部分/编辑。
-
另外,发布您的
kubectl proxy命令
标签: networking kubernetes kubernetes-service