为什么我无法通过k8s中的NodePort服务访问pod中的应用程序?

问题描述 投票:0回答:0

我是k8s初学者。

我的测试计算机中有一个 k8s 集群(不是 minikube)。 集群是由Kind创建的。 (...不知道Kind是什么。这是我同事推荐的).

然后我创建了:

  • 带有小型测试 http 服务器的 k8s 部署;
  • 与部署关联的 k8s 服务(类型:NodePort)。

我希望在通过以太网与 k8s 计算机连接的different 计算机上使用网络浏览器访问 http 服务器。

但是,它不起作用。客户端电脑在没有运行k8s的情况下可以访问http服务器(如果我在命令行手动启动的话),但是如果运行在k8s的pod中,http服务器是无法访问的

kubectl describe nodes
命令显示k8s计算机有一个“内部IP”与该计算机的“真实”IP不同:

$ kubectl describe nodes
Name:               kind-control-plane
Roles:              control-plane
...
Addresses:
  InternalIP:  172.17.0.2
  Hostname:    kind-control-plane
Capacity:
...

$ ip addr
1: ...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:a5:14:ab brd ff:ff:ff:ff:ff:ff
    inet 10.7.71.173/20 brd 10.7.79.255 scope global eth0
    ...

在上面的输出中,10.7.71.173 是“真实”IP,172.17.0.2 显示为“内部 IP”。

我可以通过“内部 IP”访问(curl)http 服务器,但它只适用于 k8s 计算机。

我在谷歌上搜索了很长时间以了解 k8s 内部 IP 的解释,但我只得到一个半理解的答案:k8s 内部 ip 是一个 NAT IP(我了解 NAT 是什么)。但是我还是不太清楚k8s的内部IP是什么,为什么要使用内部IP。

更重要的是,网上很多帖子都说NodePort服务允许集群外访问pod中的app。这与我所经历的不同。

所以我的问题是:

  1. 我知道入口或负载均衡器可以将 app-in-pod 暴露给真实的外部世界,但为什么 NodePort 服务不能做同样的工作?
  2. “内部IP”到底是什么?

欢迎任何解释或链接到文章/帖子。非常感谢。

kubernetes kubernetes-ingress kubernetes-nodeport
© www.soinside.com 2019 - 2024. All rights reserved.