无法从 kubernetes 主节点访问服务
Unable to access to service from kubernetes master node
[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
集群 IP 工作节点 1 上的卷曲成功(这是 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
Curl 在其他工作节点上也失败了:
[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
首先,您应该始终使用服务 DNS 而不是 Cluster/dynamic IP 来访问已部署的应用程序。服务 DNS 将是 < service-name >.< service-namespace >.svc.cluster.local,cluster.local 是默认 Kubernetes 集群名称,如果没有更改的话。
现在说到服务可访问性,可能是DNS问题。您可以做的是尝试检查 kube-dns pod 在 kube-system 命名空间中的日志。另外,尝试从独立的 pod 卷曲。如果可行的话。
kubectl run --generator=run-pod/v1 bastion --image=busybox
kubectl exec -it bastion bash
curl -vvv pod1service.default.svc.cluster.local
如果不是,进一步的问题是集群在哪里以及它是如何创建的?
我遇到了同样的问题所以这就是我所做的并且有效:
简介: 我是 运行 2 个虚拟机,用于 2 节点集群。 1 个主节点和 1 个工作节点。 Deployment 在工作节点上 运行。我想从主节点卷曲,以便我可以从我的应用程序 运行 在工作节点上的 pod 中获得响应。为此,我在工作节点上部署了一个服务,然后在集群内暴露了那些 pods 的集合。
问题: 部署服务并执行 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
并且我能够得到输出。
[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
集群 IP 工作节点 1 上的卷曲成功(这是 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
Curl 在其他工作节点上也失败了:
[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
首先,您应该始终使用服务 DNS 而不是 Cluster/dynamic IP 来访问已部署的应用程序。服务 DNS 将是 < service-name >.< service-namespace >.svc.cluster.local,cluster.local 是默认 Kubernetes 集群名称,如果没有更改的话。
现在说到服务可访问性,可能是DNS问题。您可以做的是尝试检查 kube-dns pod 在 kube-system 命名空间中的日志。另外,尝试从独立的 pod 卷曲。如果可行的话。
kubectl run --generator=run-pod/v1 bastion --image=busybox
kubectl exec -it bastion bash
curl -vvv pod1service.default.svc.cluster.local
如果不是,进一步的问题是集群在哪里以及它是如何创建的?
我遇到了同样的问题所以这就是我所做的并且有效:
简介: 我是 运行 2 个虚拟机,用于 2 节点集群。 1 个主节点和 1 个工作节点。 Deployment 在工作节点上 运行。我想从主节点卷曲,以便我可以从我的应用程序 运行 在工作节点上的 pod 中获得响应。为此,我在工作节点上部署了一个服务,然后在集群内暴露了那些 pods 的集合。
问题: 部署服务并执行 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
并且我能够得到输出。