hello云胜

技术与生活

0%

K8S服务的外部访问方式

我们在K8S中部署的服务,访问来源可以分成k8s集群内部和集群外部。集群内部的访问通过clusterIp可以互通。集群外部的访问就略微麻烦一下。有以下几种方式可供选择。NodePort、LoadBalancer和Ingress。

ClusterIp

ClusterIp是K8S的默认服务,会给你的service创建一个集群内的虚拟IP,集群内的其他pod都可以通过该ip访问service。集群外部无法访问。

但是我们可以通过 Kubernetes 的 proxy 模式来访问服务。

原理如图:

img

这种方式是在你本地的电脑上启动kubectl proxy服务。所以只能用于你本地电脑临时性的访问k8s集群内的服务,一般只用于我们临时调试使用。

NodePort

NodePort的原理是在每一台k8s的工作节点上开放一个端口,端口和service进行对应。

img

端口的可选范围是30000-32767。这样就限制了我们的服务数量,但是端口数量基本上是够用的。

外部用户通过工作节点的ip+端口进行访问。

这样做的一个问题是我们将工作节点的ip暴露给了用户。导致后续该机器一旦停机就会造成故障。

LoadBalancer

LoadBalancer 服务是暴露服务到 internet 的标准方式。但是这种方式需要基于与服务商提供的loadBalancer服务,

换言之,要花钱的。

img

Ingress

img

Nginx

看Ingress的工作方式和Nginx非常相似。所以我们也可以在K8S集群中启动Nginx服务进行服务代理。