首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从集群外部转发到k8s服务

从集群外部转发到k8s服务
EN

Server Fault用户
提问于 2020-02-26 18:14:43
回答 1查看 123关注 0票数 1

我已经在VM上安装了k8s,由于kubelet在VM上配置iptable NAT,现在我可以通过这个VM上的服务访问pods。

我的目标是通过位于集群外部的机器(让它称为my-home-machine)通过服务的IP地址访问豆荚。我已经通过主节点配置了路由到k8s服务I。因此,我可以将数据包发送到nginx,例如,使用my-home-machine提供的netcat这样的方式:

代码语言:javascript
复制
netcat -zv 10.77.112.147 80

其中10.77.112.147是ClusterIP of nginx- k8s中的服务。在nginx内部,我看到了使用tcpdump的请求:

代码语言:javascript
复制
17:42:55.985517 IP 10.0.10.64.56080 > 10.0.113.193.80: Flags [S], seq 3003847122, win 64240, options [mss 1460,sackOK,TS val 4001672643 ecr 0,nop,wscale 7], length 0
17:42:55.985557 IP 10.0.113.193.80 > 10.0.10.64.56080: Flags [S.], seq 3158920861, ack 3003847123, win 27760, options [mss 1400,sackOK,TS val 8954181 ecr 4001672643,nop,wscale 7], length 0

其中10.0.10.64是k8s NAT应该工作的东西(也许我错了,请纠正我),10.0.113.193是nginx的ClusterIP。正如你所看到的,荚已经得到了数据包并发送了响应。此外,我可以在nginx运行的K8s节点上捕捉到这个响应。再次使用tcpdump:

代码语言:javascript
复制
21:06:24.669622 IP 10.0.113.193.http > 10.0.10.64.56080: Flags [S.], seq 475316172, ack 3702114669, win 27760, options [mss 1400,sackOK,TS val 9919609 ecr 4002638070,nop,wscale 7], length 0
21:06:25.673809 IP 10.0.113.193.http > 10.0.10.64.56080: Flags [S.], seq 475316172, ack 3702114669, win 27760, options [mss 1400,sackOK,TS val 9920614 ecr 4002638070,nop,wscale 7], length 0

10.0.10.64之后,数据包在到达my-home-machine之前再经过三个路由器。问题是这个包根本没有到达my-home-machine (我从netcat那里得到超时)。我怀疑10.0.10.64有什么问题,因为我可以从nginx成功地通过my-home-machine或连接到mysql服务器(运行在my-home-machine上)。有什么建议吗?我该怎么解决?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-02-27 06:44:22

正如您在问题中提到的,这些IP地址是“虚拟的”,并且是通过iptables魔法创建的。如果您想从软件定义的网络之外访问Kubernetes Service,则需要使用Service of type: NodePort (或type: LoadBalancer,与NodePort相同--它也尝试为您提供负载均衡器),或者,如果您已经在集群中运行了入口控制器,并且Service与入口控制器施加的约束兼容,则可以使用Ingress资源。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1004715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档