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

七、kubernetes 1.29 之 Service 的工作原理及其使用

一、概念和原理

Kubernetes Service定义了这样一种抽象:一个 Pod的逻辑分组,一种可以访问它们的策略 —— 通常称为微服务。这一组 Pod能够被 Service访问到,通常是通过 Label Selector

1、为什么需要

如图所示 的两个pod控制器, 创建了 nginx(处理静态资源) 和 tomcat(处理动态资源)的多个 pod ,,二者之间互相有通信,在nginx 中 有着 pod - ip 的信息,当有一个 tomcat挂了(nginx具有七层感知),不会去访问挂掉的 tomcat,但是新的 tomcat他不知道,没有 service处理起来比较麻烦

条件:就绪 和 标签匹配

加入 service后 tomcat死掉会被 service踢掉,然后将新的 tomcat-ip 抓取到负载均衡集群中,对于nginx来说,是无感的,只需要每次去service获取ip就好了

2、迭代

        在 Kubernetes 集群中,每个 Node 运行一个 kube-proxy进程。kube-proxy负责为 Service实现了一种 ​VIP(虚拟 IP)​​ 的形式。

        在 Kubernetes ​v1.0​ 版本,代理完全在 ​userspace。在 Kubernetes ​v1.1​ 版本,新增了 ​iptables​ 代理,但并不是默认的运行模式。从 Kubernetes ​v1.2​ 起,默认就是 ​iptables​ 代理。在 Kubernetes ​v1.8.0-beta.0​ 中,添加了 ​ipvs​ 代理。

3、工作原理

3.1 用户空间 userspace

kube - proxy

        监听apiservice 将 service 变化修改本地的 iptables 规则

        代理点前 节点 pod 来自用户的请求

        pod数量多可能会有压力

3.2 iptables

kube - proxy

        监听apiservice 将 service 变化修改本地的 iptables 规则

        优点:

                kube - proxy压力小、解耦

3.3 ipvs

与第二种的区别就是 将 iptables 换成 ipvs

ipvs是四层负载均衡,相对来说性能更好、效率高

3.4 将 iptables 修改为 ipvs

1、检查自己kubernetes 集群有无 ipvs

2、修改 kube - proxy 资源清单

kubectl edit configmap kube-proxy -n kube-system

将mode改成ipvs

3、根据标签选择器,干干掉pod

 kubectl delete pod -n kube-system -l k8s-app=kube-proxy

完成了

下面 edit是去资源对象的 etcd 中修改资源清单 从根源上改

这样的发那是不永许你修改错误的值,如果错了第一次保存退出会停留在编辑页面,第二次才会退出,退出后报错且不会做改变且将错误的资源清单保存下来

kubectl edit dployment myapp

二、工作模式和使用

1、Kubernetes Service 类型

ClusterIP

  • 类型​:默认类型

  • 功能​:自动分配一个仅 Cluster 内部可以访问的虚拟IP

  • 集群内部

NodePort

  • 基础​:在 ClusterIP 基础上

  • 功能​:为 Service 在每台机器 网卡 上绑定一个端口,供外部访问

  • 访问方式​:可以通过 <NodeIP>:<NodePort>来访问该服务

LoadBalancer

  •  ​基础​:在 NodePort 的基础上,只能在云的环境中使用

  • 功能​:借助 cloud provider 创建一个外部负载均衡器

  • 转发机制​:将请求转发到 <NodeIP>:<NodePort>

  • 多个调度器:解决nodeport无法提供的高可用

ExternalName

  • 功能​:把集群外部的服务引入到集群内部来,在集群内部直接使用

  • 特点​:没有任何类型代理被创建

  • 版本要求​:只有 Kubernetes 1.7 或更高版本的 kube-dns 才支持

  • 域名别名的机制

2、Service - internalTrafficPolicy

3、Server - externalTrafficPolicy

nodeport

cluster:外部浏览器访问集群的任意ip都可以被负载均衡

Local:只会将路由,路由到当前节点所在的pod.

             如果节点没有pod,这个请求会被丢弃

4、LVS 持久化链接

ipvsadm -A -t ip:80 -s rr -p 120

        # 每次访问时间会被刷新

应用场景: HTTPS 请求

service.spec.sessionAffinity: ClientIP

三、实验

1、ClusterIP

组件协同

结构

资源清单

创 建 m y a p p - d e p l o y . y a m l 文 件

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-clusterip-deploynamespace: default
spec:replicas: 3selector:matchLabels:app: myapprelease: stabelsvc: clusteriptemplate:metadata:labels:app: myapprelease: stabelenv: testsvc: clusteripspec:containers:- name: myapp-containerimage: wangyanglinux/myapp:v1.0imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index1.htmlinitialDelaySeconds: 1periodSeconds: 3

创建 Service 信息

svc选择pod条件

        就绪

        标签子集匹配

        同一名称空间

apiVersion: v1
kind: Service
metadata:name: myapp-clusteripnamespace: default
spec:type: ClusterIPselector:app: myapprelease: stabelsvc: clusteripports:- name: httpport: 80targetPort: 80

安装dns解析插件(没做)
yum -y install bind-utils

myapp-clusterip

apiVersion: v1
kind: Service
metadata:name: myapp-clusteripnamespace: default
spec:type: ClusterIPselector:app: myapprelease: stabelsvc: clusteripports:- name: httpport: 80targetPort: 80

2、会话保持( IPVS 持久化连接)

主要用在https的链接上

改回Cluster

2.1 不加

          --->  node01

        -

客户  

        -

         ---> node 02

会在来回切换

2.2 加上

          --->  node01

        -

客户  

                   node 02

在规定时间内定向访问某个节点

ipvsadm -Ln
查看

有这个意味着开起了持久化

3、NodePort

deployment

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-nodeport-deploynamespace: default
spec:replicas: 3selector:matchLabels:app: myapprelease: stabelsvc: nodeporttemplate:metadata:labels:app: myapprelease: stabelenv: testsvc: nodeportspec:containers:- name: myapp-containerimage: wangyanglinux/myapp:v1.0imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80

service

apiVersion: v1
kind: Service
metadata:name: myapp-nodeportnamespace: default
spec:type: NodePortselector:app: myapprelease: stabelsvc: nodeportports:- name: httpport: 80targetPort: 80nodePort: 30010

这样就可以外部访问了

4、LoadBalancer

因为需要腾讯云、阿里云提供服务,所以这里不实验。以后用的时候去向阿里云申请

详细说明:https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/use-an-existing-slb-instance-to-expose-an-application

其中:labls标签选择是在集群内部做匹配什么的

           annotations和第三方软件的某种约定 

apiVersion: v1
kind: Service
metadata:annotations:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID}service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'labels:app: nginxname: my-nginx-svcnamespace: default
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: nginxtype: LoadBalancer
  • 这是一个用于阿里云环境的 LoadBalancer 类型 Service

  • 需要将 ${YOUR_LB_ID}替换为实际的负载均衡器 ID

  • 服务将暴露 80 端口,并将流量转发到具有 app: nginx标签的 Pod 的 80 端口

  • 注解 alicloud-loadbalancer-force-override-listeners: 'true'表示强制覆盖现有监听器配置

5、ExternalNaml

ExternalNaml

apiVersion: v1
kind: Service
metadata:name: my-service-1namespace: default
spec:type: ExternalNameexternalName: www.baidu.com

作用是:访问这个service的时候,将请求转到百度

创建

访问,是百度

svc dns 域名

svcName.nsName.svc.domainName.

        domaninNmae 默认:cluster.local.

http://www.dtcms.com/a/419962.html

相关文章:

  • DeepSeek-Math 学习笔记
  • 认识 Kubernetes:它从哪里来,要解决什么
  • 上海微网站制作建设wordpress改了固定链接出现404
  • CKAD-CN 考试知识点分享(15) 限制 内存 request 和 limit
  • 基于cms的企业网站建设建网站的公司大全
  • 行业网站开发程序山儿网站建设公司
  • C语言自学--自定义类型:结构体
  • Oracle快照备库FRA空间满导致无法连接
  • [xboard]17 uboot中的binman
  • 绵阳网站建设怎么选网站互点都是怎么做的
  • 源码下载网站百度下载2021新版安装
  • 给公司建立网站不可以做到的泰兴中信建设有限责任公司
  • MySQL程序简介
  • 创新的赣州网站建设网站建设与维护是什么
  • 湖北省市政工程建设网站网站开发框架的工具
  • sdio的切换I/O电压的详细流程
  • 浮梁网站推广房产网站建设价格
  • Java基础-面向对象复习知识5
  • GitHub 官宣 GitHub Copilot CLI 开发公测:AI CLI 大战
  • 哪些网站可以进行域名注册设计制作一个 个人主页网站
  • OSS-对象存储服务
  • cpa自己做网站高端品牌洗发水
  • 职业教育专业建设验收网站海南做网站的公司有哪些
  • 马云归来,“新零售”不死
  • 湖南省建设厅网站官网镇江网站制作案例
  • 哪些网站是做免费推广的wordpress函数手册 pdf
  • 网站网站做维护犯罪赣州酒店网站设计
  • 洛阳网站建设汉狮报价怎么查域名的注册人
  • 插座配线工程量-连续测量快速计量
  • 软考中级-软件设计师(七)