【问题标题】:Unable to access to service from kubernetes master node无法从 Kubernetes 主节点访问服务
【发布时间】:2020-09-02 15:00:53
【问题描述】:
[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 上的 Curl 成功获取集群 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

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

【问题讨论】:

  • 你能从主节点尝试curl -m 2 -v -s http://pod1service.default.svc吗?
  • 如果您尝试从集群外部(甚至从您的一个节点的控制台)访问服务,NodePort 服务会更好地满足您的需求吗?
  • [root@kubemaster ~]# curl -m 2 -v pod1service.default.svc * 无法解析主机:pod1service.default.svc;未知错误 * 正在关闭连接 0
  • 大卫,是的,这是真的.. 但我们在设置中遇到的实际问题是“无法从集群中访问集群 ip”
  • 大卫,请为我澄清这个疑问.. serviceip:port 应该可以从 pod 内部访问还是从 k8 节点访问?

标签: docker kubernetes kubernetes-service project-calico


【解决方案1】:

首先,您应该始终使用服务 DNS 而不是集群/动态 IP 来访问部署的应用程序。服务 DNS 将是 ..svc.cluster.localcluster.local 是默认的 Kubernetes 集群名称(如果未更改)否则。

现在谈到服务可访问性,可能是 DNS 问题。您可以尝试检查 kube-system 命名空间中的 kube-dns pod 日志。此外,尝试从独立 pod 卷曲。如果这样的话。

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

kubectl exec -it bastion bash

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

如果不是,进一步的问题是,集群在哪里以及它是如何创建的?

【讨论】:

    【解决方案2】:

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

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

    问题:在部署服务并执行Kubectl get service 后,它为我提供了该服务的ClusterIP 和一个端口(顺便说一句,我在编写服务时使用NodePort 而不是集群IP .yaml)。但是当在那个 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 并且我能够得到输出。

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 2020-07-15
      • 2016-11-17
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多