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

Kubernetes服务发布基础

service的概念和原理

  • service概念及用途
    • service用于将外部请求代理到内部Pod上,提供四层负载均衡和服务发现的功能,使得我们可以构建高可用和可扩展的应用程序
  • service基本原理

  • service的负载均衡机制
    • 当一个Service对象在Kubernetes集群中背定义出来时,集群内的客户端应用就可以通过服务IP访问到具体的Pod容器提供的服务,从服务IP到后端Pod的负载均衡机制,是有每个node上的kube-proxy代理负责实现的
    • kube-proxy的代理模式有:userspace、iptables、IPVS和kernelspace
  • kube-proxy的代理模式之userspace

    • kube-proxy为每个Service在node上打开一个随机端口做为代理端口
    • 建立iptables规则,将clusterip请求重定向到代理端口(用户空间)
    • 到达代理端口的请求再由kube-proxy转发到后端
  • kube-proxy的代理模式之iptables

    • 通过API Server的Watch接口实时跟踪Service和Endpoint的变更信息
    • 并更新对应的iptables规则
    • Client的请求流量通过iptables的NAT机制“直接路由”到目标Pod
    • kube-proxy不再负责转发数据包,kube-proxy主要完成对iptables策略的动态管理
  • kube-proxy的代理模式之IPVS

    • IPVS专门用于高性能的负载均衡
    • IPVS使用ipset存储iptables规则,可以将ipset简单理解为IP集合
    • 减少iptables规则的数量,从而减少性能损耗

service的类型

  • Service的四种类型
    • ClusterIP(默认创建出来的Service,虚拟VIP只供内部使用,给k8s内其他程序使用的)(使用场景:内部程序之间访问)
      • 这是最常用的Service类型,它为Pod提供了一个虚拟的IP地址,当其他的Pod需要访问钙Service时,他们只需要使用该虚拟IP地址即可。Kubernetes会自动将请求路由到相应的Pod上
    • NodePort
      • 这种Service类型将Pod公开为集群中所有节点上的某个端口。当外部的请求到达任何一个节点上的该端口时,Kubernetes会将请求路由到相应的Pod上。
    • LoadBalancer
      • LoadBalancer Service:这种Service类型使用云提供商的负载均衡器将请求路由到后端Pod。Kubernetes会自动创建和配置负载均衡器,并将其绑定到Service上。
    • externalName(外部空间)
      • externalName:这种Service类型允许你将Service映射到集群外部的名称。当Pod需要访问该Service时,他们将使用该名称来解析出相应的IP地址。

service的创建

ClusterIP的创建(默认创建出来的Service就是ClusterIP)

    1. 创建一个Pod服务

    1. 查看Pod状态

    1. 查看创建Pod详细信息

    1. 访问提供的IP地址与yaml文件中提供的端口

  1. 【使用命令的方式创建Service】为创建的复制集的Pod服务创建出来一个Service(默认的Service就是ClusterIP)

    1. 【使用yaml文件的方式创建Service】

      1. 查看创建的Service

      1. 查看Service详细信息

      1. 查看Service为Pod提供的IP+端口

    1. 查看创建的Service

    1. 此时若使用宿主机的浏览器访问创建出来的ClusterIP是无法访问到的,因为创建出来的ClusterIP是仅供k8s内部程序之间访问时才可以使用的,属于一个内部网络,外部网络是无法与其通信的
    2. 删除Service

  1. NodePort的创建
    1. 创建类型为NodePort的Pod服务

    1. 查看创建的详细信息

    1. 在程序内部进行访问测试

    1. 在浏览器访问测试

    1. 删除Service

  1. LoadBalancer的创建
    1. 创建LoadBalancer

    1. 查看Service信息

    1. 分别进行内部测试和浏览器访问
    2. 删除LoadBalancer

  1. externalName的创建
    1. 先创建两个命名空间

    1. 分别针对两个命名空间创建后端节点(Pod)

    1. 查看创建的后端节点Pod的信息(要指定命名空间)

    1. 查看详细信息

    1. 可以登录到创建的后端Pod当中

    1. 分别为两个命名空间创建不同的无头服务(headless)

    1. 查看两个命名空间下的服务

    1. 登录到Pod当中,使用ping命令测试Pod与其他服务的连通性

    1. 创建externalname

    1. 无头服务创建出来之后,对于其他外部的 pod 来讲,该 pod 对应的名字就确定了下来,其固定的格式是:无头服务名,命名空间,svc.cluster.local
    2. 登录到Pod服务中,验证Pod间的通信


http://www.kler.cn/a/324388.html

相关文章:

  • 智能化运维与AI/ML辅助决策:实现自动化与预测优化
  • 阮一峰科技爱好者周刊(第 325 期)推荐工具:一个基于 Next.js 的博客和 CMS 系统
  • 【CANOE】【学习】【DecodeString】字节转为中文字符输出
  • 跟我学C++中级篇——RAII
  • 加速 AI 创新:引入 Elastic AI 生态系统
  • vue3【实战】切换全屏【组件封装】FullScreen.vue
  • [leetcode刷题]面试经典150题之9python哈希表详解(知识点+题合集)
  • [go] 状态模式
  • CSS3 字体
  • 卷轴模式开发的技术架构分析与源代码展示
  • 数据结构讲解二叉树 【一】
  • 自动化测试实例:Web登录功能性测试(无验证码)
  • 【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
  • S32K312 RTD 4.0.0 版本 OCU 例程配置流程说明
  • HuggingChat macOS 版现已发布
  • 【路径规划】基于球向量的粒子群优化(SPSO)算法在无人机路径规划中的实现
  • 002.动手实现softmax回归(pytorch简洁版)
  • AutosarMCAL开发——基于EB MCU驱动
  • 爬虫逆向学习(八):Canvas画图滑块验证码解决思路与绕过骚操作
  • 第十四章:html和css做一个心在跳动,为你而动的表白动画
  • Maven 实现依赖统一管理
  • 树莓派外挂Camera(基操)(TODO)
  • 如何通过 GitHub Actions 使用 SSH 自动化部署到阿里云 ECS 实例
  • Hadoop三大组件之YARN(一)
  • 丹摩智算(damodel)部署stable diffusion实验
  • 计241 作业2:C程序设计初步