10.service 详解

什么是service:
Kubernetes中的Service 是一个抽象的概念,它定义了Pod的逻辑分组和一种可以访问它们的策略,这组Pod能被Service访问,使用YAML (优先)或JSON 来定义Service,Service所针对的一组Pod通常由LabelSelector实现

service是依赖于dns。 CoreDNS,kube-dns。
node network service network pod network

service的实现有三种工作模型
1.userspace 效率低 1.10及之前的k8s版本使用
2.iptables 1.10之后
3.ipvs 1.11开始默认使用,如果没有ipvs,则降级使用iptables,要启用需要在部署过程中指定KUBE_PROXY_MODE=ipvs ip_vs,ip_vs_rr,ip_vs_wrr,ip_vs_sh,nf_conntrack_ipv4 这几个内核模块需要安装

service类型:

ClusterIP 集群内部访问,私网地址,可以被各个节点及pod访问,无法被外部访问。
NodePort 集群外部访问
ExternalName 访问集群之外部服务,例如调用外部的api等
FQDN
CNAME-->FQDN
LoadBalancer 暂时做不了,需要共有云环境,要支持LBaas
Headless 无头service,没有clusterIP。 #设置 CluserIP=None

  使用场景: 1. 自主选择权,有时候client想自己来决定使用哪个Real Server,可以通过查询DNS来获取Real Server的信息。

         2. Service的对应的每一个Endpoints,即每一个Pod,都会有对应的DNS域名;这样Pod之间就可以互相访问。(这样对于一些集群类型的应用就可以解决互相之间身份识别的问题)

  

service是属于4层代理,属于osi模型四层模型,对于https不支持

使用清单来定义service:
ClusterIP类型:

[root@k8s-master manifests]# vim svc.ClusterIP.yaml

apiVersion: v1
kind: Service
metadata:
name: redis
namespace: default
spec:
selector: #注意 这里的selector下面没有matchLabels等字段
app: redis
role: logstor
clusterIP: 10.97.97.97 #这个选项一般不设置,使用控制器自动会分配
type: ClusterIP
ports:
- port: 6379 #service port
targetPort: 6379 #pod port

NodePort类型:

[root@k8s-master manifests]# cat svc.NodePort.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-nginx
namespace: default
spec:
selector: #注意 这里的selector下面没有matchLabels等字段
run: nginx-deploy
clusterIP: "" #这个选项一般不设置,使用控制器自动会分配
type: NodePort
ports:
- port: 80 #service port
targetPort: 80 #pod port
nodePort: 30080 #这个端口如果不指定30000 到32767之间的端口会被随机分配出来。

===
nodePort: 可以不用指定,会自动分配
===
ExternalName类型:
eg:
配置方式同前两种

Session Affinity: ClienIP #这个值设置为Clientip后会会话保持,让同一个ip的访问到的后端pod为同一个,默认值是None,为None时候是负载均衡,随机到各个后端pod

Headless类型:
eg:
[root@k8s-master manifests]# cat svc.headless.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
namespace: default
spec:
selector: #注意 这里的selector下面没有matchLabels等字段
app: myapp
role: canary
clusterIP: None #在Headless类型中,这里值设置为None
ports:
- port: 80 #service port
targetPort: 80 #pod port

===
资源记录:SVC_NAME.NS.DOMAIN.LTD.
svn.cluster.local
redis.default.svc.cluster.local

最新文章

  1. jQuery模仿淘宝商品评价
  2. ACM/ICPC 之 ACM计算机工厂-EK算法(POJ3436)
  3. exe文件添加为服务
  4. C# 正则分组捕获
  5. Apache开发模块
  6. DOS永久设置系统环境变量-WMIC
  7. php xml常用函数的集合(比较详细)
  8. HDOJ1020 Encoding
  9. 容易上手-类似ERP系统 简单特效
  10. 将 SQL Server 实例设置为自动启动(SQL Server 配置管理器)
  11. mac安装软件系列
  12. 请一定记得升级java虚拟机
  13. MySQL多数据源笔记3-分库分表理论和各种中间件
  14. web SPA项目目录、命名规范
  15. TreeMap 的排序冲突吗
  16. MySQL按年度、季度、月度、周、日SQL统计查询
  17. 多线程.Thread.Sleep方法
  18. swift 学习- 12 -- 方法
  19. java swing MenuItem乱码处理
  20. @Repository , @Service , @Controller 和 @Component

热门文章

  1. 程序员和IT员不能错过的网站
  2. python 之禅 又名 蛇宗三字经
  3. 简单易用的PIL,教你如何使用python实现自动化截屏
  4. 04_ Flume采集文件到HDFS案例
  5. 异步函数Demo
  6. 按照教程自动安装RFNoC时.在使用pip安装pybombs时出现报错,解决办法
  7. vue 自定义指令的魅力
  8. 再度吐槽,PHP在centos7的安装方式稍不注意可能就打击你的积极性
  9. 小程序分享链接功能 - onShareAppMessage
  10. python第三方库安装