无法从Kubernetes主节点访问服务

时间:2020-05-16 18:56:00

标签: docker kubernetes kubernetes-service project-calico

[root@kubemaster ~]# kubectl get pods -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP             NODE          NOMINATED NODE   READINESS GATES
pod1deployment-c8b9c74cb-hkxmq   1/1     Running   0          12s   192.168.90.1   kubeworker1   <none>           <none>

[root@kubemaster ~]# kubectl logs pod1deployment-c8b9c74cb-hkxmq
2020/05/16 23:29:56 Server listening on port 8080

[root@kubemaster ~]# kubectl get service -o wide
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE   SELECTOR
kubernetes    ClusterIP   10.96.0.1        <none>        443/TCP   13m   <none>
pod1service   ClusterIP   10.101.174.159   <none>        80/TCP    16s   creator=sai

在主节点上卷曲:

[root@kubemaster ~]# curl -m 2 -v -s http://10.101.174.159:80
* About to connect() to 10.101.174.159 port 80 (#0)
*   Trying 10.101.174.159...
* Connection timed out after 2001 milliseconds
* Closing connection 0

工作节点1上的卷对于集群IP(这是Pod正在运行的节点)成功完成了

[root@kubemaster ~]# ssh kubeworker1 curl -m 2 -v -s http://10.101.174.159:80
Hello, world!
Version: 1.0.0
Hostname: pod1deployment-c8b9c74cb-hkxmq

在其他辅助节点上卷曲也失败:

[root@kubemaster ~]# ssh kubeworker2 curl -m 2 -v -s http://10.101.174.159:80
* About to connect() to 10.101.174.159 port 80 (#0)
*   Trying 10.101.174.159...
* Connection timed out after 2001 milliseconds
* Closing connection 0

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,所以这就是我所做的并且奏效了:

简介:我正在为一个 2 节点集群运行 2 个虚拟机。 1 个主节点和 1 个工作节点。部署正在工作节点上运行。我想从主节点卷曲,以便我可以从在工作节点上的 pod 内运行的应用程序获得响应。为此,我在工作节点上部署了一项服务,然后将这些 pod 集暴露在集群中。

问题:在部署服务并执行 Kubectl get service 后,它为我提供了该服务的 ClusterIP 和一个端口(顺便说一句,我使用了 NodePort 而不是编写 service.yaml 时的集群 IP)。但是当在该 IP 地址和端口上卷曲时,它只是挂起,然后在一段时间后超时。

解决方案:然后我尝试查看层次结构。首先,我需要联系服务所在的节点,然后联系 NodePort 提供的端口(即 30000-32767 之间的端口),所以首先我做了 Kubectl get nodes -o wide 以获取所需节点的内部 IP 地址(我的是 10.0.1.4),然后我做了 kubectl get service -o wide 来获取端口(30000-32767 之间的端口)并将其卷曲。所以我的 curl 命令是 -> curl http://10.0.1.4:30669 并且我能够得到输出。

答案 1 :(得分:0)

首先,您应该始终使用服务DNS而不是群集/动态IP来访问已部署的应用程序。服务DNS将为 <服务名称>。<服务名称空间> .svc.cluster.local ,如果未更改, cluster.local 是默认的Kubernetes集群名称。除此以外。

现在可以访问服务了,这可能是DNS问题。您可以做的是尝试检查 kube-system 名称空间中的 kube-dns pod日志。另外,尝试从独立吊舱中卷曲。如果可以的话。

kubectl run --generator=run-pod/v1 bastion --image=busybox

kubectl exec -it bastion bash

curl -vvv pod1service.default.svc.cluster.local

如果没有其他问题,集群在哪里以及如何创建?

相关问题