【问题标题】:Why I cant access a kubernetes pod from other Nodes IP?为什么我无法从其他节点 IP 访问 kubernetes pod?
【发布时间】:2020-11-03 23:36:40
【问题描述】:

我在 Kubespray 的帮助下安装了 kubernetes 集群。 具有 3 个节点(2 个主节点和 1 个工作节点)的集群。 节点1 - 10.1.10.110, 节点2 - 10.1.10.111, 节点3 - 10.1.10.112

$ kubectl get nodes
NAME    STATUS   ROLES    AGE   VERSION
node1   Ready    master   12d   v1.18.5
node2   Ready    master   12d   v1.18.5
node3   Ready    <none>   12d   v1.18.5

我在 node1 (10.1.10.110) 中部署了这个 pod,并暴露了 nodeport 服务,如图所示。

NAMESPACE     NAME                                              READY   STATUS    RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES

default       pod/httpd-deployment-598596ddfc-n56jq             1/1     Running   0          7d21h   10.233.64.15   node1   <none>           <none>
---
NAMESPACE     NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE     SELECTOR

default       service/httpd-service               NodePort    10.233.16.84    <none>        80:31520/TCP             12d     app=httpd

服务说明

$ kubectl describe services -n default httpd-service
Name:                     httpd-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=httpd
Type:                     NodePort
IP:                       10.233.16.84
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31520/TCP
Endpoints:                10.233.64.15:80
Session Affinity:         None
External Traffic Policy:  Cluster

问题: 我可以从 node1:31520(实际部署 Pod 的位置)访问服务,但无法从其他节点(node2:31520(或)node3:31520)访问相同的服务

$curl http://10.1.10.110:31520
<html><body><h1>It Works!</h1></body></html>

but if I curl with other node IP, timed out response

$curl http://10.1.10.111:31520
curl (7): Failed connect to 10.1.10.111; Connection timed out

$curl http://10.1.10.112:31520
curl (7): Failed connect to 10.1.10.112; Connection timed out

谁能建议我缺少什么?

【问题讨论】:

    标签: docker kubernetes ansible kubespray


    【解决方案1】:

    理想情况下,您应该能够使用任何节点 IP 通过 NodePort 访问 pod。如果 kube-proxy 或 CNI 插件(calico 等)在您的集群中无法正常工作,则可能会导致无法通过未调度 Pod 的节点 IP 访问 pod。

    检查这个相关问题kubernetes: cannot access NodePort from other machines

    【讨论】:

      【解决方案2】:

      因为您在 10.1.10.110 上只有一个 pod

      您的 curl 错误,您没有在 111 和 112 节点上部署 pod,这就是端点无法正常工作的原因。只需在其他节点上执行curl http://10.1.10.110:31520 就可以了

      【讨论】:

      • 是的!我可以从所有节点执行“curl 10.1.10.110:31520”。那么要在所有节点中部署同一个 pod 的副本?我是 k8 集群的新手,如果我错了,请纠正我。
      • 是的,因为您使用的是节点端口。 nodeport 服务在节点 IP 上公开端口。如果要在整个集群上公开这个端口,需要使用ClusterIP - kubernetes.io/docs/concepts/services-networking/service
      • @SergioTanaka 这不是真的。 NodePort 服务在集群中的每个节点上使用 30000-32767 内的端口公开 ALSO,但其作用与 ClusterIP 相同。 Kumaran,如果您只能连接运行 pod 的节点,那么您的覆盖网络有问题。
      猜你喜欢
      • 2018-02-27
      • 2015-12-13
      • 2022-01-24
      • 2021-12-30
      • 2019-05-30
      • 2016-04-22
      • 1970-01-01
      • 2019-09-16
      • 2023-04-07
      相关资源
      最近更新 更多