kubernetes学习记录(11)——深入学习Service
来源:互联网 发布:java备忘录实现思路 编辑:程序博客网 时间:2024/05/23 01:17
在之前的周会上汇报Kubernetes学习结果的时候,被问到一个问题:“一个Service能否提供多种服务,能否代理多组Pod副本?”这里来做一定的研究。
Service基本概念
Kubernetes里的每个Service其实就是微服务架构中的一个“微服务”。
Service定义了一个服务的访问入口地址。前端的应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,Service与其后端Pod副本集群之间则是通过Label Selector来实现“无缝对接”的。
kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立起每个Service到对应Pod的请求转发路由表,从而实现Service的智能负载均衡机制。
每个Pod都会被分配一个单独的IP地址,而每个Pod都提供了一个独立的Endpoint(PodIP+ContainerPort)以被客户端访问。
现在多个Pod副本组成了一个集群来提供服务,客户端如何访问它们呢?
相较常规做法,Kubernetes的Service不是共用一个负载均衡器的IP地址,每个Service都被分配了一个全局唯一的虚拟IP地址(Cluster IP),每个服务就变成了具备唯一IP地址的“通信节点”
通过创建Service,可以为一组具有相同功能的容器提供一个统一的入口地址,并且将请求进行负载分发到后端的各个容器应用上。
Service多端口问题
许多服务都存在多端口的问题,通常一个端口提供业务服务,一个端口提供管理服务。Kubernetes Service支持多个Endpoint,在存在多个Endpoint的情况下,要求每个Endpoint定义一个名字来区分。
例子:
appVersion: v1kind: Servicemetadata: name: mywebspec: type: NodePort ports: - port: 8080 name: service-port nodePort: 30001 - port: 8005 name: shutdown-port nodePort: 30002 selector: app: myweb
试验Service代理多组Pod
在kubernetes学习记录(6)——Guestbook Demo 的基础上进行修改试验
只修改frontend-service.yaml。如下
apiVersion: v1kind: Servicemetadata: name: frontend labels: app: guestbook tier: frontendspec: type: NodePort ports: - port: 80 name: frontend nodePort: 30001 #添加端口8080的映射 - port: 8080 name: myweb nodePort: 30002 selector: app: guestbook tier: frontend
创建myweb1-rc.yaml,如下:
apiVersion: c1kind: ReplicationControllermetadata: name: myweb1spec: replicas: 1 selector: app: guestbook tier: frontend template: metadata: labels: app: guestbook tier: frontend spec: containers: - name: myweb1 image: 192.168.121.140:5000/tomcat:v1 ports: - containerPort: 8080
这样,kube-proxy进程通过label selector,可以建立frontend service到frontend pod和myweb1 pod两组pod的请求转发路由表。
执行
kubectl replace -f frontend-service.yamlkubectl create -f myweb1-rc.yamlkubectl get svc frontend -o wide
可以看见80端口被映射到了30001上,8080端口被映射到了30002上。
验证,在浏览器上分别输入nodeip:30001和nodeip:30002。
均可以打开。
结论
通过试验,我的结论是,Service中的关键字段是ports和selector,通过selector和port端口,service提供服务。
所以我认为一个Service能提供多种服务,能代理多组Pod副本。
- kubernetes学习记录(11)——深入学习Service
- kubernetes学习记录(1)——kubernetes初理解
- kubernetes学习记录(3)——集群外部访问Pod或Service
- kubernetes学习记录(6)——Guestbook Demo
- kubernetes学习记录(4)——创建kubernetes覆盖网络
- kubernetes学习记录(0)——学习记录阅读顺序
- Kubernetes学习资料记录
- kubernetes学习记录(2)——基于Centos7.2的kubernetes集群自动安装与配置
- Kubernetes学习总结(1)——Kubernetes入门简介
- Kubernetes学习总结(2)——Kubernetes设计架构
- 深入学习Kubernetes | 上海站
- kubernetes学习记录(12)——Ingress(demo为TCP的负载均衡)
- kubernetes学习记录(9)——集群基于CA签名的安全设置
- kubernetes学习记录(7)——弹性伸缩与滚动升级
- kubernetes学习记录(8)——中文界面版dashboard安装
- kubernetes学习记录(10)——建立Heapster+Influxdb+Grafana集群性能监控平台
- kubernetes学习2--RC/service/pod实践
- kubernetes学习2--RC/service/pod实践
- Redis 的安装配置介绍
- 安卓屏幕完美适配方案——独家秘笈
- 【caffe】在windows下输出训练caffemodel的log日志并画出accuracy和loss曲线
- “adb不是内部或外部命令,也不是可运行的程序或批量文件“
- Python中的Scapy初探之四--DNS中毒
- kubernetes学习记录(11)——深入学习Service
- Spannable对textview首行缩进
- java 几种基础算法的实现 (五)
- ARP扫描工具arp-scan
- python
- python对日志按天分割
- less要注意的事项
- yum install的时候提示:Loaded plugins: fastestmirror
- Codeforces 676D Theseus and labyrinth 模拟+bfs