Kubernetes – NodePort 服务
Kubernetes – NodePort 服务
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 未分配