一个计算机技术爱好者与学习者

0%

好好学K8S:K8S中的Service详解

1. K8S中的Service分类

K8S中Service的作用是四层负载均衡,把发往Service的流量负载均衡到对应的Pod(endpoints)上。
根据暴露服务方式的不同,可以分为四种类型:ClusterIP、NodePort、LoadBalancer和ExternalName。

参考文档:

2. ClusterIP

ClusterIP:通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。 这也是默认的 ServiceType。

3. NodePort

NodePort:通过每个节点上的 IP 和静态端口(NodePort)暴露服务。 NodePort 服务会路由到自动创建的 ClusterIP 服务。 通过请求 <节点 IP>:<节点端口>,你可以从集群的外部访问一个 NodePort 服务。NodePort的默认范围是30000-32767,可以通过–service-node-port-range修改。

4. LoadBalancer

LoadBalancer:使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。

5. ExternalName

ExternalName:通过返回 CNAME 和对应值,可以将服务映射到 externalName 字段的内容(例如,foo.bar.example.com),实现外部服务的对内映射。

这个类型的作用主要是为了方便迁移,比如现在集群中的服务依赖一个外部的服务,那就可以使用ExternalName把这个外部服务映射到集群内部,以后这个外部服务迁移到集群内部,我们可以通过修改service类型使用内部的新服务,对于依赖方是无感的。

externalName虽然可以配置IP地址,但是Ingress和CoreDNS并没有解析。如果外部服务为IP,则可以使用Headless Service来实现映射。

示例1:

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
name: mysql

spec:
type: ExternalName
externalName: mysql.example.com
ports:
- protocol: TCP
port: 3306
targetPort: 3306

示例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: ClusterIP
clusterIP: None
ports:
- port: 3306
targetPort: 3306

---
apiVersion: v1
kind: Endpoints
metadata:
name: mysql
subsets:
- addresses:
- ip: 192.168.56.10
ports:
- port: 3306

参考文档:Kubernetes External Service Mapping

注意:一个service可能有多个endpoint,这些endpoint要求IP不同。
比如,mysql:3306对应的endpoint是192.168.56.10:3306,如果想要再增加endpoint,那么需要增加IP,而不是增加port。

6. Headless Service

Headless Service,实际上属于ClusterIP类型,是一种特殊的ClusterIP。
有时不需要负载均衡,也不需要单独的 ServiceIP,可以通过指定 ClusterIP(spec.clusterIP)的值为 “None” 来创建 Headless Service。
Headless Service常用于StatefulSet类型负载的对外服务暴露,或者外部服务的对内映射。

Headless Service和普通Service的不同有两点:
1、在DNS查询时普通Service会返回ServiceIP,而Headless Service会返回多个真实的endpoint,这样客户端就可以自己选择调用哪一个endpoint。
2、Headless Service对应的每一个pod都会分配一个DNS域名,这样pod间就可以通过域名互相访问了。而有状态服务就需要这种互相不同的识别,因此,Headless Service常常和statefulset配合使用。

参考文档:

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-k8s-service/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~