一  服务集群内部或者客户端与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. Java IO流字符流简介及基本使用

    Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...

  2. 双向数据绑定 v-model

    双向数据绑定 就是既可以从页面传到数据也可以从数据到页面 初始运行结果为: 在输入框 更改数据 相应的输入框上的也会相对改变 然后再试试利用控制台更改数据 可以看到数据也被改变了 而且输入框中的内容也 ...

  3. 记一次 HBase Master is initializing 问题处理

    问题 hbase shell中建立建表出错 分析 org.apache.hadoop.hbase.PleaseHoldException: Master is initializing代表Master ...

  4. 2020-2021-1 20209307 《Linux内核原理与分析》第八周作业

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第八周作业> 这个作业的目标 & ...

  5. Spark-1-调优基本原则

    1基本概念和原则 每一台host上面可以并行N个worker,每一个worker下面可以并行M个executor,task们会被分配到executor上面去执行.Stage指的是一组并行运行的task ...

  6. Azure Service Bus(二)在NET Core 控制台中如何操作 Service Bus Queue

    一,引言 上一篇讲到关于 Azure ServiceBus 的一些概念,讲到 Azure Service Bus(服务总线),其实也叫 "云消息服务",是微软在Azure 上提供的 ...

  7. Java 面试知识点【背诵版 240题 约7w字】

    -- 转载自牛客网 是瑶瑶公主吖 Java 基础 40 语言特性 12 Q1:Java 语言的优点? ① 平台无关性,摆脱硬件束缚,"一次编写,到处运行". ② 相对安全的内存管理 ...

  8. Visual Studio 默认git拉取Github出错 No error could not read Username for 'https://github.com': terminal prompts disabled

    发布到远程存储库时遇到错误: Git failed with a fatal error.fatal: HttpRequestException encountered.   ��������ʱ��� ...

  9. RxHttp 完美适配Android 10/11 上传/下载/进度监听

    1.前言 随着Android 11的正式发布,适配Android 10/11 分区存储就更加的迫切了,因为Android 11开始,将强制开启分区存储,我们就无法再以绝对路径的方式去读写非沙盒目录下的 ...

  10. 关于django的坑(一)

    关于django orm 的坑: 关于设置数据库表自动更新 django的orm关于更新数据库的方法有update和save两种方法.想要表中自动更新需要一下几个条件: 使用 DateTimeFiel ...