kube-proxy ipvs模式详解

2023-05-16

一、kube-proxy 开启 ipvs

1、环境准备:

测试环境为kubernetes集群,一台master节点,一台node节点。集群网络使用flanneld搭建。

注意:master节点上也需要进行kubelet配置。因为ipvs在有些情况下是依赖iptables的,iptables中KUBE-POSTROUTING,KUBE-MARK-MASQ, KUBE-MARK-DROP这三条链是被 kubelet创建和维护的, ipvs不会创建它们。

2、建议关闭SELinux,firewall

firewall是Linux 的一个安全子系统,SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源。

关闭SELinux

docker1.node ➜  ~ cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

重启验证:

[root@master140 ~]# sestatus
SELinux status:                 disabled

关闭firewall

systemctl stop firewalld
systemctl disable firewalld
3、开启路由转发功能:
[root@master140 ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1

必须有net.ipv4.ip_forward=1,有了它,ipvs才能进行转发

执行 sysctl -p 使之生效

[root@node147 ~]# sysctl -p
net.ipv4.ip_forward = 1
4、内核模块加载
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack_ipv4"
for kernel_module in \${ipvs_modules}; do
    /sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        /sbin/modprobe \${kernel_module}
    fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

检查测试:

[root@master140 ~]# lsmod | grep ip_vs 
ip_vs_ftp              13079  0 
nf_nat                 26787  3 ip_vs_ftp,nf_nat_ipv4,nf_nat_masquerade_ipv4
ip_vs_sed              12519  0 
ip_vs_nq               12516  0 
ip_vs_sh               12688  0 
ip_vs_dh               12688  0 
ip_vs_lblcr            12922  0 
ip_vs_lblc             12819  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  17 
ip_vs_wlc              12519  0 
ip_vs_lc               12516  0 
ip_vs                 141092  39 ip_vs_dh,ip_vs_lc,ip_vs_nq,ip_vs_rr,ip_vs_sh,ip_vs_ftp,ip_vs_sed,ip_vs_wlc,ip_vs_wrr,ip_vs_lblcr,ip_vs_lblc
nf_conntrack          133387  7 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack
5、修改kube-proxy配置

Node:

KUBE_PROXY_ARGS="--bind-address=0.0.0.0 \
  --hostname-override=node147 \
  --kubeconfig=/etc/kubernetes/kube-proxy.conf \
  --logtostderr=true \
  --v=2 \
  --feature-gates=SupportIPVSProxyMode=true \
  --proxy-mode=ipvs"

如果kubelet设置了–hostname-override选项,则kube-proxy也需要设置该选项,并且名字一致否则会出现找不到Node的情况。

Master:

KUBE_PROXY_ARGS="--proxy-mode=ipvs \
  --ipvs-scheduler=rr \
  --kubeconfig=/etc/kubernetes/kube-proxy.conf \
  --logtostderr=true \
  --v=2"

二、ipvs原理:

ipvs的模型中有两个角色:

调度器:Director,又称为Balancer。 调度器主要用于接受用户请求。

真实主机:Real Server,简称为RS。用于真正处理用户的请求。

IP地址类型分为三种:

Client IP:客户端请求源IP,简称CIP。

Director Virtual IP:调度器用于与客户端通信的IP地址,简称为VIP。

Real Server IP: 后端主机的用于与调度器通信的IP地址,简称为RIP。
在这里插入图片描述

工作过程:

1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。

2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。

3、ipvs会监听到达input链的数据包,比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP。

4、POSTROUTING链通过选路,将数据包发送给Real Server

5、Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP。

6、Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。

三 ipvs在kube-proxy中的使用

开启ipvs后,本机里面的一些信息会改变。

1、网卡

明显的变化是,多了一个绑定很多cluster service ip的kube-ipvs0网卡

[root@master140 ~]# ip addr
5: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default 
    link/ether d2:b0:08:01:3e:52 brd ff:ff:ff:ff:ff:ff
    inet 172.18.13.31/32 brd 172.18.13.31 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 172.18.13.1/32 brd 172.18.13.1 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 172.18.13.187/32 brd 172.18.13.187 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 172.18.13.113/32 brd 172.18.13.113 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 172.18.13.222/32 brd 172.18.13.222 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
2、router

查看router时候,会发现多了一下一些route信息。这些route信息是和上面的网卡信息对应的。

[root@master140 ~]# ip route show table local
local 172.18.13.1 dev kube-ipvs0 proto kernel scope host src 172.18.13.1 
local 172.18.13.31 dev kube-ipvs0 proto kernel scope host src 172.18.13.31 
local 172.18.13.113 dev kube-ipvs0 proto kernel scope host src 172.18.13.113 
local 172.18.13.187 dev kube-ipvs0 proto kernel scope host src 172.18.13.187 
local 172.18.13.222 dev kube-ipvs0 proto kernel scope host src 172.18.13.222 
3、ipvs 规则
[root@master140 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  127.0.0.1:30001 rr
TCP  127.0.0.1:30002 rr
  -> 10.0.3.5:8080                Masq    1      0          0         
  -> 10.0.3.7:8080                Masq    1      0          0         
TCP  127.0.0.1:30094 rr
  -> 10.0.3.2:80                  Masq    1      0          0         
TCP  172.17.0.1:30001 rr
TCP  172.17.0.1:30002 rr
  -> 10.0.3.5:8080                Masq    1      0          0         
  -> 10.0.3.7:8080                Masq    1      0          0         
TCP  172.17.0.1:30094 rr
  -> 10.0.3.2:80                  Masq    1      0          0         
TCP  172.18.13.1:443 rr
  -> 192.168.204.142:6443         Masq    1      0          0         
TCP  172.18.13.31:80 rr
TCP  172.18.13.113:8082 rr
  -> 10.0.3.5:8080                Masq    1      0          0         
  -> 10.0.3.7:8080                Masq    1      0          0         
TCP  172.18.13.187:3306 rr
  -> 10.0.3.4:3306                Masq    1      0          0         
TCP  172.18.13.222:80 rr
  -> 10.0.3.2:80                  Masq    1      0          0         
TCP  192.168.204.142:30001 rr
TCP  192.168.204.142:30002 rr
  -> 10.0.3.5:8080                Masq    1      0          0         
  -> 10.0.3.7:8080                Masq    1      0          0         
TCP  192.168.204.142:30094 rr
  -> 10.0.3.2:80                  Masq    1      0          0         
TCP  10.0.1.0:30001 rr
TCP  10.0.1.0:30002 rr
  -> 10.0.3.5:8080                Masq    1      0          0         
  -> 10.0.3.7:8080                Masq    1      0          0         
TCP  10.0.1.0:30094 rr
  -> 10.0.3.2:80                  Masq    1      0          0         
4、新增网卡和route的作用

由于 IPVS 的 DNAT 钩子挂在 INPUT 链上,因此必须要让内核识别 VIP 是本机的 IP。这样才会过INPUT 链,要不然就通过OUTPUT链出去了。k8s 通过设置将service cluster ip 绑定到虚拟网卡kube-ipvs0。

5、使用ipvs的kube-proxy的工作原理

![屏幕快照 2019-05-15 下午1.00.20](/Users/tcy/Documents/Typora/Picture/屏幕快照 2019-05-15 下午1.00.20.png)
在这里插入图片描述
①因为service cluster ip 绑定到虚拟网卡kube-ipvs0上,内核可以识别访问的 VIP 是本机的 IP.

②数据包到达INPUT链.

③ipvs监听到达input链的数据包,比对数据包请求的服务是为集群服务,修改数据包的目标IP地址为对应pod的IP,然后将数据包发至POSTROUTING链.

④数据包经过POSTROUTING链选路,将数据包通过flannel网卡发送出去。从flannel虚拟网卡获得源IP.

⑤pod接收到请求之后,构建响应报文,改变源地址和目的地址,返回给客户端。

四、实例-集群内部通过clusterIP访问到pod的流程

本例子中有两台机器,master和node,pod都在node机器上运行。访问命令为curl 172.18.13.222:80,对应的pod的ip为10.0.7.7。

![屏幕快照 2019-05-15 上午9.36.27](/Users/tcy/Documents/Typora/Picture/屏幕快照 2019-05-15 上午9.36.27.png)
在这里插入图片描述

1、本机接受请求

内核通过本机的路由和虚拟网卡,可以识别访问的 VIP 是本机的 IP

//路由
local 172.18.13.222 dev kube-ipvs0 proto kernel scope host src 172.18.13.222
//网卡
inet 172.18.13.222/32 brd 172.18.13.222 scope global kube-ipvs0
valid_lft forever preferred_lft forever
2、将数据包送至INPUT链。

验证是否经过INPUT链

首先、我们在INPUT链中加入一条如下过滤规则。该规则的意思是当有目的地址为172.18.13.222时,都拒绝掉。

iptables -t filter -I INPUT -d 172.18.13.222 -j DROP

查看INPUT链,确实多了此条规则。
在这里插入图片描述
之后,我们watch INPUT链

watch -n 0.1 "iptables --line-number -nvxL INPUT"

当我们访问172.18.13.222时

curl 172.18.13.222

发现无法访问,并且watch到INPUT确实有拒绝的包。验证成功后。
在这里插入图片描述

3、ipvs对请求做转发

ipvs会监听到达input链的数据包,比对数据包请求的服务是为集群服务,所以修改数据包的目标IP地址为真实服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP(真实ip)
在这里插入图片描述

4、通过网卡发出数据包

数据包经过POSTROUTING链选路,将数据包通过flannel网卡发送出去,pod所在机器也通过flannel网卡进行接收。数据包经过master上的flannel网卡第一次被赋予源IP。此时源IP,目的IP分别是10.0.6.0,10.0.7.7

验证是否通过flnanel网卡进行通信:

首先:master上flannel网卡信息是10.0.6.0/16。
在这里插入图片描述
node上flannel网卡信息是10.0.7.0/16。在这里插入图片描述
当我们从master上进行curl命令时
在这里插入图片描述
对pod所在机器node的flannel网卡进行监听,发现是请求从10.0.6.0发送过来的。10.0.6.0正是master上的网卡信息。
在这里插入图片描述

5、pod接收到请求,处理,返回

pod接收到请求之后,开始构建响应报文返回给客户端。 此时报文的源IP为pod的IP:10.0.7.7,目标IP为10.0.6.0。最终又通过flannel网络将响应报文发回master。

注意:

我们上文所说的通过flannel网络进行通信,最终还是要过机器的真实网卡,因为flannel网络设置的网卡也是虚拟的。

例如我们监听机器的真实网卡eth0

tcpdump -nn -i eth0 src port not 22  and dst port not 22

在这里插入图片描述
我们是能够发现通过flannel网络进行通信还是会经过真实网卡eth0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kube-proxy ipvs模式详解 的相关文章

  • Settings.Secure.HTTP_PROXY 在 ICS 中已弃用,但没有有关替换的信息

    Android 开发者文档说了以下内容Settings Secure HTTP PROXY 全局 http 代理的主机名和端口 在主机和端口 TODO 之间使用 分隔符 不推荐使用 global http proxy host 等 但没有任
  • Docker nginx 反向代理返回 502 bad gateway “连接到上游时连接被拒绝”

    我正在尝试在一个容器中设置 nginx 反向代理到运行我的应用程序的另一个容器 这是我的 nginx conf daemon off user nginx worker processes 1 error log var log nginx
  • 通过 SOCKS 代理使用 Hadoop?

    所以我们的Hadoop集群运行在一些节点上 并且只能从这些节点访问 您可以通过 SSH 连接到它们并完成您的工作 因为这很烦人 但 可以理解 没有人会尝试配置访问控制 以便某些人可以从外部使用它 我正在尝试下一个最好的方法 即使用 SSH
  • 节点代理错误错误:连接ECONNREFUSED

    我使用以下模块中的反向代理https github com nodejitsu node http proxy https github com nodejitsu node http proxy 我犯了以下代码的错误 proxy on e
  • 如何处理来自代理的额外 HTTP 标头?

    我们的环境需要使用出站代理来提供异地服务 通常这不是问题 在 Twilio 的这种情况下 返回的额外标头会破坏客户端 传出标头 POST 2010 04 01 Accounts FOO SMS Messages json HTTP 1 1
  • 将 Tor 代理与 scrapy 一起使用

    我需要帮助在 Ubuntu 中设置 Tor 并在 scrapy 框架中使用它 我做了一些研究并找到了这个指南 class RetryChangeProxyMiddleware RetryMiddleware def retry self r
  • $Proxy$_$$_Weld$EnterpriseProxy$ 代理子类是如何实现的?

    在 Java EE 7 应用程序中 假设我有一个会话 bean 类 Stateless public class MyEJB 在 Glassfish 4 下调试时 我可以看到一个名为MyEJB Proxy Weld EnterprisePr
  • Axis HTTP 与 Axis HTTPS 代理设置

    我部署在 Weblogic 集群上的 Java 应用程序调用两个 Web 服务 如下所示 它通过 HTTPS 将 SOAP 客户端请求发送到互联网上的外部应用程序 通过 Axis 1 4 创建的 Java 类 此后 它通过 HTTP 将 S
  • iOS 获取代理设置

    在我的项目中 我使用 libcurl 通过互联网下载数据 问题是 libcurl 无法检测 wifi 连接的代理设置 我必须手动设置 libcurl 的设置 所以我想知道如何获取 wifi 连接的代理设置 我在钥匙串中找到了一些有关信息的线
  • 检测默认网络浏览器的代理设置

    MSDN样本 HttpWebRequest myWebRequest HttpWebRequest WebRequest Create http www microsoft com WebProxy myProxy new WebProxy
  • 通过代理服务器访问HTTPS站点

    我正在添加代码以使用代理服务器访问互联网 从正常 HTTP 位置请求文件时 该代码可以正常工作 但在访问安全位置 HTTPS 时则不起作用 这是运行良好的代码 URL http UnSecureSite net file xml Dim w
  • 带代理的 PHP CURL 导致套接字上的 CLOSE_WAIT

    我正在使用 PHPcurl 库来建立连接并从 WEB 检索内容 通常 我有多个 SOCKS5 代理服务器在 localhost 上运行 端口从 10300 到 10350 PHP 随机选择一个端口 My code ch curl init
  • webpack-dev-server 中的代理 websockets 连接

    是否可以在 webpack 开发服务器中代理 websocket 连接 我知道如何将常规 HTTP 请求代理到另一个后端 但它不适用于 websockets 大概是因为代理配置中的目标以 http 开头 webpack dev server
  • 检测用户是否位于代理后面

    我试图弄清楚如何检测登录我网站的人是否在代理后面 我读到您可以通过可嵌入对象 Flash 和 Java 检测一个人的真实 IP 地址 但是 我实际上无法找到任何示例或来源 我正在使用 PHP 并且我已经阅读了寻找 SERVER HTTP X
  • 当我在浏览器中访问 Google 或 Google App Engine 等网站时,Google Cloud SDK 出现网络连接问题

    我在 Google App Engine 上创建了一个帐户 然后通过 gcloud init 安装了 google cloud sdk 并收到以下错误 Pick configuration to use 1 Re initialize th
  • Node.js 中的 HTTPS 代理服务器

    我正在开发一个node js代理服务器应用程序 我希望它支持HTTP and HTTPS SSL 协议 作为服务器 我目前正在使用node http proxy https github com nodejitsu node http pr
  • Windows 注册表中的 DefaultConnectionSettings 值的格式是什么?

    Windows 注册表项 HKCU Software Microsoft Windows CurrentVersion Internet Settings Connections 包含一个名为的二进制值DefaultConnectionSe
  • 如何在 Java 中获得无代理连接?

    我如何避免经历ProxySelector当与URLConnection或者更确切地说 如何获得保证不受 Java 知道的任何代理的连接 我以为这是什么代理 NO PROXY http docs oracle com javase 8 doc
  • 使用单个“proxyServer”将 Websocket 代理到多个目标

    我正在开发一个nodeJS websocket代理服务器 用例是当 websocket 请求到来时 我将检查其凭据 添加新标头 然后根据其组 来自用户 ID 将 websocket 连接重定向到其目标 webscoket 服务器 我发现大多
  • nginx代理认证拦截

    我有几个服务 它们支持 nginx 实例 为了处理身份验证 在 nginx 中 我拦截每个请求并将其发送到身份验证服务 在那里 如果凭据正确 我将设置一个包含用户相关信息的 cookie 现在 请求应该被路由到适当的服务 并设置 cooki

随机推荐

  • 腾讯轻量云服务器控制台详细介绍及建站操作图文教程

    腾讯轻量应用服务器控制台与腾讯云服务器不同 xff0c 轻量应用服务器主要是在控制台上集成了大部分建站功能 xff0c 通过简单点击几次鼠标就可以轻松建站 xff0c 易学易用 不过对于没接触过的新手来说 xff0c 还是有点陌生的 xff
  • 腾讯云轻量应用服务器快速搭建一个专属网盘

    一 前言 xff1a 云盘我想大家接触的一定不会少 云盘很好地解决了文件存储和共享的问题 xff0c 但随着大量云盘厂商的退出 xff0c 剩余的云盘服务也越来越少 有些云盘虽然上传速度快 xff0c 但是下载速度较慢 xff0c 不开通会
  • 使用腾讯云轻量应用服务器搭建一个简洁漂亮的目录

    前言 作为一个摄影爱好者 xff0c 会经常做一些图片的分享 xff0c 前端时间在网上看到了一个非常好看的目录 xff0c 这里给大家分享一下怎么样通过腾讯轻量应用服务器来搭建 官方介绍 files photo gallery是一款简洁漂
  • 玩转服务器-博客两件套之绝佳的Markdown写作平台CodiMD

    前言 大家都很羡慕博主的高产 xff0c 纷纷问我有什么技巧 我的回复是手熟 xff0c 多写 xff0c 那么多写就需要一个比较好的工具 xff0c 所以我这里给大家介绍一个在线markdown文档平台 xff0c 让大家可以随时书写文档
  • 玩转服务器-博客两件套之开源的一文多发平台ArtiPub

    玩转服务器 博客两件套之开源的一文多发平台ArtiPub 前言 上次给大家介绍了 xff0c 博主在线的markdown文档平台 xff0c 让大家可以随时书写文档和博客 xff0c 那么很多朋友在很多平台都看到了我的文章 xff0c 我是
  • 使用acme.sh申请Let‘s Encrypt免费的SSL证书

    使用acme sh申请Let s Encrypt免费的SSL证书 说明 xff1a Let s Encrypt 是一个由非营利性组织 互联网安全研究小组 xff08 ISRG xff09 提供的免费 自动化和开放的证书颁发机构 xff08
  • win7操作系统下laravel/homestead在SSH auth method: private key卡住提示Warning: Connection reset. Retrying的解决方案

    将VirtualBox兼容模式改为win7 勾选以管理员身份运行 安全里面各组个用户全部编辑好权限并勾选 电脑开机后优先双击VirtualBox启动后在执行git命令行进行启动
  • 为什么用了索引,SQL查询还是慢?

    原文链接cnblogs com jackyfei p 12122767 html 经常有同学疑问 xff0c 为什么有时候一个SQL语句使用了索引 xff0c 为什么还是会进入到慢查询之中呢 xff1f 今天我们就从这个问题开始来聊一聊索引
  • 腾讯云轻量应用服务器器使用技巧-腾讯云OrcaTerm的上传下载

    前言 xff1a 上传下载是WebShell中不可或缺的功能之一 xff0c 也是我在日常管理过程中经常使用操作 这里就跟着博主的视角来揭秘 xff0c 腾讯云OrcaTerm的上传与下载 对比 博主对比了一些shell的应用 xff0c
  • C语言strtok函数

    strtok是C语言用于分割字符串的函数 xff0c 需要include lt string h gt 第一次使用时第一个参数传入待分割的字符串 xff0c 第二个参数传入分割符号 第二次使用时第一个函数传入NULL 第二个参数传入分割符号
  • CSS | 置换元素(可替换元素)

    文章目录 置换元素 定义 常见置换元素 固有尺寸 非置换元素 注意 若文章有任何纰漏或未涉及你想了解的内容 欢迎在评论提出 我会尽最快速度回复 置换元素 定义 置换元素是具有固有尺寸 intrinsic dimensions 浏览器根据其标
  • 人体姿态估计综述(Human Pose Estimation Overview)

    主流数据集整理 xff1a http blog csdn net qq 36165459 article details 78332172 Part1 xff1a Single Person Pose Estimation 2015 年之前
  • 1到100的二进制表示

    1 61 1 2 61 10 3 61 11 4 61 100 5 61 101 6 61 110 7 61 111 8 61 1000 9 61 1001 10 61 1010 11 61 1011 12 61 1100 13 61 11
  • 画格子

    题目描述 画一些小格子 xff0c 如下所示 xff1a MAKEAMERICA AKEAMERICAG KEAMERICAGR EAMERICAGRE AMERICAGREA MERICAGREAT ERICAGREATA RICAGRE
  • golang -----------字符串(rune,string,type)

    一 内存布局 字符串在Go语言内存模型中用一个2字长的数据结构表示 它包含一个指向字符串存储数据的指针和一个长度数据 因为string类型是不可变的 xff0c 对于多字符串共享同一个存储数据是安全的 切分操作str i j 会得到一个新的
  • HTTP中GET,POST和PUT的区别

    一 HTTP中定义了以下几种请求方法 1 GET xff1b 2 POST xff1b 3 PUT xff1b 4 DELETE 5 HEAD xff1b 6 TRACE xff1b 7 OPTIONS xff1b 二 各个方法介绍 xff
  • B树,B+树,红黑树应用场景笔记

    一 B树的应用 1 B树大量应用在数据库和文件系统当中 它的设计思想是 xff0c 将相关数据尽量集中在一起 xff0c 以便一次读取多个数据 xff0c 减少硬盘操作次数 B树算法减少定位记录时所经历的中间过程 xff0c 从而加快存取速
  • 使用 Gitee 进行代码管理

    为什么使用 Gitee 这里推荐使用 Gitee 进行代码管理 Gitee 和 Github 最大的区别在我看来就是私有库的免费 xff0c 在 Github 上建立私有库是需要收费的 xff0c 而在 Gitee 上建立私有库是不需要收费
  • kubernetes的Kube-proxy的iptables转发规则

    概念 kube proxy 实际上并不起一个 proxy 的作用 xff0c 而是 watch 变更并更新 iptables xff0c 也就是说 xff0c client 的请求直接通过 iptables 路由 如果kube proxy通
  • kube-proxy ipvs模式详解

    一 kube proxy 开启 ipvs 1 环境准备 xff1a 测试环境为kubernetes集群 xff0c 一台master节点 xff0c 一台node节点 集群网络使用flanneld搭建 注意 xff1a master节点上也