k8s service对象

 

概述

service服务也是Kubernetes里核心字眼对象之一,Kubernetes里的每一个service其实就是我们经常提起的微服务架构中的一个微服务,之前讲解Pod,RC等资源对象其实都是为讲解Kubernetes Service做铺垫的,下图为Pod,RC与Service的逻辑关系

可以看到上面的架构图,service服务通过标签选择器定位后端pod,前提是service的selector必须和后端Pod标签对应上才能找到相对应的Pod,而前段frontend通过service就可以访问到后端提供服务的pod了,而service默认IP类型为主要分为:

  • ClusterIP:主要是为集群内部提供访问服务的
  • NodePort:可以被集群外部所访问,访问方式为    宿主机:端口号

下面我创建了一个nginx服务和一个对外提供服务的service,如下:

[root@master ~]# cat nginx.yaml
apiVersion: v1
kind: Service
metadata:
name: serivce-mynginx
namespace: default
spec:
type: NodePort
selector:
app: mynginx
ports:
- name: nginx
port: 80
targetPort: 80
nodePort: 30080 ---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: mynginx
template:
metadata:
labels:
app: mynginx
spec:
containers:
- name: nginx
image: lizhaoqwe/nginx:v1
ports:
- name: nginx
containerPort: 80

执行yaml文件

[root@master ~]# kubectl create -f test.yaml
service/serivce-mynginx created
deployment.apps/deploy created

查看pod和service状态

[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
deploy-696bccb9fd-9zk2f 1/1 Running 0 138m
deploy-696bccb9fd-vcgs5 1/1 Running 0 138m [root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d23h
serivce-mynginx NodePort 10.103.92.182 <none> 80:30080/TCP 138m

验证

外部访问service的问题

为了更加深刻理解kubernetes,我们需要弄明白kubernetes里的3中IP

  • NodeIP:NodeIP是kubernetes中每个节点的物理网卡IP地址,是一个真实存在的物理网络,所有属于这个网络的服务器都能通过这个网络直接通讯,包括集群外的主机访问集群内的主机也需要NodeIP
  • PodIP:PodIP是每个Pod地址,它是docker engine根据docker0网桥的IP地址进行分配的,通常是一个虚拟的二层网络,所以kubernetes里的一个Pod里的容器访问另外一个Pod里的容器时,就是通过PodIP所在的虚拟二层网络进行通讯的,而真实的TCP/IP流量是通过NodeIP所在的物理网卡流出的
  • ClusterIP:他是一个虚拟的IP,但更像是一个“伪造”的IP网络,原因有以下几点:
  1. ClusterIP仅仅作用于kubernetes service这个对象,并由kubernetes管理和分配ip地址
  2. ClusterIP无法被Ping,因为没有一个实体网络对象来响应
  3. ClusterIP只能结合service Port组成一个具体的通讯端口,如果集群外想访问需要做一些额外的操作
  4. 在kubernets集群内,NodeIP、PodIP和ClusterIP网之间通讯,采用的是kubernets自己设计的一种编程方式的特殊路由规则

k8s service对象的更多相关文章

  1. k8s service对象(三)

    概述 service服务也是Kubernetes里核心字眼对象之一,Kubernetes里的每一个service其实就是我们经常提起的微服务架构中的一个微服务,之前讲解Pod,RC等资源对象其实都是为 ...

  2. kubernetes命令式容器应用编排/部署应用/探查应用详情/部署service对象/扩缩容/修改删除对象

    部署Pod应用 创建delpoyment控制器对象 [root@master ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --port=80 ...

  3. K8S API对象

    POD Pod是在K8s集群中运行部署应用或服务的最小单元,它是可以支持多容器的.Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合 ...

  4. k8s Service学习

    service的概念 kubernetes service定义了一个抽象概念,一个pod的逻辑分组,一种可以访问的策略---通常称为服务.这组pod能够被service访问到,通常通过label se ...

  5. service对象

    Service 对象 提供用于创建服务程序的一组工具 语法 Shell.Service[.property|method] 属性 Description 服务描述,仅限于 Windows 2000 及 ...

  6. Spring普通类/工具类获取并调用Spring service对象的方法

    参考<Spring普通类获取并调用Spring service方法>,网址:https://blog.csdn.net/jiayi_0803/article/details/6892455 ...

  7. 使用nginx 正向代理暴露k8s service && pod ip 外部直接访问

    有时在我们的实际开发中我们希望直接访问k8s service 暴露的服务,以及pod的ip 解决方法,实际上很多 nodeport ingress port-forword 实际上我们还有一种方法:正 ...

  8. 使用ssh时报错:Service对象空指针异常

    有可能是spring容器不能自动生成service对象,导致空指针异常,常见的情况可能是在service前面加@Service注释

  9. k8s service NodePort 方式向外发布

    k8s service NodePort 方式向外发布 k8s 无头service 方式向内发布 k8s service 服务发现 {ServiceName}.{Namespace}.svc.{Clu ...

随机推荐

  1. 5分钟快速了解MySQL索引的各种类型

    文章持续更新,微信搜索「万猫学社」第一时间阅读. 关注后回复「电子书」,免费获取12本Java必读技术书籍. 什么是索引? 索引是数据库存储引擎用于快速查找到指定数据的一种数据结构. 可以用新华字典做 ...

  2. C语言文件读写命令fprintf和fscanf

    以向文件中读取和写入二维数组为例. 以下是fprintf的使用:向文件中写入10*10的二维数组,数组元素为1~100之间的随机数. #include <stdlib.h> #includ ...

  3. (转)文件上传org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed

    文件上传时,tomcat报错org.springframework.web.multipart.MultipartException: Failed to parse multipart servle ...

  4. springmvc中get和post区别和应用

    最近对post和get什么时候使用 和 应该怎么使用  他俩的区别  有了一些疑问 根据本人的了解   post是对数据进行了封装保护 get是安全性较差的 可以看到数据的信息    post是用来改 ...

  5. CentOS 安装、配置Nginx反向代理

    安装: yum install epel-release yum install nginx 配置: [root@bogon ~]# vim /etc/nginx/conf.d/default.con ...

  6. 点击按钮出现时间javascrip代码

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. Lua语言15分钟快速入门

    转载自: https://blog.csdn.net/qq_15437667/article/details/75042526 -- 单行注释 --[[ [多行注释] --]] ---------- ...

  8. Node.js小项目——学生信息管理系统

    这是迄今为止第一次接触后端的东西,是一个很小的项目,但是对于前端学习入门很好.我是先学了VUE框架再学的Node,学起来比较轻松,不过每个人都有自己的学习方法️ 一.项目描述 学生信息管理系统,可以实 ...

  9. double与Double

    1. double是基本数据类型,Double是原始数据类型(Java 类) 2. double创建引用,Double创建对象 3. double不可以为NULL,Double是类所以其对象是可以为N ...

  10. SEO工程师考试题目

    http://www.wocaoseo.com/thread-201-1-1.html      SEO,全名Search Engine Optimization,其中文名字为'搜索引擎优化' .其英 ...