热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

k8sService网络服务

Service概念会话保持多端口设置Service暴露到集群外部服务发现Service概念Service主要用于提供网络服务,通过Service的定义,能够为客户端应用提供稳定的访

Service概念
会话保持
多端口设置
Service暴露到集群外部
服务发现
Service概念

Service主要用于提供网络服务,通过Service的定义,能够为客户端应用提供稳定的访问地址(域名或IP地址)和负载均衡功能,以及屏蔽后端Endpoint的变化,是k8s实现微服务的核心资源。

apiVersion: apps/v1
kind: Deployment
metadata:
name: d1
spec:
selector:
matchLabels:
app: v1
replicas:
2
template:
metadata:
labels:
app: v1
spec:
containers:
- name: myapp01
image:
192.168.180.129:9999/myharbor/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: tomcatport
containerPort:
8080
command: [
"nohup","java","-jar","/usr/local/test/dockerdemo.jar","&"]

创建了两个pod,如果要访问pod内部的接口,只能是根据pod的ip:port

定义Service主要注意的是两个端口还有Service的标签选择器选择的是pod不是deployment。

apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
ports:
- protocol: TCP
port:
18080 #service自身的端口,对应客户端的端口
targetPort:
8080 #对应容器内的端口
selector:
app: v1

查看service详细信息和对应后端的endpoints列表。

kubectl describe svc svc1

kubectl get svc

kubectl get endpoints

通过访问Service的ip,将请求转发到后端pod,请求访问了两次,分别转发到了两个不同的pod容器。


会话保持

Sercice可以通过设置做到首次将某个客户端来源IP发起的请求转发到后端的某个pod上,之后从相同的客户端IP发起的请求都将被转发到相同的后端Pod上。同时用户可以设置会话保持的最长时间,在此时间之后重置客户端来源ip的保持规则。

apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
ports:
- protocol: TCP
port:
18080 #service自身的端口,对应客户端的端口
targetPort:
8080 #对应容器内的端口
selector:
app: v1
sessionAffinity: ClientIP #会话保持
sessionAffinityConfig:
clientIP:
timeoutSeconds:
60 #单位秒

apply和create的区别是apply是更新操作。可以看出三次访问都转发到了同一个pod,后边的三次78的是过了一分钟后,会话重置了。


多端口设置

pod中存在多个容器时,每个容器对应各自的端口,此时就需要用到service多端口映射。

apiVersion: apps/v1
kind: Deployment
metadata:
name: d1
spec:
selector:
matchLabels:
app: v1
replicas:
2
template:
metadata:
labels:
app: v1
spec:
containers:
- name: myapp01
image:
192.168.180.129:9999/myharbor/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: tomcatport
containerPort:
8080
command: [
"nohup","java","-jar","/usr/local/test/dockerdemo.jar","&"]
- name: nginx
image: nginx
ports:
- name: nginxport
containerPort:
80

在service中配置多个映射内部容器的端口,多端口情况下需要配置name字段。

apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
ports:
- name: p1
protocol: TCP
port:
18080 #service自身的端口,对应客户端的端口
targetPort:
8080 #对应容器内的端口
- name: p2
protocol: TCP
port:
28080 #service自身的端口,对应客户端的端口
targetPort:
80 #对应容器内的端口
selector:
app: v1


Service暴露到集群外部

ClusterIP

默认类型,虚拟服务IP地址,该地址用于K8S集群内部的pod访问。


NodePort

使用宿主机的端口,外部客户端通过任意Node的IP和设定的端口都可以访问服务。

apiVersion: apps/v1
kind: Deployment
metadata:
name: d1
spec:
selector:
matchLabels:
app: v1
replicas:
2
template:
metadata:
labels:
app: v1
spec:
containers:
- name: myapp01
image:
192.168.180.129:9999/myharbor/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: tomcatport
containerPort:
8080
command: [
"nohup","java","-jar","/usr/local/test/dockerdemo.jar","&"]

apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
type: NodePort
ports:
- name: p1
protocol: TCP
port:
18080 #service自身的端口,对应客户端的端口
targetPort:
8080 #对应容器内的端口
nodePort:
30000 #将这个端口映射到每一台node上,通过任意一个nodeIp:nodePort都能映射到容器内部
selector:
app: v1


服务发现 

环境变量方式

声明两个Deployment每个有两个pod副本,在创建两个Service。

apiVersion: apps/v1
kind: Deployment
metadata:
name: d1
spec:
selector:
matchLabels:
app: v1
replicas:
2
template:
metadata:
labels:
app: v1
spec:
containers:
- name: myapp01
image:
192.168.180.129:9999/myharbor/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: tomcatport
containerPort:
8080
command: [
"nohup","java","-jar","/usr/local/test/dockerdemo.jar","&"]

apiVersion: apps/v1
kind: Deployment
metadata:
name: d2
spec:
selector:
matchLabels:
app: v2
replicas:
2
template:
metadata:
labels:
app: v2
spec:
containers:
- name: myapp01
image:
192.168.180.129:9999/myharbor/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: tomcatport
containerPort:
8080
command: [
"nohup","java","-jar","/usr/local/test/dockerdemo.jar","&"]

apiVersion: v1
kind: Service
metadata:
name: svc1
spec:
ports:
- protocol: TCP
port:
18080 #service自身的端口,对应客户端的端口
targetPort:
8080 #对应容器内的端口
selector:
app: v1

apiVersion: v1
kind: Service
metadata:
name: svc2
spec:
ports:
- protocol: TCP
port:
28080 #service自身的端口,对应客户端的端口
targetPort:
8080 #对应容器内的端口
selector:
app: v1

进入d1中的一个pod,查看环境变量。可以看到SVC1和SVC2的IP和端口。

使用环境变量中的IP和端口访问Service


DNS方式

直接使用Service的名称访问服务也可以。

 



推荐阅读
  • 2019我的金三银四
    先讲一下自己的情况吧,二本学生,17年毕业,目前在一家跨境电商从事Java技术开发工作(不是阿里,没那么厉害),技术栈目前偏向于容器云、持续集成持续交付这一块,也就是SpringBoot、Kuber ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • docker+k8s+git+jenkins
    docker+k8s+git+jenkins,Go语言社区,Golang程序员人脉社 ... [详细]
  • k8shelm官网:https:helm.sh点击charts:https:artifacthub.iopackagessearch?sortrelevance&page11.1h ... [详细]
  • 黄东旭: 关于基础软件产品价值的思考
    黄东旭:关于基础软件产品价值的思考-好久没写东西了,正好趁着春节的节后综合症发作写写文章热身一下,记得前几年偶尔会写一些关于TiDB产品功能解读的文章,TiDB5.0发了那么长时间 ... [详细]
  • kubelet配置cni插件_Kubernetes新近kubectl及CNI漏洞修复,Rancher 2.2.1发布
    今天,Kubernetes发布了一系列补丁版本,修复新近发现的两个安全漏洞CVE-2019-1002101(kubectlcp命令安全漏洞)和CVE-2 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Windows 10系统的自动更新功能在修复系统漏洞、提升用户体验方面具有重要作用。然而,由于系统更新会占用大量系统资源,打扰当前任务环境,且更新频繁,很多人选择关闭自动更新功能。本文介绍了关闭win10自动更新的步骤,并探讨了其他更好的关闭方法。欢迎留言讨论。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • IDC数据:2021年上半年中国公有云PaaS市场,亚马逊云科技排第二
    2021年10月下旬,IDC发布《中国公有云服务市场(2021上半年)跟踪》报告,数据显 ... [详细]
author-avatar
菲呀菲呀飞呀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有