一  服务集群内部或者客户端与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. sonarqube代码质量检查简单使用说明

    本文翻译自sonarqube官网文档,原地址为:https://docs.sonarqube.org/latest/architecture/architecture-integration/ 一,架 ...

  2. 使用VNC远程linux机器

    一,在Windows机器上下载vnc客户端 vnc viewer是一款vnc远程客户端,可以很方便的从Windows机器远程安装了图形界面和vnc服务器的linux机器. 从官网下载https://w ...

  3. js 乘除算法 浮点 精度解决办法

    js中进行浮点数运算时容易出现精度问题 1) 除法函数 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. //调用:accDiv(a ...

  4. Python分析世界幸福指数

    前言 民意测验机构盖洛普从2012年起,每年都会在联合国计划下发布<世界幸福指数报告>,报告会综合两年内150多个国家的国民对其所处社会.城市和自然环境等因素进行评价后,再根据他们所感知的 ...

  5. Maven史上最全的pom.xml详解

    下面主要是借鉴 官网的资料 收集而来 主要是为了讲解,用到的很少,但是还是需要了解 ,重点是方便查验资料 <project xmlns="http://maven.apache.org ...

  6. 【剑指offer】03 从尾到头打印链表

    题目地址:从尾到头打印链表 题目描述                                    输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 时间限制:C/C++ 1秒, ...

  7. 服务器安装ESXI6.7

    1    从官网下载ESXI镜像文件到本地 https://my.vmware.com/web/vmware/details?downloadGroup=ESXI670&productId=7 ...

  8. RPC 核心,万变不离其宗

    微信搜 「yes的练级攻略」干货满满,不然来掐我,回复[123]一份20W字的算法刷题笔记等你来领. 个人文章汇总:https://github.com/yessimida/yes 欢迎 star ! ...

  9. Nacos(一)源码分析Nacos注册示例流程

    nacos官方地址:https://nacos.io/zh-cn/ 大家可以看一下nacos的中文手册以及官方源码,博主就不带领大家快速入门 了,官方文档中都有而且非常标准,比其他博客写的好多了并且还 ...

  10. 【老孟Flutter】Stateful 组件的生命周期​

    老孟导读:关于生命周期的文章共有2篇,第一篇是介绍 Flutter 中Stateful 组件的生命周期. 博客地址:http://laomengit.com/blog/20201227/Statefu ...