Jas*_*ngh 8 networking kubernetes kubernetes-service
我有一个裸机Kubernetes定制设置(手动使用Kubernetes艰难地设置集群)。一切似乎正常,但我无法从外部访问服务。
我可以在curl时获得服务列表:
https://<ip-addr>/api/v1/namespaces/kube-system/services
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试代理时(使用kubectl proxy,也使用<master-ip-address>:<port>):
https://<ip-addr>/api/v1/namespaces/kube-system/services/toned-gecko-grafana:80/proxy/
Run Code Online (Sandbox Code Playgroud)
我得到:
Error: 'dial tcp 10.44.0.16:3000: connect: no route to host'
Trying to reach: 'http://10.44.0.16:3000/'
Run Code Online (Sandbox Code Playgroud)
即使我正常卷曲,能够解决此问题,请检查以下内容。http://10.44.0.16:3000/我也会遇到相同的错误。这是我是否从安装Kubernetes的VM内部卷曲的结果。
我可以使用NodePort从外部访问我的服务。
如果通过Nginx-Ingress公开我的服务,则可以访问它们。
我将Weave用作CNI,并且日志很正常,除了开始时有几条关于它无法访问命名空间的日志行(RBAC错误)。尽管那之后日志还不错。
使用CoreDNS,日志看起来很正常。APIServer和Kubelet日志看起来很正常。Kubernetes-Events看起来也很正常。
附加说明:我分配的DNS服务IP是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": {
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定如何调试它,即使某些指向正确方向的指针也会有所帮助。如果还有其他要求,请告诉我。
来自的输出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
Run Code Online (Sandbox Code Playgroud)
编辑:
事实证明kube-dns,尽管有CoreDNS运行,但由于某种原因我没有运行服务。如前所述:https : //github.com/kubernetes/kubeadm/issues/1056#issuecomment-413235119
现在,我可以成功地从VM内部卷曲了,但是proxy-access仍然给我同样的错误:No route to host。我不确定为什么或如何解决此问题,因为我在这里看不到DNS,但它解决了该问题。也希望对此有任何可能的解释。
小智 5
我遇到了同样的问题并通过运行以下命令解决了它:
iptables --flush
iptables -tnat --flush
systemctl stop firewalld
systemctl disable firewalld
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
当您使用 时kubectl proxy,默认情况下您应该使用127.0.0.1:8001HTTP Kube API URL。然后,您的请求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
另外,请确保您在 kube 节点上安装了 socat。