概要
将服务暴露给外部的方式主要有三种:
- NodePort
- LoadBalancer
- Ingress
在没有上面三种方式前,集群中只有ClusterIP,它是集群内的服务,集群外部无法访问。
ClusterIP服务的yaml文件类似如下:
apiVersion: v1
kind: Service
metadata:
name: my-internal-service
selector:
app: my-app
spec:
type: ClusterIP
ports:
1. name: http
port: 80
targetPort: 80
protocol: TCP
此时如果想不适用那三种方式来从外部访问集群的话,只能使用代理proxy,但是不能发布到Internet上。
kubectl proxy --port=8080
访问流程如下:

NodePort
NodePort 服务是引导外部流量到你的服务的最原始方式。在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。
应用场景: demo 应用,或者某些临时应用。
缺点:
- 每个端口只能是一种服务
- 端口范围只能是
30000-32767 - 如果节点/VM 的 IP 地址发生变化,需要做处理
请求流程如下:

LoadBalancer
缺点:没有过滤条件,没有路由等。这意味着你几乎可以发送任何种类的流量到该服务,像 HTTP,TCP,UDP,Websocket,gRPC 或其它任意种类。
另外每一个用 LoadBalancer 暴露的服务都会有它自己的 IP 地址,每个用到的 LoadBalancer 都需要付费,这将是非常昂贵的。
请求流程如下:

Ingress
应用场景:使用同一个 IP 暴露多个服务。
Ingress在网络栈(HTTP)的应用层操作,并且可以提供一些服务不能实现的功能,注入基于cookie的会话亲和性等功能。
Ingress 事实上不是一种服务类型。相反,它处于多个服务的前端,扮演着“智能路由”或者集群入口的角色。
Ingress 控制器有各种类型,包括 Google Cloud Load Balancer, Nginx,Contour,Istio,等等。它还有各种插件,比如 cert-manager,它可以为你的服务自动提供 SSL 证书。
//获取Ingress的IP地址
kubectl get ingresses
请求流程如下:

文章介绍了Kubernetes中将服务暴露给外部的三种主要方式:ClusterIP(仅限内部访问)、NodePort(在节点上开放端口)和LoadBalancer(提供外部IP)。NodePort适合临时应用,而LoadBalancer成本较高但能处理多种流量。Ingress则作为应用层的智能路由,用于多服务共享同一IP并支持高级功能如会话亲和性。Ingress控制器如Nginx、Istio等提供了额外的管理和扩展能力。
3万+

被折叠的 条评论
为什么被折叠?



