sevice概念介绍

service的实现强烈依赖于kube-DNS组件 新版本k8s安装的是core-DNS

因为每个pod是有生命周期的 为了给客户端访问pod提供一个固定的访问端点

service是客户端和pod服务端之间的一个中间层       service的名称解析是强依赖于dns服务的

集群网络种类介绍

pod网络和node网络的地址是一个实际的网络地址   是有对应的网络设备的(包括硬件和软件模拟出的网络设备)

service网络(集群网络)   是一个虚拟的IP地址 仅仅是iptables或者ipvs的转发规则   不存在对应的网络设备

service的三种实现模式

1.用户空间模式
       请求先经过内核再转给kube-proxy进程最后转回给内核
   2.内核iptables规则
   3.内核ipvs规则

新增或者删除一个符合标签选择器的pod后 pod信息会提交给apiserver保存到etcd中 kube-proxy一直watch着apiserver里面的数据信息

一旦检测到变化会立即实时生成对应的ipvs转发规则  使外部的请求可以转发到对应的pod上
   service ports字段说明

nodePort  》节点网络端口          port 》 service网络端口               targetPort 》pod网络端口

service资源记录解析规则

总体格式   SVC_NAME.NS_NAME.DOMAIN.LTD.       集群后缀名为 svc.cluster.local.

如  redis.default.svc.cluster.local.

redis是创建的service名称   .default是redis service所在的名称空间    .svc.cluster.local.是k8s集群默认添加的后缀

service种类

无头service

定义service的时候把clusterIP设置为None 就代表是无头service
      在集群内部做dns解析的时候直接把service名称解析为对应pod的ip列表

apiVersion: v1
kind: Service
metadata:
name: myappless
namespace: default
spec:
selector:
app: myapp
clusterIP: None
type: ClusterIP
ports:
- port:
targetPort:

headless_svc.yaml

有头service

如果是有头service的话 dns解析service名称的时候返回的是clusterIP 再由clusterIP通过DNAT到后端各个podIP之上

apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: default
spec:
selector:
app: myapp
clusterIP: 10.96.97.97
type: ClusterIP
ports:
- port:
targetPort:

head_svc.yaml

两种不同的service解析结果对比

[root@k8s-master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
myapp-deploy-67f6f6b4dc-248mn / Running 11m 10.244.2.71 node3
myapp-deploy-67f6f6b4dc-5kzk4 / Running 11m 10.244.1.147 node2
myapp-deploy-67f6f6b4dc-cglrb / Running 11m 10.244.2.70 node3
myapp-deploy-67f6f6b4dc-fsgrz / Running 11m 10.244.2.69 node3
myapp-deploy-67f6f6b4dc-l5bd7 / Running 11m 10.244.1.146 node2
[root@k8s-master ~]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> /UDP,/TCP 233d [root@k8s-master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> /TCP 233d
myapp ClusterIP 10.96.97.97 <none> /TCP 3m
myappless ClusterIP None <none> /TCP 12s #无头service直接解析到对应的pod上
[root@k8s-master ~]# dig -t A myappless.default.svc.cluster.local. @10.96.0.10 ; <<>> DiG 9.9.-RedHat-9.9.-.el7_6 <<>> -t A myappless.default.svc.cluster.local. @10.96.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:
;; flags: qr aa rd ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: ;; OPT PSEUDOSECTION:
; EDNS: version: , flags:; udp:
;; QUESTION SECTION:
;myappless.default.svc.cluster.local. IN A ;; ANSWER SECTION:
myappless.default.svc.cluster.local. IN A 10.244.1.146
myappless.default.svc.cluster.local. IN A 10.244.1.147
myappless.default.svc.cluster.local. IN A 10.244.2.69
myappless.default.svc.cluster.local. IN A 10.244.2.70
myappless.default.svc.cluster.local. IN A 10.244.2.71 ;; Query time: msec
;; SERVER: 10.96.0.10#(10.96.0.10)
;; WHEN: Mon May :: CST
;; MSG SIZE rcvd: #有头service解析到clusterIp上
[root@k8s-master ~]# dig -t A myapp.default.svc.cluster.local. @10.96.0.10 ; <<>> DiG 9.9.-RedHat-9.9.-.el7_6 <<>> -t A myapp.default.svc.cluster.local. @10.96.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:
;; flags: qr aa rd ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: ;; OPT PSEUDOSECTION:
; EDNS: version: , flags:; udp:
;; QUESTION SECTION:
;myapp.default.svc.cluster.local. IN A ;; ANSWER SECTION:
myapp.default.svc.cluster.local. IN A 10.96.97.97 ;; Query time: msec
;; SERVER: 10.96.0.10#(10.96.0.10)
;; WHEN: Mon May :: CST
;; MSG SIZE rcvd:
[root@k8s-master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> /TCP 230d
myapp NodePort 10.100.165.177 <none> :/TCP 5m
[root@k8s-master ~]# kubectl run client --image=busybox --restart=Never -it /bin/sh
If you don't see a command prompt, try pressing enter.
/ # wget -O -q http://myapp.default:80
Connecting to myapp.default: (10.100.165.177:)
-q % |*****************************************| :: ETA
/ # wget -O - -q http://myapp.default:80
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
/ # wget -O - -q http://myapp.default:80
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a> [root@k8s-master ~]# wget -O - -q http://myappd.default:80/hostname.html
[root@k8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
client / Running 46m
myapp-6865459dff-c59qp / Running 1h
myapp-6865459dff-zd6wg / Running 10m
[root@k8s-master ~]# kubectl exec -it client /bin/sh
/ # wget -O - -q http://myapp.default:80/hostname.html
myapp-6865459dff-zd6wg pod和pods deployment和deployments都可以
[root@k8s-master ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
myapp 1h
[root@k8s-master ~]# kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
myapp

service常用命令

service基础概念和操作的更多相关文章

  1. Docker基础概念及操作

    一.概念: Docker 属于Linux 容器的一种封装,提供简单易用的容器使用接口.目前最流行的Linux 容器解决方案. Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件, ...

  2. [妙味DOM]第一课:DOM基础概念、操作

    知识点总结 childNodes.children子节点列表集合.nodeType节点类型.nodeName.nodeValue.attributes属性列表集合 childNodes和childre ...

  3. Maven - Maven基础概念和操作总结

    1-下载及安装 1.1 - Maven - 项目管理利器 http://maven.apache.org/ Apache组织的开源项目. Maven是一个基于POM(Project Object Mo ...

  4. Web Service基础——基础概念

    1. Web Service基本概念 Web Service(Web服务)是一种远程调用技术,他的作用就是从远程系统中获取业务数据.具体来说,Web Service可以让你的网站使用其他网站的资源,比 ...

  5. Docker 基础概念科普 和 常用操作介绍

    Docker 基础概念 Docker是什么?         Docker的思想来自于集装箱,集装箱解决了:在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之 ...

  6. 【Service】【Database】【MySQL】基础概念

    1. 数据模型:层次模型.网状模型.关系模型 关系模型: 二维关系: 表:row, column 索引:index 视图:view 2. SQL接口:Structured Query Language ...

  7. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  8. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  9. Hadoop基础概念介绍

    基于YARN的配置信息, 参见: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ hadoop入门 - 基础概念 ...

随机推荐

  1. c#-泛型、协变、逆变

    泛型简单介绍: 可以使用泛型声明的元素:类.接口.方法.委托 泛型之前:泛型之前使用object封装不同类型的参数,缺点:性能差.运行时判断类型(不安全)...泛型是在编译期间转为实际类型副本,所以性 ...

  2. 【oracle】update 某字段为null

    字段 = null 注意这个字段要可以为空

  3. PEPE规范 和 垃圾回收

    目录 1.python解释器的种类及特点 2.PEP8规范 3.解释型语言和编译型语言 4.bit.B.KB.MB.GB的关系 5.列举你所了解到python2和python3的区别 6.is和==的 ...

  4. ABP abp zreo 老版本 支持dotnet framework 4.0

    下载了个abp zreo的老版本,module-zero-template-1.5.1, 只有这个版本支持.net framework4.0,其它都依赖.net framework 4.5和4.6去了 ...

  5. 【LG5504】[JSOI2011]柠檬

    [LG5504][JSOI2011]柠檬 题面 洛谷 题解 考虑\(dp\),令\(f_i\)表示\(dp\)到第\(i\)位且在第\(i\)位分段的最大值. 我们令题面中的\(s_i\)为\(a_i ...

  6. python爬虫实例——爬取歌单

    学习自<<从零开始学python网络爬虫>> 爬取酷狗歌单,保存入csv文件 直接上源代码:(含注释) import requests #用于请求网页获取网页数据 from b ...

  7. [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的“HT”

    [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的"HT" 敲黑板!!! 创建HTML超链接 <a>链接文本(此处会有下划线,可以单击 ...

  8. Hyperledger Fabric 1.4 快速环境搭建

    自己的硕士研究方向和区块链有关,工程上一直以IBM的Hyperledger Fabric为基础进行开发,对该项目关注也有两年了.目前迎来了Hyperledger Fabric v1.4,这也是Fabr ...

  9. Spring Events

    https://www.baeldung.com/spring-events by Eugen Paraschiv Spring+ I just announced the new Learn Spr ...

  10. JVM常用命令和性能调优建议 [Could not create the Java virtual machine]

    一.查看jvm常用命令jinfo:可以输出并修改运行时的java 进程的opts. jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. ...