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

 



推荐阅读
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 大家好,全新的技术专栏《从零开始掌握容器云网络实战》正式上线。该专栏将系统地介绍容器云网络的基础知识、核心技术和实际应用案例,帮助读者全面理解和掌握容器云网络的关键技术与实践方法。 ... [详细]
  • Envoy 流量分配策略优化
    在本研究中,我们对Envoy的流量分配策略进行了优化,旨在提高系统的稳定性和性能。实验环境包括一个前端代理服务(Envoy,IP地址为172.31.57.10)和五个后端服务。通过调整Envoy的配置,实现了更高效的流量分发和负载均衡,显著提升了整体系统的响应速度和可靠性。 ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
  • 深入理解线程池及其基本实现
    本文探讨了线程池的概念、优势及其在Java中的应用。通过实例分析不同类型的线程池,并指导如何构建一个简易的线程池。 ... [详细]
  • 本文提供了多种有效的方法来解决RPC(远程过程调用)服务器不可用的问题,包括通过修改注册表、使用SC命令以及利用故障恢复控制台等技术手段。 ... [详细]
  • 解决Win10 1709版本文件共享安全警告问题
    每当Windows 10发布新版本时,由于兼容性问题往往会出现各种故障。近期,一些用户在升级至1709版本后遇到了无法访问共享文件夹的问题,系统提示‘文件共享不安全,无法连接’。本文将提供多种解决方案,帮助您轻松解决这一难题。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • Nginx 启动命令及 Systemctl 配置详解
    本文详细介绍了在未配置和已配置 Systemctl 的情况下启动 Nginx 的方法,并提供了详细的配置步骤和命令示例。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • Kubernetes 1.9.0 Alpha.1 发布公告 [Kubernetes 最新动态]
    近日,Kubernetes 社区发布了两个新版本:1.8.0 RC.1 和 1.9.0 Alpha.1。这是 k8s 1.9.0 的首次发布,自 v1.8.0 Alpha.3 以来进行了大量更新,共提交了 279 次。 ... [详细]
  • 如何安全有效地强制移除Kubernetes Pod
    在Kubernetes集群管理中,有时需要安全且高效地强制移除Pod以解决故障或进行维护。本文介绍了在遇到难以终止的Pod时,如何通过正确的方法进行强制删除,同时确保不影响集群的稳定性和其他服务的正常运行。通过具体的操作步骤和最佳实践,帮助读者掌握处理此类问题的有效方法。 ... [详细]
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社区 版权所有