Kubernetes 通过端口而不是 NodePort 访问外部 IP

Kubernetes Access External IP via Port and not NodePort

我是 Kubernetes 和 Helm Charts 的新手,想在这里找到我的问题的答案。

当我 运行 kubectl get all 并查看服务时,我得到如下内容:

NAME             TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                        AGE
service/leader   LoadBalancer   10.3.245.137   104.198.205.71   80:30125/TCP, 8888:30927/TCP   54s

我的服务在我的 Helm Chart 中配置为:

ports:
  name: api
  port: 80
  targetPort: 8888 

  name: api2
  port: 8888
  targetPort: 8888

当我运行kubectl describe svc leader时,我得到:

Type:        LoadBalancer
Port:        api 80/TCP
TargetPort:  8888/TCP 
NodePort:    api 30125/TCP
EndPoints:   <some IP>:8888
Port:        api 8888/TCP
TargetPort:  8888/TCP 
NodePort:    api 30927/TCP
EndPoints:   <some IP>:8888

我一直认为 NodePort 是将我的集群对外公开的端口,而 Port 将是在内部服务上公开的端口,它路由到 Pods 上的 TargetPorts。我从 .

那里得到了这个理解

不过,我好像可以打开104.198.205.71:80104.198.205.71:8888,但我不能打开104.198.205.71:30125104.198.205.71:30927。我的期望是我应该能够通过 NodePorts 而不是通过端口访问 104.198.205.71。我的理解有误吗?

要通过 NodePort 访问您的应用程序,您需要输入您的节点 ip 和分配给您的节点端口。

kubectl get node -owide 

以上命令将提供您的节点 IP 地址,您可以使用该地址通过 NodePort 访问应用程序,是的,外部 Ip : 80 将失败,因为该端口用于容器内部而不是外部访问。

此外,要阅读有关使用发布服务从集群外部访问资源的更多信息(那里也提到了 NodePort),您可以参考 the official documentation