diff --git a/content/zh/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md b/content/zh/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md index bbb86fd9b8..bcffe1b32c 100644 --- a/content/zh/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md +++ b/content/zh/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md @@ -1,8 +1,9 @@ --- +title: 基于IPVS的集群内部负载均衡 cn-approvers: - congfairy layout: blog -title: '基于IPVS的集群内部负载均衡' +title: 'IPVS-Based In-Cluster Load Balancing Deep Dive' date: 2018-07-09 --- -举个例子: +这是一个例子: # kubectl describe svc nginx-service Name: nginx-service @@ -240,13 +241,14 @@ There are three proxy modes in IPVS: NAT (masq), IPIP and DR. Only NAT mode supp --> -请注意,Kubernetes 服务和 IPVS 虚拟服务器之间的关系是 “1:N”。 例如,考虑具有多个 IP 地址的 Kubernetes 服务。 外部 IP 类型服务有两个 IP 地址 - 集群 IP 和外部 IP。 然后,IPVS 代理将创建 2 个 IPVS 虚拟服务器 - 一个用于集群 IP ,另一个用于外部 IP。 Kubernetes 的 endpoint(每个 IP +端口对)与 IPVS 虚拟服务器之间的关系是 “1:1”。 +请注意,Kubernetes 服务和 IPVS 虚拟服务器之间的关系是“1:N”。 例如,考虑具有多个 IP 地址的 Kubernetes 服务。 外部 IP 类型服务有两个 IP 地址 - 集群IP和外部 IP。 然后,IPVS 代理将创建2个 IPVS 虚拟服务器 - 一个用于集群 IP,另一个用于外部 IP。 Kubernetes 的 endpoint(每个IP +端口对)与 IPVS 虚拟服务器之间的关系是“1:1”。 -删除 Kubernetes 服务将触发删除相应的IPVS虚拟服务器,IPVS物理服务器及其绑定到虚拟接口的IP地址。 +删除 Kubernetes 服务将触发删除相应的 IPVS 虚拟服务器,IPVS 物理服务器及其绑定到虚拟接口的 IP 地址。 端口映射 -IPVS 中有三种代理模式:NAT(masq),IPIP 和 DR。 只有 NAT 模式支持端口映射。 Kube-proxy 利用 NAT 模式进行端口映射。 以下示例显示 IPVS 服务端口3080到 Pod 端口8080的映射。 +IPVS 中有三种代理模式:NAT(masq),IPIP 和 DR。 只有 NAT 模式支持端口映射。 Kube-proxy 利用 NAT 模式进行端口映射。 以下示例显示 IPVS 服务端口3080到Pod端口8080的映射。 + TCP 10.102.128.4:3080 rr -> 10.244.0.235:8080 Masq 1 0 0 @@ -260,7 +262,7 @@ IPVS supports client IP session affinity (persistent connection). When a Service --> -会话亲和性 +会话关系 IPVS 支持客户端 IP 会话关联(持久连接)。 当服务指定会话关系时,IPVS 代理将在 IPVS 虚拟服务器中设置超时值(默认为180分钟= 10800秒)。 例如: @@ -294,13 +296,15 @@ However, we don't want to create too many iptables rules. So we adopt ipset for --> + + IPVS 代理中的 Iptables 和 Ipset -IPVS 用于负载均衡,它无法处理 kube-proxy中的其他问题,例如 包过滤,数据包欺骗,SNAT 等 +IPVS 用于负载均衡,它无法处理 kube-proxy 中的其他问题,例如 包过滤,数据包欺骗,SNAT 等 -IPVS proxier在上述场景中利用 iptables。 具体来说,ipvs proxier 将在以下4种情况下依赖于 iptables: +IPVS proxier 在上述场景中利用 iptables。 具体来说,ipvs proxier 将在以下4种情况下依赖于 iptables: -- kube-proxy 以--masquerade-all = true 开头 +- kube-proxy 以 --masquerade-all = true 开头 - 在 kube-proxy 启动中指定集群 CIDR - 支持 Loadbalancer 类型服务 - 支持 NodePort 类型的服务 @@ -330,12 +334,12 @@ IPVS proxier在上述场景中利用 iptables。 具体来说,ipvs proxier 将 KUBE-EXTERNAL-IP 服务外部 IP +端口 将数据包伪装成外部 IP KUBE-LOAD-BALANCER 负载均衡器入口 IP +端口 将数据包伪装成 Load Balancer 类型的服务 KUBE-LOAD-BALANCER-LOCAL 负载均衡器入口 IP +端口 以及 externalTrafficPolicy=local 接受数据包到 Load Balancer externalTrafficPolicy=local - KUBE-LOAD-BALANCER-FW 负载均衡器入口 IP +端口 以及 loadBalancerSourceRanges 使用指定的 loadBalancerSourceRanges 丢弃 Load Balancer类型Service的数据包 - KUBE-LOAD-BALANCER-SOURCE-CIDR 负载均衡器入口 IP +端口 + 源 CIDR 接受 Load Balancer 类型 Service的数据包,并指定loadBalancerSourceRanges - KUBE-NODE-PORT-TCP NodePort 类型服务 TCP 将数据包伪装成 NodePort(TCP) - KUBE-NODE-PORT-LOCAL-TCP NodePort 类型服务 TCP端口,带有 externalTrafficPolicy=local 接受数据包到 NodePort 服务 使用 externalTrafficPolicy=local + KUBE-LOAD-BALANCER-FW 负载均衡器入口 IP +端口 以及 loadBalancerSourceRanges 使用指定的 loadBalancerSourceRanges 丢弃 Load Balancer类型Service的数据包 + KUBE-LOAD-BALANCER-SOURCE-CIDR 负载均衡器入口 IP +端口 + 源 CIDR 接受 Load Balancer 类型 Service 的数据包,并指定loadBalancerSourceRanges + KUBE-NODE-PORT-TCP NodePort 类型服务 TCP 将数据包伪装成 NodePort(TCP) + KUBE-NODE-PORT-LOCAL-TCP NodePort 类型服务 TCP 端口,带有 externalTrafficPolicy=local 接受数据包到 NodePort 服务 使用 externalTrafficPolicy=local KUBE-NODE-PORT-UDP NodePort 类型服务 UDP 端口 将数据包伪装成 NodePort(UDP) - KUBE-NODE-PORT-LOCAL-UDP NodePort 类型服务 UDP 端口 使用 externalTrafficPolicy=local 接受数据包到 NodePort 服务 使用 externalTrafficPolicy=local + KUBE-NODE-PORT-LOCAL-UDP NodePort 类型服务 UDP 端口 使用 externalTrafficPolicy=local 接受数据包到NodePort服务 使用 externalTrafficPolicy=local