k8s之Service资源
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资源的更多相关文章
- 容器编排系统k8s之Service资源
前文我们了解了k8s上的DemonSet.Job和CronJob控制器的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14157306.html:今 ...
- k8s 之service资源介绍(三)
kubernetes service资源 apiVersion: v1 kind: Service metadata: name: kubia spec: ports: - port: 80 targ ...
- Kubernetes 学习10 Service资源
一.Service对应组件关系 1.在kubernetes平台之上,pod是有生命周期的,所以为了能够给对应的客户端提供一个固定的访问端点,因此我们在客户端和服务Pod之间添加一个固定的中间层,这个中 ...
- k8s管理pod资源对象(上)
一.容器于pod资源对象 现代的容器技术被设计用来运行单个进程时,该进程在容器中pid名称空间中的进程号为1,可直接接收并处理信号,于是,在此进程终止时,容器即终止退出.若要在一个容器中运行多个进程, ...
- linux运维、架构之路-K8s通过Service访问Pod
一.通过Service访问Pod 每个Pod都有自己的IP地址,当Controller用新的Pod替换发生故障的Pod时,新Pod会分配到新的IP地址,例如:有一组Pod对外提供HTTP服务,它们的I ...
- service资源
service的作用:帮助外界用户访问k8s内的服务,并且提供负载均衡 创建一个service vim k8s_svc.yml apiVersion: v1 kind: Service metadat ...
- k8s系列---service
来源 : http://blog.itpub.net/28916011/viewspace-2214745/ service是要通过coreDNS来管理pod的. kube-proxy始终监视着api ...
- 容器编排系统k8s之Ingress资源
前文我们了解了k8s上的service资源的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14161950.html:今天我们来了解下k8s上的In ...
- 容器编排系统K8s之crd资源
前文我们了解了k8s节点污点和pod的对节点污点容忍度相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14255486.html:今天我们来聊一下扩展 ...
随机推荐
- python爬虫基础16-cookie在爬虫中的应用
Cookie的Python爬虫应用 Cookie是什么 Cookie,有时也用其复数形式 Cookies,英文是饼干的意思.指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上 ...
- python 取余运算
python中取余运算逻辑如下: 如果a 与d 是整数,d 非零,那么余数 r 满足这样的关系: a = qd + r , q 为整数,且0 ≤ |r| < |d|. 经过测试可发现,pytho ...
- 「新手必看」Python+Opencv实现摄像头调用RGB图像并转换成HSV模型
在ROS机器人的应用开发中,调用摄像头进行机器视觉处理是比较常见的方法,现在把利用opencv和python语言实现摄像头调用并转换成HSV模型的方法分享出来,希望能对学习ROS机器人的新手们一点帮助 ...
- Java-basic-2-
接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类. 如果一个类定义在某个包中,那么package语句应该在源文件的首行. 如果源文件包含import语句,那么应该放在package语句和 ...
- HDU:2255-奔小康赚大钱(KM算法模板)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2255 奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Mem ...
- 最长回文子串——manacher
最长回文子串--Manacher 算法 (原版的博主的代码都是用py写的,这里改成c++) c++ 算法 字符串处理 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度. 如果一 ...
- Android开发——减小APK大小
0. 前言 APK的大小对APP的加载速度,使用内存大小和消耗功率多少有一定影响.如何减小APK的大小对于Android开发者是一个永恒的话题. 查阅了很多相关资料,并将其做了删减以及总结.本文原创, ...
- 枚举进程——暴力搜索内存(Ring0)
上面说过了隐藏进程,这篇博客我们就简单描述一下暴力搜索进程. 一个进程要运行,必然会加载到内存中,断链隐藏进程只是把EPROCESS从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...
- Leetcode 451.根据字符出现频率排序
根据字符出现频率排序 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次 ...
- R语言采坑系列——Warning message: In validDetails.polygon(x) : 强制改变过程中产生了NA
用ggplot2的geom_density_2d时,总是不能填充图案,并报错: Warning message: In validDetails.polygon(x) : 强制改变过程中产生了NA 解 ...