• Kubernetes Services networking


    概念回顾


    kube-proxy

    kube-proxy是Kubernetes网络代理组件,运行在每个NODE上, deamonSet模式运行,用来支撑TCP/UDP/SCTP四层流量转发,或是一组后端服务器(Pod)进行TCP/UDP流量转发(默认策略模式roundRobin)

    功能如下:

    1. 必须运行在每个node上
    2. 转发TCP/UDP/SCTP流量
    3. 不支持HTTP
    4. 提供负载均衡能力
    5. 只用来访问Service

    kube-proxy共有三种服务类型,如下

    1. Cluster-ip
    2. NodePort
    3. LoadBalance

    Service类型工作原理


    Cluster-IP

    从Kubernetes1.2默认情况下,从集群内部发送到clusterIP的包源地址永远不会进行SNAT(kube-proxy运行在iptables模式下,默认情况下就是iptables模式),如何查看kube-proxy的运行模式,如下

    • 范例
      <root@SYS-K8S-CP1 ~># curl -i http://localhost:10249/proxyMode
      HTTP/1.1 200 OK
      Content-Type: text/plain; charset=utf-8
      X-Content-Type-Options: nosniff
      Date: Fri, 20 May 2022 04:22:21 GMT
      Content-Length: 8
      
      iptables
    请求流

    实际以请求sit01-xc-loanweb为例,分析如下

    1. 从Pod-C请求到Pod-A,Pod-A(sit01-xc-loanweb)实际以ClusterIP的方式expose服务,具体端口是以8080

    2. 当Pod-C请求sit01-xc-loanwebe服务时,内部域名(xc-loan.sit01.nflow.cn

    3. Pod-C发出请求后,经过自己所在的node,check本机的iptables规则,如下(sit01-xc-loanweb)使用iptables-save查看

      -A KUBE-SERVICES -d 10.10.147.45/32 -p tcp -m comment --comment "sit/sit01-xc-loanweb:http cluster IP" -m tcp --dport 8080 -j KUBE-SVC-CRJTZGXZEZHAKQ75

      -A KUBE-SVC-CRJTZGXZEZHAKQ75 -m comment --comment "sit/sit01-xc-loanweb:http" -j KUBE-SEP-BXKHI3O6DYI2MSCL

      -A KUBE-SEP-BXKHI3O6DYI2MSCL -p tcp -m comment --comment "sit/sit01-xc-loanweb:http" -m tcp -j DNAT --to-destination 172.19.102.247:8080

    4. 根据iptables规则,替换目的地址,将10.10.147.45替换为172.19.102.247,而源地址则不变

      注意:下图的错误点

      • SNAT修正为DNAT

    返回流
    1. Pod-A的地址替换成SVC1的地址,即172.19.0.1 → 10.10.0.1

    NodePort

    从Kubernetes1.5开始,如果客户端请求NodePort的服务,默认数据包进行源地址转换SNAT

    请求流

    实际以RabbitMQ 15672端口为例,域名sit-mq-mgt.qiangyun.com(注意该域名入口不是以ingress模式配置)

    1. 客户端请求Pod-C的服务,该服务是以NodePort的形式expose

    2. 访问域名sit-mq-mgt.qiangyun.com(实际后端的地址是10.1.48.1:30891)

    3. 目的地址转换DNAT的iptables规则

      -A KUBE-NODEPORTS -p tcp -m comment --comment "sit/sit-rabbitmq:mq-mgt" -m tcp --dport 30891 -j KUBE-SVC-4ZCHRGNPBVZO7YGD

      -A KUBE-SVC-4ZCHRGNPBVZO7YGD -m comment --comment "sit/sit-rabbitmq:mq-mgt" -j KUBE-SEP-7T6YOIC7QTENJC7F

      -A KUBE-SEP-7T6YOIC7QTENJC7F -p tcp -m comment --comment "sit/sit-rabbitmq:mq-mgt" -m tcp -j DNAT --to-destination 172.19.255.105:15672

    4. 目的地址替换10.148.1 →  172.19.1.1

    返回流
    1. 执行相关源地址,目的地址转换

     LoadBalance

    从Kubernetes1.5开始,如果请求load balance类型的服务,默认情况下,需要进行源地址转换

    请求流

    大致与NodePort类似,只是多了一层LoadBalance

    目的地址转换LB的地址转换为后端服务器的地址

     如果是externaltrafficpolicy = Local,那么具体的请求如下

  • 相关阅读:
    李彦宏演讲被泼水:演讲时遇到意外情况该如何处理?
    人工智能,能为教育带来哪些改变?
    重磅!Python又第一了!网友:为什么找不到好工作?真相让人脸红…
    《营销管理必读12篇》读后感
    战略管理好书推荐,《战略管理必读12篇》位居榜首
    企业管理十大书
    童话里都是骗人的?用词向量解析故事中的性别偏见
    《领导力必读12篇》:领导力提升的艺术
    领导力提升:你找对方法了吗?
    分布式系统阅读笔记(十)-----P2P对等网络系统
  • 原文地址:https://www.cnblogs.com/apink/p/16291815.html
Copyright © 2020-2023  润新知