K8S学习笔录 - 暴露服务

280 阅读2分钟

原文链接

在搭建好集群之后,我们还需要将集群的服务暴露到外部提供服务给客户端

目前来讲有以下几种方案可以暴露服务

  1. 服务类型设置为NodePort
  2. 服务类型设置为LoadBalance
  3. 使用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访问。

service-expose

LoadBalance

对于使用负载均衡器,则需要云服务平台提供支持。

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: LoadBalance
  ports:
  - port: 8080
    targetPort: http
  selector:
    app: nginx

客户端通过端口连接到服务后,服务进行随机选择处理此请求的Pod,该Pod可能会是部署在其他节点上的Pod,此时便可能产生额外的网络跳数。 可以通过设置而服务的配置 spec.externalTrafficPolicyLocal 让服务优先使用与自己同一节点上的Pod。

但如此之下可能会产生每个Pod的负载不均衡的情况,当有A、B两个节点,分别有1和2个Pod时,在负载均衡器的作用下流量均匀的分布在A和B两个节点。 而服务优先使用本节点上的Pod,就倒着A节点上的Pod的流量为50%,而B节点上的Pod的流量均为25%。

service-balancer

Ingess

见另一篇 K8S学习笔录 - 使用Ingress暴露服务