k8s service type_k8s重器之Service
Service是k8s的核心,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求进行负载分发到各个容器应用上。
目录:
Service定义详解
Service基本用法
集群外部访问Pod和Service
Service定义详解
Service的定义比Pod简单。
apiVersion: v1kind: Servicemetadata: name: string labels: name: string annotations: name: stringspec: type: string selector: name: string clusterIP: string #虚拟服务ip,缺省默认分配 sessionAffinity: string #是否支持session,可选值为ClientIP,表示同一个客户端 ports: - name: string protocol: string #端口协议,支持TCP、UDP,默认是TCP port: int #宿主机端口 targetPort: int #目标Pod的端口 nodePort: int #k8s内部端口 status: loadBalancer: ingress: ip: string hostname: string
上述定义中的spec.type有两个选项:
当为NodePort时,需要配置nodePort映射到指定端口当为LoadBalancer,需要在status中设置外部负载均衡器
Service基本用法
(1)通过yaml文件创建:
apiVersion: v1kind: Servicemetadata: name: nginx-servicespec: type: NodePort selector: name: nginx-pod ports: - name: nginx-service port: 80 targetPort: 80 nodePort: 30080
比如上述,定义了一个Service,对应的是具有key=name,value=nginx-pod这个标签的Pod,type定义为NodePort,宿主机端口为80,对应Pod端口为80,而nodePort为30080
通过如下命令创建Service
kubectl create -f service-name.yaml
创建之后查看:
可看到Service被分配的ip,对应的port以及选择的标签信息
(2)负载均衡
目前k8s提供了两种负载均衡策略:RoundRobin和SessionAffinity
1、RoundRobin:轮询模式
2、SessionAffinity:基于客户端IP地址进行会话保持模式,请求第一次到哪个Pod,则后续还会继续转发到那个Pod。
默认情况下,采用轮询模式,但也可以 通过设置spec.sessionAffinity设置为ClientIP启用SessionAffinity策略
接下来验证一下默认的轮询模式:
创建两个具有key=name,value=nginx-pod标签的Pod,容器内运行nginx。
nginx-one:
apiVersion: v1kind: Podmetadata: name: nginx-pod1 labels: name: nginx-podspec: containers: - name: nginx-pod1 image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80
nginx-two:
apiVersion: v1kind: Podmetadata: name: nginx-pod2 labels: name: nginx-podspec: containers: - name: nginx-pod2 image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80
创建完两个容器之后,分别进入两个容器修改nginx首页的字样。
进入容器:
kubectl exec -it nginx-pod1 /bin/bash
找到文件并进行修改,此处需要注意的是,由nginx镜像创建的容器并不具有vim和vi这两个编辑工具,所以这边使用sed或echo都行
sed命令替换字符串格式是:
sed -i 's/需要被替换字符串/替换后字符串/g' file-name
sed -i 's/Welcome to nginx!/Welcome to nginx-pod two!/g' /usr/share/nginx/html/index.html
修改好后在浏览器访问:使用ip:nodePort访问
可以看到,service进行了负载均衡处理。
集群外部访问Pod和Service
(1)将Pod的端口号映射到宿主机
比如将上述的nginx-pod1映射到主机的20080端口:
apiVersion: v1kind: Podmetadata: name: nginx-pod1 labels: name: nginx-podspec: containers: - name: nginx-pod1 image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 hostPort: 20080
然后查看此Pod在哪个节点上运行
然后在浏览器中访问此节点的20080端口:
(2)通过设置Pod级别的hostNetwork=true
该Pod的所有容器的端口号都将被直接映射到宿主机上,需要注意的是,如果不指定hostPort,则默认与containerPort一样,如果指定 ,则hostPort必须等于containerPort。
例如将上述的nginx-pod2设置hostNetwork=true
apiVersion: v1kind: Podmetadata: name: nginx-pod2 labels: name: nginx-podspec: hostNetwork: true containers: - name: nginx-pod2 image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80
查看pod创建后在哪个节点上
在浏览器上访问:
(3)将Service的端口号映射到宿主机上
通过设置spec.type为NodePort,同时设置spec.ports.nodePort设置宿主机上的端口号。
例如在Service基本用法那一小节的Service定义,相应的使用也在那一节有
apiVersion: v1kind: Servicemetadata: name: nginx-servicespec: type: NodePort selector: name: nginx-pod ports: - name: nginx-service port: 80 targetPort: 80 nodePort: 30080
END
往期推荐
k8s水平扩容深入理解Pod(三)深入理解Pod(二)深入理解Pod(一)k8s基本使用
下期见
Liusy01
一个分享Java后端学习日志的公众号
欢迎大家点个在看
分享至朋友圈
好文!点个好看!
k8s service type_k8s重器之Service相关推荐
- .net core i上 K8S(六).netcore程序的service网络代理模式
正文 上一章我们讲了pod的hostip模式,但在生产环境中,我们都是通过service来访问k8s集群的,service有两种模式来暴漏端口,今天我们来分享一下 1.clusterIP模式 我们在创 ...
- k8s 之服务发现(service)
文章目录 k8s 之服务发现(service) 一.基本概念 二.类型介绍 Service 在 K8S 中有以下四种类型 三.代理模式 userspace 代理模式 iptables 代理模式 ipv ...
- 玩转k8s(四)—— 通过Service访问Pod
我们不应该期望k8s Pod是健壮的,而是要假设Pod中的容器很可能因为各种原因发生故障而死掉.Deployment等Controller会通过动态的创建和销毁Pod来保证应用整体的健壮性.换句话说, ...
- Android Service(一) Service初识
在开发应用中,或多或少都会遇到Service有关知识.今天就来分析Service的使用. 一.概述. 首先看看官网是如何描述的. A Service is an application compone ...
- service mysqld restart与service mysql restart的区别
1.前言 之前,遇到过在不同 linux 系统中启动或关闭 mysql,网上查询命令大都不一样,大致分为下面三种(以重启为例): service mysql restartservice mysqld ...
- 【Android 进程保活】应用进程拉活 ( 系统 Service 机制拉活 | Service 组件 onStartCommand 方法分析 | 源码资源 )
文章目录 一. Service 组件 onStartCommand 方法分析 1. onStartCommand 函数返回值分析 2. onStartCommand 函数 START_STICKY_C ...
- Android Service、IntentService,Service和组件间通信
Service组件 Service 和Activity 一样同为Android 的四大组件之一,并且他们都有各自的生命周期,要想掌握Service 的用法,那就要了解Service 的生命周期有哪些方 ...
- local service system账户_systemd.service学习和使用总结
公众号:暮北林 Q Q 群 : 一起学前端 Systemd Service 学习和使用总结 什么是Systemd service system就是系统,d的意思是daemon,systemd就是系统 ...
- WCF学习笔记(一):WCF Service Application和WCF Service Library的区别
近来在学习WCF,遇到了不少问题,有的让我焦头烂额,不过解决问题的过程就是学习的过程,收获也不少. 昨天有个问题开始困扰我--WCF Service Application和WCF Service L ...
最新文章
- 20145234黄斐《Java程序设计》第五周
- 如何自学python爬虫-python爬虫学习过程:
- 200922阶段一C++关联容器map
- 【C】KoobooJson在asp.net core中的使用
- app store 关键词
- Android 扫描SD卡中的所有视频文件
- Coolite ComboBox绑定方式
- 十二、流程控制之条件运算符
- 耗时6个月,整理了30款免费高评分软件,完爆付费
- B2B 网关软件 以新颖的模式 让企业步入新常态
- php中的列表属性,php类中的长属性列表 – 我可以缩短它吗?
- nodejs 遍历目录(文件夹)下的所有文件
- 点亮LED-STM32电控学习笔记03
- CCSv5.3的安装
- qmail邮件系统(五)vpopmail和qmailadmin对用户的管理
- TCP可靠传输-拥塞控制
- ANSYS apdl命令流耦合场分析案例4--------三维感应加热
- python 编程题 埃及金字塔罐子倒水
- 数据库的ACID四原则
- docusign文档打不开_DocuSign - 用手机签署你的个人文件,完美的无纸化办公就在这里 - Android 应用 - 【最美应用】...