在 Kubernetes 集群中,Service 是一种可以将 Pod 分组并提供稳定访问 IP 和 DNS 名称的抽象机制。通过 Service,我们可以将应用暴露给集群内或外的其他服务或用户。
Service 的类型
Kubernetes 中的 Service 有以下几种类型:
ClusterIP
ClusterIP 是最常用的 Service 类型,它将 Pod 分组并暴露一个稳定的 IP 地址。这个 IP 地址只在集群内可见,不能从集群外部访问。
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ---------- ----- --------- ---- ------ ------ - ----- ---- ----- -- ----------- ---- ----- ---------
上面的 YAML 文件定义了一个名为 my-service 的 Service,它将 Pod 中标签为 app=my-app 的应用分组并暴露一个名为 http 的端口。这个端口会将请求转发到 Pod 中的 8080 端口。
NodePort
NodePort 类型的 Service 会将 Pod 分组并暴露一个稳定的 IP 地址和端口号。这个端口号是在集群节点上随机分配的,可以从集群外部访问。
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ---------- ----- --------- ---- ------ ------ - ----- ---- ----- -- ----------- ---- ----- --------
上面的 YAML 文件定义了一个名为 my-service 的 NodePort 类型的 Service,它将 Pod 中标签为 app=my-app 的应用分组并暴露一个名为 http 的端口。这个端口会将请求转发到 Pod 中的 8080 端口,并在所有节点上分配一个随机端口号。
LoadBalancer
LoadBalancer 类型的 Service 会将 Pod 分组并暴露一个稳定的 IP 地址和端口号,并在集群外部创建一个负载均衡器,将请求分配给这些 IP 地址和端口号。
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ---------- ----- --------- ---- ------ ------ - ----- ---- ----- -- ----------- ---- ----- ------------
上面的 YAML 文件定义了一个名为 my-service 的 LoadBalancer 类型的 Service,它将 Pod 中标签为 app=my-app 的应用分组并暴露一个名为 http 的端口。这个端口会将请求转发到 Pod 中的 8080 端口,并在集群外部创建一个负载均衡器,将请求分配给这些 IP 地址和端口号。
ExternalName
ExternalName 类型的 Service 用于将集群内部的服务解析为外部 DNS 名称。
apiVersion: v1 kind: Service metadata: name: my-service spec: type: ExternalName externalName: my.database.example.com
上面的 YAML 文件定义了一个名为 my-service 的 ExternalName 类型的 Service,它将集群内部的服务解析为外部 DNS 名称 my.database.example.com。
Service 的使用
使用 Service 可以方便地将应用暴露给其他服务或用户。下面是一个使用 ClusterIP 类型的 Service 的示例:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ------ ----- --------- ------------ ---- ------ --------- - --------- --------- ------- ---- ------ ----- ----------- - ----- ------ ------ ------------- ------ - ----- ---- -------------- ---- --- ----------- -- ----- ------- --------- ----- ---------- ----- --------- ---- ------ ------ - ----- ---- ----- -- ----------- ---- ----- ---------
上面的 YAML 文件定义了一个名为 my-app 的 Deployment,它将 Pod 中标签为 app=my-app 的应用部署到集群中。同时,还定义了一个名为 my-service 的 ClusterIP 类型的 Service,它将 Pod 中标签为 app=my-app 的应用分组并暴露一个名为 http 的端口。
使用这个 Service,其他应用可以通过访问 http://my-service 来访问这个应用。
总结
使用 Service 可以方便地将应用暴露给其他服务或用户,并提供稳定的 IP 地址和 DNS 名称。Kubernetes 中的 Service 有多种类型,可以根据不同的需求选择不同的类型。
在使用 Service 的时候,需要注意 Pod 的标签和端口号的匹配关系,以及 Service 的类型和暴露的端口号。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65e592c21886fbafa4124332