k8s从入门到精通(十):网络转发控制器 kube-proxy

Kube-proxy是代理服务,这是为Kubernetes的service提供负载均衡。实现上可以通过iptables或者ipvs等。Kubernetes将服务和Pod通过标签的方式关联到一起,通过服务的标签筛选找到后端的Pod,但服务的后端并非直接关联Pod而是通过Endpoint(端点)关联,Endpoint可以理解成“Pod地址:Pod端口”的组合,一个Endpoint可以加入到多个服务中。

k8s从入门到精通(十):网络转发控制器 kube-proxy

下面将通过一个服务的案例阐述kube-proxy如何生成iptables规则。当我们创建一个服务后,默认情况Kubernetes会为每个服务生成一个集群虚IP。通过访问该IP便可以以负载均衡的方式访问后端Pod中的服务。下面是一个服务的yaml文件,服务通过端口8080对内提供服务,通过31341对外提供服务,并通过paas.io/serviceName选择后端容器。

apiVersion: v1
kind: Service
metadata:
  labels:
    paas.io/serviceName: devpaasy
  name: devpaasy
  namespace: dev
spec:
  clusterIP: 10.0.0.41
  ports:
  - name: "port1"
    nodePort: 31341
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    paas.io/serviceName: devpaasy

可以看到符合该标签的两个Pod如下:

# kubectl get Pod -ndev -l paas.io/serviceName=devpaasy   
devpaasy-74b5887574-gw6n5   1/1     Running   0          37h
devpaasy-74b5887574-zbfw7   1/1     Running   0          37h

那么会在每台机器上面生产如下iptables规则:

1、将进来以及出去的流量的都转到KUBE-SERVICES链上。

-A PREROUTING -m comment --comment "Kubernetes service portals" -j KUBE-SERVICES
-A OUTPUT -m comment --comment "Kubernetes service portals" -j KUBE-SERVICES

2、目标是虚IP(10.0.0.41)或者访问NodePort的流量都转发到KUBE-SVC-HDARFCJAQENGWQ37链上。

-A KUBE-SERVICES -d 10.0.0.41/32 -p tcp -m comment --comment "dev/devpaasy:31341 cluster IP" -m tcp --dport 8080 -j KUBE-SVC-HDARFCJAQENGWQ37
-A KUBE-NODEPORTS -p tcp -m comment --comment "dev/devpaasy:31341" -m tcp --dport 31341 -j KUBE-SVC-HDARFCJAQENGWQ37

3、KUBE-SVC-HDARFCJAQENGWQ37链通过iptables的随机模块分发流量,第一个是50%,第二个是100%。如果是后端有三个Pod,那么比例将会是33%、50%、100%,以此类推。

-A KUBE-SVC-HDARFCJAQENGWQ37 -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-6CMVSYBMZCJCMDKX
-A KUBE-SVC-HDARFCJAQENGWQ37 -j KUBE-SEP-RCGI7N4AHLHE74AR

4、最终通过DNAT进入容器。

-A KUBE-SEP-6CMVSYBMZCJCMDKX -p tcp -m tcp -j DNAT --to-destination 10.251.19.12:8080
-A KUBE-SEP-RCGI7N4AHLHE74AR -p tcp -m tcp -j DNAT --to-destination 10.251.19.8:8080

上面的Demo演示的是通iptables实现的负载均衡,但其实 kube-proxy 除了使用iptables以外还可以通过 ipvs 或者 eBPF 实现网络转发,甚至ipvs 和 eBPF 在性能方面比iptables更优。

k8s从入门到精通(十):网络转发控制器 kube-proxy

展开阅读全文

页面更新:2024-05-29

标签:组合   以此类推   集群   端口   控制器   容器   演示   模块   流量   入门   比例   性能   机器   规则   案例   标签   方式   科技   网络

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top