k8s 暴露服务的几种方式

Deployment+LoadBalancer模式的Service

如果要把ingress部署在公有云,那用这种方式比较合适。用Deployment部署ingress-controller,创 建一个type为LoadBalancer的service关联这组pod。大部分公有云,都会为LoadBalancer的service自 动创建一个负载均衡器,通常还绑定了公网地址。只要把域名解析指向该地址,就实现了集群服务 的对外暴露。

Deployment+NodePort模式的Service

同样用deployment模式部署ingress-controller,并创建对应的服务,但是type为NodePort。这样, ingress就会暴露在集群节点ip的特定端口上。由于nodeport暴露的端口是随机端口,一般会在前面 再搭建一套负载均衡器来转发请求。该方式一般用于宿主机是相对固定的环境ip地址不变的场景。 NodePort方式暴露ingress虽然简单方便,但是NodePort多了一层NAT,在请求量级很大时可能对性 能会有一定影响。

DaemonSet+HostNetwork+nodeSelector

用DaemonSet结合nodeselector来部署ingress-controller到特定的node上,然后使用HostNetwork直 接把该pod与宿主机node的网络打通,直接使用宿主机的80/433端口就能访问服务。这时,ingresscontroller所在的node机器就很类似传统架构的边缘节点,比如机房入口的nginx服务器。该方式整 个请求链路最简单,性能相对NodePort模式更好。缺点是由于直接利用宿主机节点的网络和端口, 一个node只能部署一个ingress-controller pod。比较适合大并发的生产环境使用。

原文地址:https://www.cnblogs.com/liuyuanzhe/p/13610982.html