【问题标题】:From outside the cluster, unable to reach MyApp (client --> <nodeIP>:<nodePort> --> Service --> Pod --> MyApp)从集群外部,无法访问 MyApp (client --> <nodeIP>:<nodePort> --> Service --> Pod --> MyApp)
【发布时间】:2020-10-30 16:38:57
【问题描述】:

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

设置

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

请求: 不知道缺少什么:是防火墙阻止它,是否缺少端口转发,其他东西......来自我的计算机试图 'curl http://:/api/users' 超时。

旁注:我知道我可以使用其他方法,例如 ingress。目前,我正在尝试学习并找出 NodePort 方法不起作用的原因。

【问题讨论】:

  • 您在 URL 中使用的 nodeIP 是什么?你配置好 kind 的网络层了吗?
  • 你能发布一些像kubectl describe svckubect describe pod -o wide这样的东西吗?也可能很高兴看到您拥有的任何 yaml。
  • localhost 有效且NodePort 的事实并不意味着该服务仅在容器内的 localhost 上侦听——决胜局将是您是否可以从另一个 Pod 访问该 Pod集群内的 Pod(然后在集群内对 Service 进行相同的实验)

标签: kubernetes kubernetes-service


【解决方案1】:

Docker for Mac 在 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 &lt;localport&gt;:&lt;serviceport&gt; 服务。

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 2022-01-13
    • 1970-01-01
    • 2022-11-22
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2014-11-13
    相关资源
    最近更新 更多