当前位置: 首页 > news >正文

k8s service

文章目录

  • Service 基础概念
  • Service 类型:
  • Service 的工作流程:
  • 东西流量,南北流量
  • NodePort
  • LoadBalancer

Service 基础概念

在 Kubernetes(K8s)中,Service 是一个抽象的概念,表示一个应用程序的逻辑集合和访问这些应用程序的策略。通常,Service 都通过标签(Label)与 Pod 连接,服务会自动为这些 Pod 创建端口映射关系,有利于流量的负载均衡和服务发现。

Service 类型:

k8s service主要包括以下几种类型:

  1. ClusterIP: ClusterIP 是默认的 ServiceType。该类型的 Service 只有一个集群内部的 IP 地址,可以实现服务发现并允许 Pod 之间的通信。

  2. NodePort: NodePort 会在每个 Node 上打开一个端口,并将来自该端口的流量转发到 Service。这使得 Service 能够从集群外部访问。

  3. LoadBalancer: LoadBalancer 会为 Service 创建一个外部负载均衡器,并将 NodePort 服务和 ClusterIP 服务都映射到这个负载均衡器上,默认从外面的请求只能访问到这个 load balancer。

  4. ExternalName: ExternalName 是另一种特殊的 Service 类型,与上述三种类型的 Service 不同,它没有选择器,没有定义任何端口,也没有要代理的 IP 或者其他一切。只做一件事,返回 CNAME 记录,也就是别名记录。

Service 的工作流程:

  1. 当在 Kubernetes 中创建一个 Service,并且这个 Service 的选定了一个或多个 Pod,Kubernetes 会为这个 Service 分配一个 IP 地址,也称为集群 IP。
  2. Kubernetes 会在整个集群范围内为这个新的 Service 创建一个代理服务,代理会负责将对该 Service 的所有请求转发到它管理的 Pod 上。
  3. 当你的应用程序需要和其他服务交互时,只需要使用这个 Service 的 IP 或者 DNS 名字进行通信,Kubernetes 会自动将请求转发到正确的 Pod。

这种方式可以很好地将服务的消费者与服务的提供者进行解耦,使得服务的消费者不需要关心具体的服务提供者是谁,也无需关心服务提供者的数量、位置和状态等。

东西流量,南北流量

在网络架构中,术语"南北流量"和"东西流量"常常用来描述数据包在数据中心中的流动方向。

  • 南北流量:术语“南北流量”用于描述客户端与服务器之间,或者是网络的入口和出口之间的流量。这种流量主要是从数据中心流出或流入的流量,这就好比数据中心的"南"和"北"边界。在 Kubernetes(K8s)环境中,南北流量主要由 Kubernetes Ingress 或者 Service(类型为 LoadBalancer 或 NodePort)负责处理。例如,一个从互联网发来的请求进入 Kubernetes 集群,就是一种南北流量的例子。

  • 东西流量:术语“东西流量”用于描述在数据中心内部,服务与服务之间的流量。这种流量主要是数据中心内部各个服务之间的互相通信,就好比数据中心的"东"和"西"边界。在 Kubernetes 环境中,东西流量主要由 Kubernetes Service 负责处理。例如,一个 Pod 发送请求给另一个 Pod,就是一种东西流量的例子。

这两种流量模式在微服务架构中尤其重要,因为微服务架构中的服务数量可能上千个,且每个服务间可能需要频繁通信。理解南北流量和东西流量的不同,对于设计和管理 Kubernetes 网络策略、提高网络性能和安全性都有很大的帮助。
在这里插入图片描述
在这里插入图片描述
例如在这张图中,有两个service分别管理商品服务和订单服务;用户访问商品的时候,商品服务需要去查询订单,这时候蓝色的容器1内的商品服务就可以直接访问同为蓝色的service订单。同理,绿色的容器订单服务可以访问绿色的商品service获取商品信息。

NodePort

关于k8s各种类型port参考文章:http://t.csdnimg.cn/68crH

NodePort.yaml

apiVersion: v1
kind: Service
metadata:labels:app: test		# service自己本身的标签name: nodeport-studynamespace: my-ns-nodeport
spec:externalTrafficPolicy: ClusterinternalTrafficPolicy: ClusteripFamilies:- IPv4ipFamilyPolicy: SingleStackports:- name: port1port: 81    # port字段定义了Service暴露给集群内部和外部的端口号protocol: TCPtargetPort: 80    # targetPort字段定义了Service将流量转发到后端Pod的容器端口号selector:	# 匹配哪些pod会被service代理,所有匹配到以下标签的pod都可以通过该service进行访问app: test-appcity: shanghaiproject: k8s-studytype: NodePort

在这里插入图片描述

nginx-pod.yaml

apiVersion: v1
kind: Pod
metadata:labels:app: test-appproject: k8s-studycity: shanghainame: nginx-podnamespace: my-ns-nodeport
spec:containers:- image: nginx:1.9.1imagePullPolicy: IfNotPresentname: nginxports:- containerPort: 80name: nginx-portprotocol: TCP

在这里插入图片描述

kb edit svc nodeport-study -n my-ns-nodeport 可以看到自动开启了一个和k8s node物理机绑定的端口。

在这里插入图片描述

  1. 通过nodePort物理机端口连接
    在这里插入图片描述
  2. kb exec -it toolbox-0 bash 从一个其它命名空间的pod中访问。这个时候需要用yaml配置的集群内端口81访问。
    在这里插入图片描述

LoadBalancer

LoadBalancer.yaml

apiVersion: v1
kind: Service
metadata:name: loadbalancer-studynamespace: my-ns-nodeport
spec:ports:- name: port2port: 82    # port字段定义了Service暴露给集群内部和外部的端口号protocol: TCPtargetPort: 80    # targetPort字段定义了Service将流量转发到后端Pod的容器端口号selector:city: beijingproject: loadbalancer-studytype: LoadBalancer

nginx-pod.yaml

apiVersion: v1
kind: Pod
metadata:labels:project: loadbalancer-studycity: beijingname: nginx-pod-loadbalancernamespace: my-ns-nodeport
spec:containers:- image: nginx:1.9.1imagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: Fileports:- containerPort: 80name: nginx-portprotocol: TCP

在这里插入图片描述
可以看到新创建处理的LoadBalancer类型的service有一个对外的EXTERNAL-IP。

  1. 这个ip是可以在集群外部直接访问。
    在这里插入图片描述
  2. 集群内部访问。
    在这里插入图片描述
http://www.lryc.cn/news/221538.html

相关文章:

  • C语言 每日一题 PTA 11.6 day12
  • Git使用规范指南
  • axios和Ajax
  • Day06
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • 基础课18——智能客服系统架构
  • python执行cmd命令——控制电脑连接wifi——程序打包
  • Vue中nextTick的使用及原理
  • 【Linux】拓展:运维面试题,进程管理常见的7大问题
  • Android修行手册 - 一文全了解Kotlin几种静态变量、函数实现的那些事
  • Qt QTableView排序
  • Linux shell编程学习笔记22: () $() (()) 的用法小结
  • 1. Pthreads专栏简介
  • C++17 fallthrough属性
  • STM32 蜂鸣器介绍 配置 播放音节
  • 多目标最优化的资产配置
  • word图片的标题跑到了图片的上方。
  • electron打包下载资源失败,设置国内镜像
  • 架构漫谈 - 如何设计高性能、高可用、高扩展架构
  • matlab 读写ENVI标准数据
  • 如何对ppt文件设置修改权限?
  • STM32G030F6P6 芯片实验 (二)
  • 时间序列预测模型实战案例(七)(TPA-LSTM)结合TPA注意力机制的LSTM实现多元预测
  • Mysql多表设计
  • 第九章:最新版零基础学习 PYTHON 教程—Python 元组(第五节 -清除元组的5种方式方法)
  • 学习笔记4——JVM运行时数据区梳理
  • Splunk 创建特色 dashboard 报表
  • 如何在校园跑腿系统小程序中构建稳健的订单处理与分配系统?
  • 数据结构与算法—双链表
  • linux继续循环案例测试ping网络,目录下的文件权限循环输出