简介:
k8s暴露服务的方式有以下几种:
- Proxy + clusterIP
- NodePort
- LoadBalancer
- Ingress
- Proxy + ClusterIP
自定义代理 + 集群内存IP
有一些场景下,你得使用 Kubernetes 的 proxy 模式来访问你的服务:
• 由于某些原因,你需要调试你的服务,或者需要直接通过笔记本电脑去访问它们。
• 容许内部通信,展示内部仪表盘等。
这种方式要求我们运行 kubectl 作为一个未认证的用户,因此我们不能用这种方式把服务暴露到 internet 或者在生产环境使用。
- NodePort (当前采用方式):
NodePort 服务是引导外部流量到你的服务的最原始方式。NodePort,正如这个名字所示,在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。
这种方式的优点是: 简单快速;
缺点是:
1 通过这种方式暴露服务,相当于在给 k8s 环境打孔,需要所有工作节点都开放对外访问的端口,随着应用的增加,集群的端口会被大量消耗且很难管理,更麻烦的问题是无法制作边缘服务器,所有的服务器都是边缘节点。
2 由于通过 nodePort 方式暴露服务,请求是通过集群内部第二跳做到请求转发的:
第二跳会通过 SNAT的方式替换请求头,导致集群内部应用无法获取用户真实 IP,开发网关无法根据IP进行流量控制。
3 LoadBalancer方式
LoadBalancer 服务是暴露服务到 internet 的标准方式。在 GKE 上,这种方式会启动一个 Network Load Balancer[2],它将给你一个单独的 IP 地址,转发所有流量到你的服务。
这个方式的最大缺点是每一个用 LoadBalancer 暴露的服务都会有它自己的 IP 地址,每个用到的 LoadBalancer 都需要付费,这将是非常昂贵的。
4 Ingress
Ingress 可能是暴露服务的最强大方式&