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. WPF项目需要不断更新前台图片时,碰到“System.IO.IOException: 文件“xxx”正由另一进程使用“问题的解决

    问题描述 项目中要求能不断拍照并更新显示图片,使用FileStream在本地创建了图片文件: 当下次重新拍照前删除之前拍过的图片时,提示"System.IO.IOException: 文件& ...

  2. MyCat2 读写分离

    已经搭配好的主从数据库分别为:主:192.168.200.51:3306 从:mysql://192.168.200.53:3306 一. 登录数据客户端,创建逻辑库,配置数据源 create dat ...

  3. 【1】第一篇 Postman的初级使用之设置环境快速切换生成环境与测试环境

    POSTMAN是有谷歌的开源工具,在开发调试.测试执行过程中使用频率非常广泛,本文将记录一些postman在测试中常见的一些配置和使用方法 一.基本的页面区域 略,很简单,大家都会看,再有,学习下面的 ...

  4. Minio服务器搭建

    记录Minio服务器搭建过程 参考 1.下载minio 从地址https://min.io/download#/windows 下载minio server和minio client. 2.将两个ex ...

  5. vscode格式化

    1.tslint    TypeScript的格式化 2.esLint 3.prettier 4.vetur    格式化html,css,vue

  6. js 对象命名

    JS 标识符的命名规则,即变量的命名规则: 标识符只能由字母.数字.下划线和'$'组成 数字不可以作为标识符的首字符 对象属性的命名规则 通过[]操作符为对象添加属性时,属性名称可以是任何字符串(包括 ...

  7. 报错:cannot import name ‘escape’ from ‘jinja2’

    jinja2版本问题导致 解决方法: 降低版本即可 pip3 install Jinja2==3.0.3 -U pip3 install werkzeug==2.0.3 -U jinja2介绍 jin ...

  8. window下快速启动mysql,bat脚本

    cls @echo off:设置窗口字体颜色color 0a :设置窗口标题TITLE MySQL管理程序 call :checkAdmin goto menu:菜单:menuclsecho. ech ...

  9. ssr 学习总结

    自己构建ssr 前提:了解  koa, koa-router, koa-static, webpack 文件结构 ssr  中的router store 都是  一个工厂函数 在服务器端渲染(SSR) ...

  10. Springboot+Vue实现短信与邮箱验证码登录

    体验网址:http://mxyit.com 示例 1.新增依赖 <!-- 短信服务 --> <dependency> <groupId>com.aliyun< ...