先上图

在Kubernetes集群中,service通过标签选择器选着对应的pod,然后对请求进行转发,看个动画,能直接了当体会到便签选择器

pod,endpoints,service三者关系

1、举个栗子说明

先看部署文件,主要看注释部分。因为文件太长,本文删除了yaml文件的部分字段

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: gogs
labels: # 定义StatefulSet的标签,为后面Service选择器提供标签
app: gogs
spec:
serviceName: gogs
replicas: 1
selector:
matchLabels: # 标签选择器,StatefulSet通过该标签选择pod
app: gogs
template:
metadata:
labels: # 定义pod的标签
app: gogs
spec:
terminationGracePeriodSeconds: 180
.......
---
apiVersion: v1
kind: Service
metadata:
name: gogs
labels:
app: gogs
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
selector: # 标签匹配器,Service通过该标签匹配到对应的Pod
app: gogs

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 3d1h

3、通过kubectl describe来查看pod,endpoints,service详情



4、从上图可以看出关联信息:

1、Pod和Endpoint的的IP是一致的,Endpoint是用来映射那些能对外提供服务的pod,如果pod运行状态不是running,就不会产出Endpoint
2、StatefulSet 和 Pod 的关系是通过 label-selector 来关联的
3、 Service可以简单理解为 Kubernetes 内置的一个 LoadBalancer,它的作用就是给多个 Pod 提供负载均衡。
4、Service通过标签 app: gogs来匹配它所要做负载均衡的 Pod

好了,对pod,endpoints,service三者关系做了简单介绍,接下来我们来介绍Kubernetes中的几种Service Type

ClusterIP

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

缺点:服务只能够在集群内部可以访问

栗子

apiVersion: v1
kind: Service
metadata:
name: gogs-clusterip
spec:
type: ClusterIP
ports:
- port: 3000
targetPort: 3000
selector:
app: gogs

结果

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)。 每个节点将随机分配的端口代理到服务中。

举栗子

apiVersion: v1
kind: Service
metadata:
name: gogs
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
selector:
app: gogs

结果

NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
gogs NodePort 10.106.102.74 <none> 3000:30526/TCP 3d2h

这里可以看到,随机分配了端口30526,现在可以通过集群任意节点的IP+30526访问到该服务

Ingress

Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。

可以将 Ingress 配置为服务提供外部可访问的 URL、负载均衡流量、终止 SSL/TLS,以及提供基于名称的虚拟主机等能力。 Ingress 控制器 通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。

栗子

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gogs-gogs
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: gogs.test.cn
http:
paths:
- path: /
backend:
serviceName: gogs
servicePort: 3000

结果

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

LoadBalancer

创建服务时,你可以选择自动创建云网络负载均衡器。这提供了一个外部可访问的 IP 地址, 可将流量分配到集群节点上的正确端口上,LoadBalancer一般都是公有云厂商提供,不需要自建,这里就介绍了。

浅析Kubernrtes服务类型(Service Types)的更多相关文章

  1. .NET 使用自带 DI 批量注入服务(Service)和 后台服务(BackgroundService)

    今天教大家如何在asp .net core 和 .net 控制台程序中 批量注入服务和 BackgroundService 后台服务 在默认的 .net 项目中如果我们注入一个服务或者后台服务,常规的 ...

  2. Android 服务类Service 的详细学习

    http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建   目录(?)[+] 什么是服务 服务有 ...

  3. Android(java)学习笔记229:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)

    1.接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2.利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.jav ...

  4. Android 服务类Service 的具体学习

    上一篇说到了通知栏Notification,提起通知栏,不得让人想到Service以及BroadcastReceive,作为android的4大组建的2个重要成员,我们没少和它们打交道.它们能够在无形 ...

  5. Kubernetes学习之路(十四)之服务发现Service

    一.Service的概念 运行在Pod中的应用是向客户端提供服务的守护进程,比如,nginx.tomcat.etcd等等,它们都是受控于控制器的资源对象,存在生命周期,我们知道Pod资源对象在自愿或非 ...

  6. Android(java)学习笔记172:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)

    1. 接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2. 利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.j ...

  7. 第6章 服务模式 Service Interface(服务接口)

    Service Interface(服务接口) 上下文 您正在设计企业应用程序,并且需要能够通过网络使用其部分功能.此功能需要能够被各类系统使用,因此互操作性是设计的重要方面.除互操作性之外,可能还需 ...

  8. java gRPC四种服务类型简单示例

    一.gRPC 简介 gRPC 是Go实现的:一个高性能,开源,将移动和HTTP/2放在首位通用的RPC框架.使用gRPC可以在客户端调用不同机器上的服务端的方法,而客户端和服务端的开发语言和 运行环境 ...

  9. 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇

    什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...

随机推荐

  1. COS418, Distributed System, Go Language

    本博客是MIT的分布式系统课程的课后作业Cos418的GO语言实现思路.由于时间有限,目前只实现了assignment1~2. 在common.go中设置debugEnabled = true,go ...

  2. 团队作业3:需求改进&系统设计

    一.需求&原型改进: 1.1 选题需求改进 用户:同学你好,有什么事我们能帮到你 我:我要说的事……(咽口水)你们千万别害怕 用户:我们是杠精,我们不会怕,您请说 我:我们要做一个roguel ...

  3. latex:数学式中的省略符号

    数学式中有很多省略符号,具体命令符号和用法如下 数学式中的省略符号 \cdots 水平位置与减号等高,例如$-\cdots +$,得到- … + \ddots 对角省略号,例如$A\ddots M$, ...

  4. pytest的fixture怎么用?

    文章总览图 fixture和unittest是冲突的.舍弃unittest只用pytest. 会遇到在很多用例当中,它的前置条件是长得一样的.用例写的越来越多的时候,肯定会遇到前置条件都差不多,大家差 ...

  5. 问卷星导入数据到SPSS,数据变成-3是什么原因?

    问卷星将数字“-3”表示为筛选或者跳转题:如果问卷中有设计筛选或者跳转,此时则会出现“-3”这个数字. 解决办法1 分析时首先进行筛选,然后再分析,便不会出现“-3”,而且一定需要这样进行.“筛选样本 ...

  6. Nuxt.js 踩坑记录(3) Net.connection xxxx

    浏览器报的是Net.connection啥的错误 项目运行时报错这个 [HPM] Error occurred while trying to proxy request article from l ...

  7. 牛客网数据库SQL实战解析(11-20题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  8. 轻松应对并发,Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单

    接上一篇 Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务.通过本篇阅读,您便可以开 ...

  9. P4719 【模板】"动态 DP"&动态树分治

    题目描述 给定一棵 n 个点的树,点带点权. 有 m 次操作,每次操作给定 x,y,表示修改点 x 的权值为 y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 输入格式 第一行有两个整数 ...

  10. 【平台开发】— 4.mysql建库建表

    本想着把前端脚手架run起来了,然后就可以借着登录来捋一下前后端交互的过程.但是后端导入JPA的时候就发现了,还没有数据库. 既然是本着学习的目的,那咱也不想只在后端写死返回的数据,要做就做全套. 一 ...