问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Kubernetes – NodePort 服务

创作时间:
作者:
@小白创作中心

Kubernetes – NodePort 服务

引用
1
来源
1.
https://www.cnblogs.com/wonchaofan/p/18232127

Kubernetes 中的 NodePort 服务是一种用于将应用程序公开到互联网的服务,最终用户可以从互联网访问它。如果您创建 NodePort 服务,Kubernetes 将分配 (30000-32767) 范围内的端口。最终用户可以使用节点的 IP 地址访问该应用程序。

Kubernetes 服务的类型

在Kubernetes 中,有 3 种类型的服务用于提供 pod 之间的发现和路由。

1. ClusterIP:它是默认服务,其可见性是集群内部的,这意味着无法使用 clusterIP 服务从集群外部从互联网访问微服务。

2. NodePort: NodePort 扩展了 ClusterIP 服务,其可见性在集群内部和外部均可。您可以使用 NodePort属性设置 NodePort ,这是服务将从集群外部监听的端口。使用 NodePort 有一个要求,即节点必须具有公共 IP 地址。端口必须在 30000 到 32767 之间,如果您不指定 NodePort 值,Kubernetes 将随机分配它。

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之间的区别

特征
NodePort
ClusterIP
可见性
每个节点的 IP 地址上公开静态端口,允许来自互联网的流量访问 pod。
在集群内可访问的内部 IP 地址上公开该服务。
使用场景
如果您想将 pod 暴露给外部并且也想在集群内部使用它,那么您可以使用 NodePort。
如果您不想将 pod 暴露到外部并且需要将其用于内部用途,则可以使用 ClusterIP。
应用场景
适用于需要公开访问的应用程序,如 Web 应用程序。
主要用于内部目的,例如用于内部目的的数据库 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 未分配
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号