从群集外部无法访问MyApp(客户端-> <nodeIP>:<nodePort>->服务-> Pod-> MyApp)

时间:2020-07-10 00:52:52

标签: kubernetes kubernetes-service

问题:从外部群集,通过NodePort公开服务,我无法访问该应用程序。 我应该得到MyApp的响应:从我的Mac客户端(http:// nodeIP:nodePort / api / users)->节点(nodePort)->服务(endPoints)-pod-> MyApp(在容器)

设置

  • OS:使用KIND的Mac和DockerDesktop,创建集群(1-master, 2名工人)
  • 部署了简单的应用程序,并能够'kubectl exec myPod- curl http:// localhost / api / users'<-确实有效
  • 然后创建类型为:NodePort(由k8自动选择)的“服务”
  • 应该是从我的Mac(客户端),我应该可以访问MyApp,但是尝试“卷曲(http:// nodeIP:nodePort / api / users)”只是超时。

请求: 不确定缺少什么:防火墙是否将其阻止,端口转发是否丢失,其他原因……从我的计算机尝试 “ curl http://:/ api / users”超时。

旁注:我知道我可以使用其他方法,例如入口。现在,我正在尝试学习并弄清为什么NodePort方法不起作用。

1 个答案:

答案 0 :(得分:0)

适用于Mac的Docker在hyperkit Linux VM中运行,而不在您的实际Mac上运行。因此,使用kind,每个节点都是一个容器,不幸的是,您将无法从Mac连接到NodePort。

解决方法是从Docker VM或具有与VM相同网络空间的容器进行连接。

$ docker run --rm -it --net host alpine sh
# curl http://<the-ip-address-from-a-node>:<NodePort>/api/users

如果您希望访问浏览器,另一种方法是从Mac kubectl proxy ...进入该服务。或kubectl port-forward svc/service-name <localport>:<serviceport>到服务。