第四课:尚硅谷K8s学习-Service网络学习

本文详细介绍了Kubernetes Service的定义、类型和代理模式,包括ClusterIP、NodePort、LoadBalancer和Headless Service。重点讲解了Service的实验,如ClusterIP、NodePort和LoadBalancer的实践操作。此外,文章还探讨了Service的Ingress,解释了如何通过Ingress实现7层代理,并提供了HTTP和HTTPS代理配置的示例。同时,提到了Nginx Ingress的使用,包括BasicAuth和重写规则的配置。
摘要由CSDN通过智能技术生成

第四课:尚硅谷K8s学习-Service网络学习

tags:

  • golang
  • 2019尚硅谷

categories:

  • K8s
  • Service
  • Ingress
  • NodePort

第一节 Service的定义

1.1 Service的概念

在这里插入图片描述

  1. Kubernetes Service定义了这样一种抽象: 一个Pod 的逻辑分组,一种可以访问它们的策略. 它通常称为微服务。通常是通过Label Selector标签选的的方式,匹配一组Pod然后对外访问服务的机制。
    在这里插入图片描述

  2. Service能够提供负载均衡的能力,但是在使用上有以下限制:

    • 只提供4层负载均衡能力(只能通过IP+端口转发实现负载均衡),而没有7层功能(默认不能通过主机名或域名方式负载均衡),但有时我们可能需要更多的匹配规则来转发请求,这点上4层负载均衡是不支持的
    • 可以通过ingress方案添加七层负载均衡的能力
  3. SVC基础导图-实现流程
    在这里插入图片描述

1.2 Service的类型

  1. Service在K8s中有以下四种类型

    • Clusterlp: 默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP
    • NodePort: 在ClusterlP基础上为Service在每台机器上绑定一个端口, 这样就可以通过NodelP:NodePort来访问该服务
    • LoadBalancer: 在NodePort的基础上,借助cloud provider创建一 个外部负载均衡器,并将请求转发到NodeIP: NodePort
    • ExternalName: 把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有kubernetes 1.7或更高版本的kube-dns才支持
  2. Clusterlp类型:other Pod通过集群内部ip访问到后面的pod, 并且实行负载均衡的方案。
    在这里插入图片描述

  3. NodePort类型:在每个物理机上绑定个端口,如果有一个宕机不会影响服务访问。
    在这里插入图片描述

  4. LoadBalancer类型:引入云供应商的服务(负载路由器的解决方案)接口即可。需要独立收费
    在这里插入图片描述

  5. ExternalName类型
    在这里插入图片描述

1.3 Service的代理模式分类

  1. 在Kubernetes集群中,每个Node运行一个kube-proxy进程。kube- proxy负责为Service 实现了一种VIP (虚拟IP)的形式,而不是ExternalName的形式。在Kubernetes v1.0版本,代理完全在userspace。

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

  3. 在Kubernetes v1.0版本,Service 是“4层”(TCP/UDP overIP)概念。在Kubernetes v1.1版本,新增了Ingress API (beta 版),用来表示“7层”(HTTP) 服务

  4. 为何不使用round-robin DNS? DNS会在系统中进行缓存。。。就起不到负载均衡的效果。。。

  5. userspace代理模式:每次访问都需要kube-proxy进行代理,而且kube-apiserver也监控kube-proxy进行服务更新和端点维护,所以kube-proxy的压力就会很大。
    在这里插入图片描述

  6. iptables代理模式:访问直接由防火墙iptables调度完成,不需要经过kube-proxy调度。大大提升速度,提到kube-proxy的稳定性。
    在这里插入图片描述

  7. ipvs代理模式(现在的标准):kube-proxy 会监视Kubernetes Service 对象和Endpoints,调用netlink 接口以相应地创建ipvs规则并定期与Kubernetes Service对象和Endpoints 对象同步ipvs规则,以确保ipvs状态与期望一致。访问服务时,流量将被重定向到其中一个后端Pod

    • 查看ipvs命令: ipvsadm -Ln
    • 与iptables类似,ipvs 于netfilter的hook功能,但使用哈希表作为底层数据结构并在内核空间中工作。这意味着ipvs可以更快地重定向流量,并且在同步代理规则时具有更好的性能。此外,ipvs为负载均衡算法提供了更多选项,例如:
      • rr:轮询调度
      • lc:最小连接数
      • dh:目标哈希
      • sh:源哈希
      • sed:最短期望延迟
      • nq:不排队调度

在这里插入图片描述

第二节 Service的实验讲解

2.1 Service实验内容

  1. clusterIP主要在每个node节点使用iptables,将发向clusterIP对应端口的数据,转发到kube-proxy中。然后kube-proxy自己内部实现负载均衡的方法,可以查询到这个service下对应pod的地址和端口,进而把数据转发给对应的pod的地址和端口。
    在这里插入图片描述

  2. 为了实现图上的功能,主要需要以下几个组件的协同工作:

    • apiserver 用户通过kubectl命令向apiserver发送创建service的命令,apiserver接收到请求后将数据存储到etcd中
    • kube-proxy kubernetes的每个节点中都有一个叫做kube-porxy的进程,这个进程负责感知service,pod的变化,并将变化的信息写入本地的iptables规则中
    • iptables 使用NAT等技术将virtualIP的流量转至endpoint中

2.2 Service实验yaml文件

  1. 创建 myapp-deploy.yaml 文件。 通过Deployment 部署了 3 个 Pod 副本
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: stabel
  template:
    metadata:
      labels:
        app: myapp
        release: stabel
        env: test
    spec:
      containers:
      - name: myapp
        image: hub.qnhyn.com/library/myapp
        imagePullPolicy: IfNotPresent
        ports
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值