service

功能

主要是提供负载均衡和服务自动发现。 pod的ip会随着升降级、销毁的操作改变。客户端不能直接访问pod的ip。
service资源被用于在被访问的pod对象中添加一个有着固定IP地址的中间层,客户端向此 地址发起访问请求后由相关的service资源调度并代理至后端的pod对象。

类型

ClusterIP:集群内可以访问的ip
NodePort:绑定到Node上可以对外提供访问
LoadBalance:第三种,通常由云服务商提供,比如阿里云的负载均衡服务,根据实际情况参考。

service的命令行操作

#pod绑定service
[root@k8s-01 ~]# kubectl get pods -o wide|grep nginx-d
nginx-d-8668fb97b9-7tw25 1/1 Running 0 81m 10.244.1.75 k8s-02 <none> <none>
[root@k8s-01 ~]# kubectl expose pods nginx-d-8668fb97b9-7tw25
service/nginx-d-8668fb97b9-7tw25 exposed
[root@k8s-01 ~]# kubectl get service nginx-d-8668fb97b9-7tw25 -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-d-8668fb97b9-7tw25 ClusterIP 10.1.255.237 <none> 80/TCP 110s app=nginx,pod-template-hash=8668fb97b9
#通常service与deployment进行绑定,如上示例,默认创建的service为clusterip类型,不能与外部进行通信
#下面示例给deployment创建nodeport类型service并从外部访问
[root@k8s-01 ~]# kubectl expose deployment nginx-d --type=NodePort
service/nginx-d exposed
[root@k8s-01 ~]# kubectl get service nginx-d -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-d NodePort 10.1.35.86 <none> 80:31438/TCP 28s app=nginx
#删除service
[root@k8s-01 ~]# kubectl delete service nginx-d

这里deployment创建nodeport查询的含义就是将pod的80端口映射到node节点的31438端口,访问任意nodeip:31438就相当于访问deployment

service配置文件

#api版本
apiVersion: v1
#对象资源类型
kind: Service
#元数据
metadata:
#service名称
name: nginx-s
#svc的详细描述
spec:
#service type类型 ClusterIP(默认);NodePort
type: NodePort
ports:
#在ClusterIP上映射的端口,集群内部不同pod之间相互访问使用
- port: 88
#nodePort范围为30000~32767
nodePort: 32000 #映射的nodePort,每个node上都会进行该映射
targetPort: 80 #对应pod中container中提供服务的端口
protocol: TCP
selector:
#给指定标签的资源创建service,可以是deployment也可以是pod只要label符合下面要求就行。
app: nginx

#deployment label查询

[root@k8s-01 ~]# kubectl get deployment nginx-d --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-d 3/3 3 3 114m app=nginx

[root@k8s-01 ~]# kubectl create -f service_demo.yml
service/nginx-s created

[root@k8s-01 ~]# kubectl get svc nginx-s -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-s NodePort 10.1.155.16 <none> 88:32000/TCP 2m51s app=nginx-d

k8s_service的更多相关文章

  1. 部署 Prometheus 和 Grafana 到 k8s

    在 k8s 中部署 Prometheus 和 Grafana Intro 上次我们主要分享了 asp.net core 集成 prometheus,以及简单的 prometheus 使用,在实际在 k ...

随机推荐

  1. Vscode报错: error:0308010C:digital envelope routines::unsupported错误记录解决

    Vscode报错: error:0308010C:digital envelope routines::unsupported错误记录解决 因为安装了新版本的node才报的错误:node版本: v18 ...

  2. corundum:100G NIC 学习:(一)

    2021-10-03 17:13:47 目标:在Linux环境下,基于VCU118板卡恢复出100G corundum NIC. 一.Corundum简介 GitHub repository: htt ...

  3. Electron 应用图标修改

    1,首先给窗口添加图标: 1) 窗口图标是图片jpg或者png格式,如果没有图标去[https://www.aigei.com/icon/?wd=icon%E7%BD%91&bd_vid=10 ...

  4. 报错com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1' for column 'date' at row 1问题解决

    出现 com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1' ...

  5. python连接数据库系列

    1.Python连接MySQL 具体详情参考:MySQL笔记 Python连接MySQL需要借助pymysql,安装pymysql pip install pymysql 1.1 pymysql连接数 ...

  6. 字符类型(char)

    字符类型(char) 基本介绍 字符类型可以表示`单个字符`,字符类型是char,char是两个字节(可以存放汉字),多个字符我们用字符串String(我们后面详细讲解String) 案例演示 //演 ...

  7. CSS主要整理

    css主要整理 // 右侧悬浮导航 /* 侧栏开始 */ #home { position: relative } // 悬浮 #home .xf { width: 67.6923076923077p ...

  8. rabbitmq监控与运维

    一.系统架构 二.监控 本指南涵盖了使用两个流行工具进行 RabbitMQ 监控: Prometheus,一个监控工具包:和Grafana,一个指标可视化系统.这些工具共同构成了一个强大的工具包,用于 ...

  9. webpack5的基本用法

    webpack的基本使用 webpack 本身功能有限: 开发模式: 仅能编译JS中的ES Module 语法 生产模式: 能编译ES Module 语法, 还能压缩JS代码 添加实例文件 npm i ...

  10. 记录将Base64字符串转化为图片遇到的问题

    今天通过与别人写的api交互,获取到了一个原为图片的base64字符串,在网上找到了相互转换的方法,但是在转化时,报出了"输入不是有效的 Base64 字符串,因为它包含非 base 64 ...