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. 【Excel】去空格

    TRIM(TEXT) 不好用的话,把格式换成

  2. Github api【Restful接口规范】

    Overview This describes the resources that make up the official GitHub REST API v3. If you have any ...

  3. Pandas | 05 基本功能

    到目前为止,我们了解了三种Pandas数据结构以及如何创建它们.接下来将主要关注数据帧(DataFrame)对象,因为它在实时数据处理中非常重要,并且还讨论其他数据结构. 一.系列基本功能 编号 属性 ...

  4. django -- ORM建表

    前戏 ORM(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ORM的优势: ORM解决的主要问题是对象和关系的映射 ...

  5. Docker入门笔记(Centos7)

    centos7 wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo vim docker-c ...

  6. LOJ2778 [BOI2018]基因工程 随机化

    题面 不想写了...留坑吧... 基本思想可参照随机化解决判同问题的总结 代码: #include<bits/stdc++.h> using namespace std; #define ...

  7. R语言参数传递 按引用传递

    R 语言的参数传递是按照引用传递的,二者共享内存 如果想要按值传递 使用函数 copy()

  8. Asp.Net 服务器控件下使用Jquery.validate.js

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. gcc命令详解

    gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC. ...

  10. 关于 Object.defineProperty()

    通常,定义或者修改一个JS对象,有以下方式: // 1. 字面量 let obj = { name: 'cedric', age: 18 } // 2. new Object() let obj = ...