一  服务集群内部或者客户端与pod的通信桥梁

    kubernets集群的内部pod访问为啥不能使用传统的IP:PORT的形式?

    • pod是短暂的,它们会随时启动或者关闭,原因可能是pod所在的节点下线了,或者管控者RC,RS,DS,JOB,CronJob等的移除
    • pod的IP在调度前才会分配IP,因此客户端无法提前预知到pod的IP地址
    • pod的水平伸缩性,预示这,客户端无需关注pod的ip,相反所有的pod都应该通过一个唯一并且固定的IP进行访问才能符合pod的这一特性

  

二  认识services

   结合以上所述场景,kubernets提供了一种servier的资源,services拥有一个固定的IP以及端口,客户端通过这个端口来访问services管理下面的pod

即使管理的pod由于节点下线,或者管控器的缩放导致pod的数量增加或者减少(减少后的数量始终应该大于等于1),客户端仍然可以通过services的IP以及端口

来访问剩下的pod所提供的服务,而无需管理pod的实际IP,同时也实现了负载均衡的作用

三  定义service

  3.1  在定义service之前我们可以先创建包含三个pod的RC,RC通过标签来组织管理pod,同样的svc也是通过标签来为pod提供统一IP和端口暴露

    3.1.1  RC以及SVC的定义文件展示

RC的文件展示
apiVersion: v1
kind: ReplicationController
metadata:
name: kubia
spec:
replicas: 3
selector:
app: kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
ports:
- containerPort: 8080

SVC的文件定义展示

apiVersion: v1
kind: Service
metadata:
name: kubia
spec:
sessionAffnity: ClientIp
ports:
- port: 80
targetPort: 8080
selector:
app: kubia
sessionAffnity这个参数添加的话可以让每次同一个client访问的pod都是同一个,称之为svc的会话亲和性

  3.2  创建RC以及SVC的结果显示

[root@node01 Chapter05]# k get po
NAME READY STATUS RESTARTS AGE
kubia-c8fnf 1/1 Running 0 10m
kubia-k4fkm 1/1 Running 0 10m
kubia-kr6bc 1/1 Running 0 10m [root@node01 Chapter05]# k describe svc kubia
Name: kubia
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=kubia
Type: ClusterIP
IP Families: <none>
IP: 10.109.29.64
IPs: <none>
Port: <unset> 80/TCP
TargetPort: 8080/TCP
Endpoints: 10.244.1.47:8080,10.244.2.42:8080,10.244.2.43:8080

  3.3  验证能否通过服务的唯一IP:PORT来访问刚才创建的pod

[root@node01 Chapter05]# k get po
NAME READY STATUS RESTARTS AGE
kubia-c8fnf 1/1 Running 0 138m
kubia-k4fkm 1/1 Running 0 138m
kubia-kr6bc 1/1 Running 0 138m [root@node01 Chapter05]# k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d2h
kubia ClusterIP 10.109.29.64 <none> 80/TCP 133m

[root@node01 Chapter05]# k exec kubia-c8fnf -- curl -s http://10.109.29.64
You've hit kubia-k4fkm

[root@node01 Chapter05]# k exec kubia-c8fnf -- curl -s http://10.109.29.64
You've hit kubia-c8fnf

[root@node01 Chapter05]# k exec kubia-c8fnf -- curl -s http://10.109.29.64
You've hit kubia-kr6bc

[root@node01 Chapter05]# k exec kubia-c8fnf -- curl -s http://10.109.29.64
You've hit kubia-k4fkm

通过在节点上面以其中之一的pod里面访问服务暴露出来的ip:port能够访问到服务关联的pod里面的应用,并且每次都是随机的去访问pod的应用

  3.4 上面的例子可以很好的说明了对于pod内部的应用是单端口的情况下的访问情况,但是如果pod内部的应用属于两个或两个以上的端口呢?kubernets提供了什么解决方案

下面看这个双端口的pod是如何被服务映射出来的

apiVersion: v1
kind: Service
metadata:
name: kubia
spec:
ports:
- port: 80
targetPort: 8080
- port: 443
targetPort: 8443
selector:
app: kubia

没错,正如你所见,只需要单纯的在spce.ports里面添加pod需要映射出来的端口,是不是很简单?

  

  3.5 另外kubernets还支持使用别名的形式来命名pod里面需要映射的端口号,这么做的好处显而易见,就是在pod修改端口号的时候,由于svc里面只是引用端口的别名,所有svc不需要

更改也能正确的映射出pod修改后的端口号

  现在分别对pod和svc的配置文件列出来作出说明

  pod

kind: Pod
spec:
containers:
- name: kubia
ports:
- name: http
containerPort: 8080
- name: https
containerPort: 8443

  svc

kind: Service
spec:
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https

  

kubernets之服务资源的更多相关文章

  1. kubernets之Ingress资源

    一  Ingress集中式的kubernets服务转发控制器 1.1  认识Ingress的工作原理 注意:图片来源于kubernets in action一书,如若觉得侵权,请第一时间联系博主进行删 ...

  2. World Wind Java开发之十四——添加WMS地图服务资源(转)

    数据是GIS的核心,没有数据一切无从谈起,Internet上有很多在线WMS地图服务资源,我们可以好好利用这些数据资源,比如天地图.必应地图.NASA.OGC数据服务等等. 在我们国家常用的还是天地图 ...

  3. kubernets之statefulset资源

    一  了解Statefulset 1.1  对比statefulset与RS以及RC的区别以及相同点 Statefulset是有状态的,而RC以及RS等是没有状态的 Statefulset是有序的,拥 ...

  4. kubernets之Deployment资源

    一  声明式的升级应用 1.1  回顾一下kubernets集群里面部署一个应用的形态应该是什么样子的,通过一副简单的图来描述一下 通过RC或者RS里面的模板创建了三个pod,之后通过一个servci ...

  5. kubernets之job资源

    一  介绍job资源 1.1   前面介绍的RC,RS,DS等等,管控的pod都是需要长期持久的运行的应用,但是尝试考虑另外一种场景,在微服务的场景下,有些pod的作用就是需要 执行完一些命令之后正常 ...

  6. kubernets之服务的实现方式

    一  服务如何通过kubernetes集群的组件来实现其功能 1.1  节点上的所有的服务相关的功能实现都是通过节点上面的kube-proxy来实现的,服务提供了一个或者多个服务IP以及端口对客户端开 ...

  7. kubernets之secret资源

    一  对于一些保密度比较高的文件,k8s又是如何存储的呢? 针对那些保密度比较高的配置文件,例如证书以及一些认证配置不能直接存储在configmap中,而是需要存储在另外一种资源中,需要对存储在里面的 ...

  8. kubernets之服务重定向

    一  服务的强大功能之处的其他表现 前面介绍的所有有关服务的说明,都是将集群内部的pod应用暴露出来提供外部客户端或者内部的客户端进行访问,但是服务的强大之处远远不止于此 服务甚至可以将集群外部的应用 ...

  9. kubernets之服务发现

    一  服务与pod的发现 1.1  服务发现pod是很显而易见的事情,通过简称pod的标签是否和服务的标签一致即可,但是pod是如何发现服务的呢?这个问题其实感觉比较多余,但是接下来你就可能不这么想了 ...

随机推荐

  1. 【UV统计】海量数据统计的前世今生

    转载请注明出处 背景 在互联网公司中,每个项目都需要数据统计.分析,便于项目组利用详细数据研究项目的整体情况,进行下一步的调整.在数据统计中,UV统计是最常见的,也是最普遍的.有的场景要求实时性很高, ...

  2. Python的基本介绍

    我认为Python打破了传统语言的各种细节,让我对编程语音有了全新认识 Python的优势: 可移植性高,解释性更加简单,这两点在编程语言发展到现在已经成为不可或缺的一部分,而很多种编程语言能做到这几 ...

  3. [日常摸鱼]Luogu2521[HAOI2011]防线修建-set维护凸包

    https://www.luogu.org/problemnew/show/2521 题意:维护一个上凸包:删点,查询周长 很容易想到把问题转换为离线:先读入全部操作,记录下最后剩下的点,倒着加点来维 ...

  4. C# 学习第七天

    P96 面向对象的概念 ①先有的 面向过程 --------> 然后才衍生出面向对象的思想 ②面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作 比如说 把大象塞进冰箱去 ③面向过 ...

  5. ecshop v2 v3 EXP

    import requests import binascii def get_v2Payload(code): '''Ecshop V2.x payload''' code = "{$ab ...

  6. 持久层之 MyBatis: 第一篇:快速入门

    MyBatis入门到精通 JDBC回顾 1.1.认识MyBatis 1.1.使用IDEA创建maven工程 1.2.引入mysql依赖包 1.3.准备数据 1.4 使用JDBC手写MyBatis框架 ...

  7. 史上最全Xshell and Xftp 工具的使用

    文章目录 什么是xshell 解决: 安装Xshell Xshell怎么建立连接 Xshell如果修改已有连接信息? 修改,背景色,字体,编码 Xshell导出已有的登录信息 Xftp的使用 XFP建 ...

  8. MySQL_CRUD_In_Terminal

    MySQL的CRUD操作 从Terminal中,可以对数据库进行链接,无需GUI界面就可以对数据库进行相关操作.对于Linux.Windows.MacOS,也可以使用可视化软件Navicat.MySQ ...

  9. PHP功能代码片段

    1.连接MYSQL数据库代码  <?php  $connec=mysql_connect("localhost","root","root&qu ...

  10. Blogs实现顶部的欢迎信息

    简单,就直接上代码: <div style="text-align: center; font-size:20px; margin-bottom:0px; margin-top:0px ...