Kubernetes – NodePort 服务
Kubernetes 中的 NodePort 服务是一种用于将应用程序公开到互联网的服务,最终用户可以从互联网访问它。如果您创建 NodePort 服务,Kubernetes 将分配 (30000-32767) 范围内的端口。最终用户可以使用节点的 IP 地址访问该应用程序。
Kubernetes 服务的类型
在Kubernetes 中,有 3 种类型的服务用于提供 pod 之间的发现和路由。
1. ClusterIP:它是默认服务,其可见性是集群内部的,这意味着无法使用 clusterIP 服务从集群外部从互联网访问微服务。
3. LoadBalancer:它在传输层(TCP)即第 4 层运行。这意味着它无法根据内容做出决策,而是使用简单的算法,例如在选定的路径上使用循环。而Ingress在应用程序层(第 7 层)运行。它能够根据每条消息的实际内容做出决策。更智能的负载平衡决策和内容优化。换句话说,Ingress就像一个LoadBalancer,但更智能。
Kubernetes NodePort 服务
Kubernetes NodePort 服务用于将集群中可用的节点暴露给集群外部。它还将暴露节点中正在运行的应用程序,并允许外部流量借助 NodePort 到达应用程序。
NodePort 服务示例
以下是 kubernetes NodePort 服务的示例 YAML 文件。
apiVersion: v1 kind: Service metadata: name: <Name Of the Service> spec: type: NodePort ports: - port: 80 # Port exposed within the cluster targetPort: 8080 # Port on the pods nodePort: 30000 # Port accessible externally on each node selector: app: example-app # Select pods with this label
NodePort 服务如何工作?
NodePort 服务会将节点的 pod 暴露给另一个节点,并且还会将 pod 暴露给集群外部,用户可以从那里使用节点的 IP 地址和端口从互联网访问。
以下是 NodePort 服务的示例 YAML 文件。
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app type: NodePort ports: – protocol: TCP port: 80 targetPort: 80
使用 NodePort 服务的步骤
步骤 1.创建部署。出于演示目的,我选择 Nginx 作为我们的应用程序,并设置 2 个副本,您可以根据需要进行更改。
$ kubectl create deploy --image=nginx:1.23 nginx --replicas=2
步骤 2.使用 NodePort 公开服务
kubectl expose deploy nginx --type=NodePort --port=8080 -target-port=80
我们将部署公开为名为nginx-service 的NodePort服务
检查您的服务(可选):
$ kubectl get svc nginx -service -o wide
您可以看到我们已经成功使用NodePort公开了我们的服务
第 3 步:访问您的应用程序
$ minikube service
nginx-service --url
调用此函数后,您可以在浏览器中看到它:
正如您在上图中所看到的,我们可以在集群上运行的机器上访问我们的应用程序,这只有通过NodePort服务才有可能。
NodePort和ClusterIP之间的区别
节点端口 |
集群IP |
---|---|
NodePort 服务将在每个 IP 地址上公开静态端口,并且允许来自互联网的流量访问 pod。 |
在集群内可访问的内部 IP 地址上公开该服务。 |
如果您想将 pod 暴露给外部并且也想在集群内部使用它,那么您可以使用 NodePort。 |
如果您不想将 pod 暴露到外部并且需要将其用于内部用途,则可以使用 ClusterIP。 |
如果你需要像 Web 应用程序一样公开应用程序,那么你可以使用 NodePort 服务 |
主要用于内部目的,例如用于内部目的的数据库 API 服务。 |
NodePort 服务用于在集群外部公开应用程序,而 ClusterIP 仅用于内部访问。
NodePort 服务常见问题解答
1.为什么要使用NodePort?
NodePort 将应用程序公开到互联网,最终用户可以从那里访问在 kubernetes 集群的 pod 内运行的应用程序。
2.NodePort 有外部 IP 吗?
NodePort 服务使用集群中节点的 IP 地址,它不包含任何外部 IP 地址。
3. Kubernetes NodePort 范围
默认的nodeport范围是30000-32767。这些是kubernetes将集群中每个节点暴露给集群外部的端口。
4. Kubernetes NodePort 服务无法访问
以下是 Kubernetes 无法访问的一些原因。
- 端口映射不正确
- 防火墙规则阻止流量
- NodePort 未分配
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了