docker - 为什么我无法从其他节点 IP 访问 kubernetes pod?

标签 docker kubernetes ansible kubespray

我已经在 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

我将此 Pod 部署在 Node1 (10.1.10.110) 中,并公开了 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

任何人都可以建议我缺少什么吗?

最佳答案

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

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

关于docker - 为什么我无法从其他节点 IP 访问 kubernetes pod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62898469/

相关文章:

ansible - 如何在ansible playbook中取消设置http_proxy

windows - 在 Azure DevOps Windows 托管的生成代理中运行 Linux 容器

networking - Docker容器无法连接到另一个Docker容器打开的端口

java - 具有工作负载身份的 Google Cloud Java SDK?

kubernetes - Kubernetes NodePort Type Service 如何负载均衡到 pod

kubernetes - 如何将kubernetes pod暴露给外部IP?

Ansible 模块 s3 - 模式=获取错误

docker - 在Docker中挂载卷时 'read-only'标志的范围

ruby - 官方 Ruby 1.9 Docker 镜像在哪里?

ansible - 错误!这个任务 'apt_repository' 有额外的参数