在搭建好集群之后,我们还需要将集群的服务暴露到外部提供服务给客户端
目前来讲有以下几种方案可以暴露服务
- 服务类型设置为NodePort
- 服务类型设置为LoadBalance
- 使用Ingress资源
本篇先了解前两类服务
NodePort
在设置为NodePort之后,将会在集群节点上暴露一个端口,使得该服务除了可以通过集群内部的IP访问外,也可以通过节点的IP:PORT进行访问。
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: NodePort
ports:
- port: 8080
targetPort: http
nodePort: 31602
selector:
app: nginx
此配置中规定了暴露符合标签中带有 app: nginx 的服务,并且将其端口映射到节点的31602端口上。
创建后,内网访问该服务可以通过内网IP:8080访问,外网访问可以通过节点IP:31602访问。
LoadBalance
对于使用负载均衡器,则需要云服务平台提供支持。
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalance
ports:
- port: 8080
targetPort: http
selector:
app: nginx
客户端通过端口连接到服务后,服务进行随机选择处理此请求的Pod,该Pod可能会是部署在其他节点上的Pod,此时便可能产生额外的网络跳数。
可以通过设置而服务的配置 spec.externalTrafficPolicy 为 Local 让服务优先使用与自己同一节点上的Pod。
但如此之下可能会产生每个Pod的负载不均衡的情况,当有A、B两个节点,分别有1和2个Pod时,在负载均衡器的作用下流量均匀的分布在A和B两个节点。 而服务优先使用本节点上的Pod,就倒着A节点上的Pod的流量为50%,而B节点上的Pod的流量均为25%。