1.Service概述

service是kubernetes中最核心的资源对象之一,service和pod之间是通过Label串起来,相同的Service的pod的Label是一样的.同一个service下的所有pod是通过kube-proxy实现负载均衡.而每个service都会分配一个全局唯一的虚拟ip,也就cluster ip.

在该service整个生命周期内,cluster ip保持不变,而在kubernetes中还有一个dns服务,它会把service的name解析为cluster ip.

service工作模式:userspace(1.1版本之前)、iptables(1.10版本之前)和ipvs(1.11版本之后)

类型:ExternalName(集群内部pod想要访问外部服务),ClusterIP,NodePort,

LoadBalancer:k8s如果部署在公有云上,且公有云支持LBAAS,k8s的CloudControllor会调用IAAS的api,创建service时会按需创建,删除时会按需删除,这种类型称为负载均衡器类型.

资源记录:SVC_NAME.NS_NAME.DOMAIN.LTD.

svc.cluster.local. 例如:redis.default.svc.cluster.local.

2.ClusterIP

vim redis-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: default
spec:
selector:
app: redis
role: logstor
clusterIP: 10.97.97.97 # 可以不指定,将会自动分配
type: ClusterIP
ports:
- port: 6379
targetPort: 6379 port:service的端口
targetPort:pod的端口
nodePort:宿主机的端口

3.NodePort

将物理机的端口映射到service的端口,外部可通过宿主机IP+port的方式访问

client->NodeIP:NodePort->ClusterIP:ServicePort->PodIP:targetPort

vim myapp-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: default
spec:
selector:
app: myapp
role: canary
clusterIP: 10.99.99.99
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30080 # 可以不指定,将会自动分配 kubectl apply -f myapp-svc.yaml
# 打补丁:session绑定,第一次访问的是哪台pod,之后访问时就会一直是这台pod
# 用sessionAffinity将同一个客户端会话请求粘滞到一个固定的pod上
# 这样就不会出现负载均衡现象,相当于nginx的ip_hash功能
kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"ClientIP"}}' # 也可以直接用edit方法编辑,再改回负载均衡模式
kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"None"}}'

无头service--不指定ClusterIP:

无头service是指service name直接解析为后面的pod ip,无头就是没有cluster ip牵头

vim myapp-svc-headless.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
namespace: default
spec:
selector:
app: myapp
release: canary
clusterIP: "None"
ports:
- port: 80
targetPort: 80 kubectl apply -f myapp-svc-headless.yaml
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d
myapp-svc ClusterIP None <none> 80/TCP 6s # 直接解析为后端pod ip
dig -t A myapp-svc.default.svc.cluster.local. @10.96.0.10
myapp-svc.default.svc.cluster.local. 5 IN A 10.244.2.8
myapp-svc.default.svc.cluster.local. 5 IN A 10.244.1.10 kubectl get pods -o wide
NAME READY STATUS AGE IP NODE
myapp-deploy-65df64765c-6vrjq 1/1 Running 9s 10.244.2.8 k8s-node2
myapp-deploy-65df64765c-88h9d 1/1 Running 9s 10.244.1.10 k8s-node1

ExternalName类型的服务适用于外部服务使用域名的方式,缺点是不能指定端口,要实现集群内访问集群外服务的这个需求,也可以实现,因为集群内的Pod会继承Node上的DNS解析规则.因此只要Node可以访问的服务,Pod中也可以访问到.

参考博客:http://blog.itpub.net/28916011/viewspace-2214745/

k8s之Service资源的更多相关文章

  1. 容器编排系统k8s之Service资源

    前文我们了解了k8s上的DemonSet.Job和CronJob控制器的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14157306.html:今 ...

  2. k8s 之service资源介绍(三)

    kubernetes service资源 apiVersion: v1 kind: Service metadata: name: kubia spec: ports: - port: 80 targ ...

  3. Kubernetes 学习10 Service资源

    一.Service对应组件关系 1.在kubernetes平台之上,pod是有生命周期的,所以为了能够给对应的客户端提供一个固定的访问端点,因此我们在客户端和服务Pod之间添加一个固定的中间层,这个中 ...

  4. k8s管理pod资源对象(上)

    一.容器于pod资源对象 现代的容器技术被设计用来运行单个进程时,该进程在容器中pid名称空间中的进程号为1,可直接接收并处理信号,于是,在此进程终止时,容器即终止退出.若要在一个容器中运行多个进程, ...

  5. linux运维、架构之路-K8s通过Service访问Pod

    一.通过Service访问Pod 每个Pod都有自己的IP地址,当Controller用新的Pod替换发生故障的Pod时,新Pod会分配到新的IP地址,例如:有一组Pod对外提供HTTP服务,它们的I ...

  6. service资源

    service的作用:帮助外界用户访问k8s内的服务,并且提供负载均衡 创建一个service vim k8s_svc.yml apiVersion: v1 kind: Service metadat ...

  7. k8s系列---service

    来源 : http://blog.itpub.net/28916011/viewspace-2214745/ service是要通过coreDNS来管理pod的. kube-proxy始终监视着api ...

  8. 容器编排系统k8s之Ingress资源

    前文我们了解了k8s上的service资源的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14161950.html:今天我们来了解下k8s上的In ...

  9. 容器编排系统K8s之crd资源

    前文我们了解了k8s节点污点和pod的对节点污点容忍度相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14255486.html:今天我们来聊一下扩展 ...

随机推荐

  1. Python学习笔记:面向对象(类)

    1.类定义:Python3中,如果新建的类没有继承任何其他类,默认继承基础类object.Python2中如果没有显式继承object类就是经典类,而显式继承了object类就是新式类,Python2 ...

  2. drf分页器

    drf分页器 1.第一种分页: 类似于django中的分页 2.第二种分页: 偏移分页 3.第三种分页: 加密分页(查询速度快) 无法跳跃 基本参数 from rest_framework.pagin ...

  3. QT入门学习笔记2:QT例程

    转至:http://blog.51cto.com/9291927/2138876 Qt开发学习教程 一.Qt开发基础学习教程 本部分博客主要根据狄泰学院唐老师的<QT实验分析教程>创作,同 ...

  4. 笔记-python-urllib

    笔记-python-urllib 1.      简介 PYTHON3中将urllib,urllib2整合到URLLIB中 包括以下模块 urllib.request 请求模块(核心) urllib. ...

  5. 关于.net 项目 nuget包还原项目失败的记录

    在.net项目中,一般通过vs打开项目,会自动进行nuget包还原,可能因为其他一些因素,包还原失败,同时在之前包依赖是可以正常使用,现在却提示包 AutoMapper 6.2.2 与 netcore ...

  6. linux随笔四

    1.ps -ef     : -e   显示系统上运行的所有进程,-f 显示一些有用的信息列 UID:负责启动进程的用户 PID:进程的ID PPID:父进程的PID(某个进程由另一个进程启动) C: ...

  7. 九度oj 题目1358:陈博的平均主义

    题目描述: 在JOBDU团队里,陈博是最讲平均主义的人了,但并不是像梁山好汉那样能够做到有钱同花,有肉同吃,毕竟,他还是被家里的领导管着的……陈博的平均主义,就只能体现在他对数字的喜好了.陈博特别喜欢 ...

  8. sysctl内核参数解析

    sysctl内核参数解析 kernel.参数 kernel.shmall = 2097152    ## 1> 表示所有内存大小.可以分配的所有共享内存段的总和最大值.(以页为单位) ## 2& ...

  9. 【bzoj1965】 [Ahoi2005]SHUFFLE 洗牌 欧拉定理

    题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...

  10. Linux 终端操作之「I/O Redirection」

    I/O 重定向是在终端运行程序时很常用的技巧,但是我对它所知甚少.今天我在 DigitalOcean 上发现了一篇很好的 tutorial.这篇随笔记录一下我的心得体会和发现的一个问题. I/O re ...