在 Kubernetes 中,想要让服务能够被外部访问,需要对服务进行外部暴露。下面将介绍 Kubernetes 中三种常用的服务外部暴露方式,以及它们的使用场景和具体操作方法。
1. ClusterIP
ClusterIP 是 Kubernetes 中默认的服务类型。它会在集群内创建一个虚拟 IP 地址,只有在集群内部才能访问到这个 IP 地址。如果我们想要在集群外部访问这个服务,那么就需要将这个服务的 ClusterIP 暴露到外部。
使用场景
在需要将服务暴露到集群外部时使用 ClusterIP。
操作方法
在创建服务时,需要将服务类型设置为 ClusterIP。示例代码如下:
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ---------- ----- ----- --------- --------- ---- ------ ------ - ----- ---- ----- -- ----------- ----
创建服务后,使用 kubectl 命令将该服务的端口暴露出去,如下:
kubectl expose service my-service --type=LoadBalancer --name=my-service-lb --port=80 --target-port=8080
这里使用的是 LoadBalancer 类型,将服务的端口映射到了 LoadBalancer 上,从而使服务能够被外部访问。kubectl 命令会返回一个 LoadBalancer 的 IP 地址,我们就可以使用这个 IP 地址访问该服务了。
2. NodePort
NodePort 是一个简单的方式,允许我们将服务暴露到集群外部。它会在所有节点上,分配一个固定的端口,可以通过任意节点的 IP 地址和该端口号访问该服务。
使用场景
当需要在集群外部访问服务时,或希望使用固定端口的方式访问服务时使用 NodePort。
操作方法
在创建服务时,需要将服务类型设置为 NodePort。示例代码如下:
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ---------- ----- ----- -------- --------- ---- ------ ------ - ----- ---- ----- -- ----------- ----
创建服务后,使用 kubectl 命令获取该服务的 NodePort,如下:
kubectl get svc my-service
kubectl 将返回服务的 NodePort,我们就可以使用任何节点的 IP 地址和 NodePort 访问该服务了。
3. LoadBalancer
LoadBalancer 是一种非常常见的服务暴露方式,它借助云服务商提供的负载均衡器,将服务暴露到集群外部。在使用 LoadBalancer 的方式时,Kubernetes 将会在云服务商上部署负载均衡器,以便将流量转发到服务所在的节点上。
使用场景
当需要使用单独的负载均衡器来管理服务的流量时使用 LoadBalancer。
操作方法
在创建服务时,需要将服务类型设置为 LoadBalancer。示例代码如下:
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ---------- ----- ----- ------------ --------- ---- ------ ------ - ----- ---- ----- -- ----------- ----
创建服务后,服务将自动创建一个负载均衡器,并将服务暴露到外部。我们可以使用 kubectl 命令获取该服务的外部 IP 地址,如下:
kubectl get svc my-service
kubectl 将返回服务的外部 IP 地址,我们就可以使用该 IP 地址访问该服务了。
结论
Kubernetes 提供了不同的方式来暴露服务。ClusterIP 是默认的方式,NodePort 是一个简单的方式,LoadBalancer 则使用负载均衡器来管理服务流量。开发人员需要根据应用的需求选择适当的方式。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670a5110d91dce0dc8805cd4