热门标签 | 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的名称访问服务也可以。

 



推荐阅读
  • Windows环境下部署Kubernetes Dashboard指南
    本指南详细介绍了如何在Windows系统中部署Kubernetes Dashboard,包括下载最新配置文件、修改服务类型以支持NodePort访问、下载所需镜像并启动Dashboard服务等步骤。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • 深入探讨配置文件的管理与优化
    尽管配置文件的重要性不言而喻,但其管理和安全性问题却常被忽视。本文将详细讨论配置文件的不同管理策略及其优缺点。 ... [详细]
  • 本文深入探讨了Kubernetes中Pod的基础概念及其分类,旨在帮助读者更好地理解和利用这一核心组件。通过详细的解析,我们将了解Pod如何作为最小的部署单元在Kubernetes集群中工作。 ... [详细]
  • Kubernetes 实践指南:初次体验
    本文介绍了如何通过官方提供的简易示例,快速上手 Kubernetes (K8S),并深入理解其核心概念和操作流程。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文介绍了如何解决Docker在启动过程中遇到的‘无法删除默认桥网络:网桥具有活动端点’的问题,提供了详细的步骤和补充说明。 ... [详细]
  • ServiceStack与Swagger的无缝集成指南
    本文详细介绍了如何在ServiceStack项目中集成Swagger,以实现API文档的自动生成和在线测试。通过本指南,您将了解从配置到部署的完整流程,并掌握如何优化API接口的开发和维护。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 深入解析Spark核心架构与部署策略
    本文详细探讨了Spark的核心架构,包括其运行机制、任务调度和内存管理等方面,以及四种主要的部署模式:Standalone、Apache Mesos、Hadoop YARN和Kubernetes。通过本文,读者可以深入了解Spark的工作原理及其在不同环境下的部署方式。 ... [详细]
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社区 版权所有