Kubernetes服务发布基础

发布于:2024-10-12 ⋅ 阅读:(9) ⋅ 点赞:(0)

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间的通信