为什么我无法从其他节点 IP 访问 kubernetes pod?
Why I cant access a kubernetes pod from other Nodes IP?
我已经在 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
任何人都可以提出我所缺少的东西吗?
因为你在 10.1.10.110 上只有一个 pod
您的 curl 错误,您没有在 111 和 112 节点上部署 pod,这就是端点无法正常工作的原因。在其他节点上执行 curl http://10.1.10.110:31520
就可以了
理想情况下,您应该能够使用任何节点 IP 通过 NodePort 访问 pod。如果 kube-proxy 或 CNI 插件(calico 等)在您的集群中无法正常工作,那么它可能会导致无法通过未安排 Pod 的节点 IP 访问 Pod 的问题。
检查这个相关问题
我已经在 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
任何人都可以提出我所缺少的东西吗?
因为你在 10.1.10.110 上只有一个 pod
您的 curl 错误,您没有在 111 和 112 节点上部署 pod,这就是端点无法正常工作的原因。在其他节点上执行 curl http://10.1.10.110:31520
就可以了
理想情况下,您应该能够使用任何节点 IP 通过 NodePort 访问 pod。如果 kube-proxy 或 CNI 插件(calico 等)在您的集群中无法正常工作,那么它可能会导致无法通过未安排 Pod 的节点 IP 访问 Pod 的问题。
检查这个相关问题