IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> [K8S] Service代理模式之IPVS -> 正文阅读

[网络协议][K8S] Service代理模式之IPVS

相比于iptables(由于规则遍历,随着访问量增加,匹配变慢), IPVS(使用哈希表)性能更佳

1.Service默认使用的代理模式是iptables,可以查看kube-proxy pod验证

[root@k8s-master ~]# kubectl get pod -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-97769f7c7-xh7j7   1/1     Running   18         27d
calico-node-58ck4                         1/1     Running   20         27d
calico-node-q6qxm                         1/1     Running   17         27d
calico-node-vmmv5                         1/1     Running   17         27d
coredns-7f89b7bc75-mgtnj                  1/1     Running   17         27d
coredns-7f89b7bc75-wkrjq                  1/1     Running   17         27d
etcd-k8s-master                           1/1     Running   18         27d
kube-apiserver-k8s-master                 1/1     Running   21         27d
kube-controller-manager-k8s-master        1/1     Running   14         15d
kube-proxy-clmzc                          1/1     Running   17         27d
kube-proxy-f4mk4                          1/1     Running   17         27d
kube-proxy-s7n6w                          1/1     Running   18         27d
kube-scheduler-k8s-master                 1/1     Running   14         15d
metrics-server-84f9866fdf-9l6rt           1/1     Running   16         16d
[root@k8s-master ~]#

没有指定mode,默认使用iptables?

2.切换Sevice模式为ipvs

?kubectl edit configmap kube-proxy -n kube-system 编辑configmap将mode改为ipvs

需要重启pod, 以?kube-proxy-clmzc为例?

[root@k8s-master ~]# kubectl get pod -o wide -n kube-system | grep kube-proxy
kube-proxy-clmzc                          1/1     Running   17         27d   192.168.231.122   k8s-node1    <none>           <none>
kube-proxy-f4mk4                          1/1     Running   17         27d   192.168.231.123   k8s-node2    <none>           <none>
kube-proxy-s7n6w                          1/1     Running   18         27d   192.168.231.121   k8s-master   <none>           <none>
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl delete pod kube-proxy-clmzc -n kube-system
pod "kube-proxy-clmzc" deleted
[root@k8s-master ~]# kubectl get pod -o wide -n kube-system | grep kube-proxy
kube-proxy-f4mk4                          1/1     Running   17         27d   192.168.231.123   k8s-node2    <none>           <none>
kube-proxy-frvx7                          1/1     Running   0          19s   192.168.231.122   k8s-node1    <none>           <none>
kube-proxy-s7n6w                          1/1     Running   18         27d   192.168.231.121   k8s-master   <none>           <none>
[root@k8s-master ~]#

3.使用ipvsadm -L -n验证

?重启的pod在?192.168.231.122, 即k8s-node1,如果没有ipvsadm先安装, yum install ipvsadm -y

svc的cluster IP 是10.104.247.10, nodePort 是31947
endpoints 是10.244.169.161:80,10.244.169.163:80,10.244.169.165:80

[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        27d
web          NodePort    10.104.247.10   <none>        80:31947/TCP   101m
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get ep
NAME         ENDPOINTS                                               AGE
kubernetes   192.168.231.121:6443                                    27d
web          10.244.169.161:80,10.244.169.163:80,10.244.169.165:80   102m
[root@k8s-master ~]#

在k8s-node1执行ipvsadm -L -n,可以找到集群内部/外部转发,调度算法是默认的rr

[root@k8s-node1 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
...
TCP  10.104.247.10:80 rr
  -> 10.244.169.161:80            Masq    1      0          0
  -> 10.244.169.163:80            Masq    1      0          0
  -> 10.244.169.165:80            Masq    1      0          0
...
TCP  192.168.122.1:31947 rr
  -> 10.244.169.161:80            Masq    1      0          0
  -> 10.244.169.163:80            Masq    1      0          0
  -> 10.244.169.165:80            Masq    1      0          0
UDP  10.96.0.10:53 rr
  -> 10.244.169.149:53            Masq    1      0          0
  -> 10.244.169.156:53            Masq    1      0          0
[root@k8s-node1 ~]#

说明:一些调度算法
rr: round-robin
lc: least connection
dh: destination hashing
sh: source hashing
sed: shortest expected delay
nq: never queue
……

4.恢复环境

kubectl edit configmap kube-proxy -n kube-system 编辑configmap

?重启k8s-node1上 kube-proxy的pod

[root@k8s-master ~]# kubectl edit configmap kube-proxy -n kube-system
configmap/kube-proxy edited
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get pod -o wide -n kube-system | grep kube-proxy
kube-proxy-f4mk4                          1/1     Running   17         27d   192.168.231.123   k8s-node2    <none>           <none>
kube-proxy-frvx7                          1/1     Running   0          26m   192.168.231.122   k8s-node1    <none>           <none>
kube-proxy-s7n6w                          1/1     Running   18         27d   192.168.231.121   k8s-master   <none>           <none>
[root@k8s-master ~]# kubectl delete pod kube-proxy-frvx7 -n kube-system
pod "kube-proxy-frvx7" deleted
[root@k8s-master ~]# kubectl get pod -o wide -n kube-system | grep kube-proxy
kube-proxy-f4mk4                          1/1     Running   17         27d   192.168.231.123   k8s-node2    <none>           <none>
kube-proxy-s7n6w                          1/1     Running   18         27d   192.168.231.121   k8s-master   <none>           <none>
kube-proxy-xt644                          1/1     Running   0          40s   192.168.231.122   k8s-node1    <none>           <none>
[root@k8s-master ~]#

k8s-node1上执行?ipvsadm -L -n 还是能看到规则, 在k8s-node1执行如下命令

ip link del kube-ipvs0
ipvsadm -C

[root@k8s-node1 ~]# ip link
...
11: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default
    link/ether 5e:9b:01:a5:2a:e0 brd ff:ff:ff:ff:ff:ff
[root@k8s-node1 ~]#
[root@k8s-node1 ~]# ip link del kube-ipvs0
[root@k8s-node1 ~]#
[root@k8s-node1 ~]# ipvsadm -C
[root@k8s-node1 ~]#
[root@k8s-node1 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@k8s-node1 ~]#

使用?kubectl logs kube-proxy-xt644 -n kube-system 查看使用的proxy mode是iptables proxy

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2021-08-24 15:54:18  更:2021-08-24 15:57:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:15:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码