在 Kubernetes 集群的使用过程中,我们经常需要将服务暴露在集群外部,以便外部用户可以访问该服务。在 Kubernetes 的网络模型中,一个服务可以通过多种方式暴露,其中一种方式是 NodePort。
本文将介绍 NodePort 的概念、用途、配置步骤及示例代码,帮助读者深入了解 NodePort 的使用方法,方便快捷地将 Kubernetes 服务暴露给外部用户。
什么是 NodePort?
NodePort 是 Kubernetes 中一种将服务暴露给集群外部的方式,该方式会在每个节点上保留一个端口,然后将所有节点的这个端口都映射到 Kubernetes 集群中的服务。
NodePort 的端口范围是 30000-32767,这些端口是被预留出来的,由 Kubernetes 自动分配,而不需要手动配置。
NodePort 的用途
NodePort 的主要用途是将服务暴露给集群外部。当集群内部的其他服务需要访问该服务时,通常会使用服务的集群内部地址。
NodePort 的另一个优点是它非常适合测试环境和临时环境。在这些环境中,我们通常不需要为服务配置负载均衡器或其他高可用性功能,而 NodePort 可以快速方便地将服务暴露给外部用户。
配置 NodePort 的步骤
下面是配置 NodePort 的步骤:
1. 创建一个 Kubernetes 服务
首先,我们需要在 Kubernetes 中创建一个服务。我们可以使用 YAML 文件来创建服务,如下所示:
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ---------- ----- --------- ---- ------ ------ - --------- --- ----- -- ----------- ---- ----- --------
在这个 YAML 文件中,我们定义了一个名为 my-service 的服务,它会监视符合标签 app=my-app 的所有应用程序实例,并将服务运行在端口 80 上。服务类型为 NodePort,所以它会在每个节点上保留一个端口并将其映射到服务。
2. 暴露服务
接下来,我们可以使用 kubectl expose 命令将服务暴露到外部。
$ kubectl expose deployment my-deployment --type=NodePort --port=80 service/my-deployment exposed
在这个命令中,我们使用 kubectl expose 命令将名为 my-deployment 的 Kubernetes 部署暴露为 NodePort 服务。服务类型为 NodePort,端口为 80。
3. 查看端口
最后,我们可以使用 kubectl get service 命令查看服务的端口:
$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-deployment NodePort 10.100.252.240 <none> 80:32767/TCP 13s
在这个命令的输出中,我们看到 my-deployment 的类型是 NodePort,它被映射到了 32767 端口。
NodePort 示例代码
下面是一个 NodePort 示例代码:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ---------------- ----- --------- ------------ ---- ----- --------- - --------- --------- ------- ---- ----- ----- ----------- - ----- ----- ------ ------------ ------ - -------------- -- --- ----------- -- ----- ------- --------- ----- ------------- ----- --------- ---- ----- ----- -------- ------ - ----- ---- ----- -- ----------- -- --------- -----
在这个示例代码中,我们创建了一个名为 nginx-deployment 的 Deployment,并将其部署在 Kubernetes 集群中。该 Deployment 包含两个副本,并使用 nginx:1.17.9 镜像运行一个 nginx 容器。
然后,我们创建了一个名为 nginx-service 的 NodePort 服务,并将其映射到 30000 端口。服务的选择器选择了与 Deployment 标签相匹配的 pod,以便服务能够监视该 pod。
总结
NodePort 是 Kubernetes 中一种将服务暴露给集群外部的方式。NodePort 的主要用途是将服务暴露给集群外部,并非用于内部服务之间的通信。
配置 NodePort 的步骤包括:创建一个 Kubernetes 服务,将服务暴露到外部,查看端口。在服务类型为 NodePort 时,它会在每个节点上保留一个端口并将其映射到服务。我们也给出了一个 NodePort 示例代码,帮助读者更好地理解它的使用方法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651beeae95b1f8cacd387098