先上图
在Kubernetes集群中,service通过标签选择器选着对应的pod,然后对请求进行转发,看个动画,能直接了当体会到便签选择器
1、举个栗子说明
先看部署文件,主要看注释部分。因为文件太长,本文删除了yaml文件的部分字段
2、查看运行结果
[root@k8s-node001 ~]# kubectl get po,ep,svc NAME READY STATUS RESTARTS AGE pod/gogs-0 1/1 Running 0 3d1h NAME ENDPOINTS AGE endpoints/gogs 100.68.150.197:3000 3d1h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/gogs NodePort 10.106.102.74 <none> 3000:30526/TCP 3d1h3、通过kubectl describe来查看pod,endpoints,service详情
4、从上图可以看出关联信息:
好了,对pod,endpoints,service三者关系做了简单介绍,接下来我们来介绍Kubernetes中的几种Service Type
ClusterIP通过集群的内部 IP 暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的 ServiceType
缺点:服务只能够在集群内部可以访问
栗子
结果
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gogs-clusterip ClusterIP 10.104.1.9 <none> 3000/TCP 2m11s可以看到10.104.1.9是集群内部的一个IP,在集群外是无法访问到的
NodePort如果将 type 字段设置为 NodePort,则 Kubernetes将在指定的范围内分配端口(默认值:30000-32767)。 每个节点将随机分配的端口代理到服务中。
举栗子
结果
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gogs NodePort 10.106.102.74 <none> 3000:30526/TCP 3d2h这里可以看到,随机分配了端口30526,现在可以通过集群任意节点的IP+30526访问到该服务
IngressIngress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。
可以将 Ingress 配置为服务提供外部可访问的 URL、负载均衡流量、终止 SSL/TLS,以及提供基于名称的虚拟主机等能力。 Ingress 控制器 通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。
栗子
结果
NAME CLASS HOSTS ADDRESS PORTS AGE gogs-gogs <none> gogs.test.cn 10.26.25.21 80 3d19h现在通过域名gogs.test.cn就可以访问到gogs了
注意,gogs.test.cn需要自行添加DNS解析到ingress所在机器的IP
创建服务时,你可以选择自动创建云网络负载均衡器。这提供了一个外部可访问的 IP 地址, 可将流量分配到集群节点上的正确端口上,LoadBalancer一般都是公有云厂商提供,不需要自建,这里就介绍了。