使用IPVS实现Kubernetes入口流量负载均衡

新搭建的Kubernetes集群如何承接外部访问的流量,是刚上手Kubernetes时常常会遇到的问题。 在公有云上,官方给出了比较直接的答案,使用LoadBalancer类型的Service,利用公有云提供的负载均衡服务来承接流量, 同时在多台服务器之间进行负载均衡。而在私有环境中,如何正确的将外部流量引入到集群内部,却暂时没有标准的做法。 本文将介绍一种基于IPVS来承接流量并实现负载均衡的方法,供大家参考。

IPVS

IPVS是LVS项目的一部分,是一款运行在Linux kernel当中的4层负载均衡器,性能异常优秀。 根据这篇文章的介绍,使用调优后的内核,可以轻松处理每秒10万次以上的转发请求。目前在中大型互联网项目中, IPVS被广泛的使用,用于承接网站入口处的流量。

Kubernetes Service

Service是Kubernetes的基础概念之一,它将一组Pod抽象成为一项服务,统一的对外提供服务,在各个Pod之间实现负载均衡。 Service有多种类型,最基本的ClusterIP类型解决了集群内部访问服务的需求,NodePort类型通过Node节点的端口暴露服务, 再配合上LoadBalancer类型所定义的负载均衡器,实现了流量经过前端负载均衡器分发到各个Node节点暴露出的端口, 再通过iptables进行一次负载均衡,最终分发到实际的Pod上这个过程。

在Service的Spec中,externalIPs字段平常鲜有人提到,当把IP地址填入这个字段后,kube-proxy会增加对应的iptables规则, 当有以对应IP为目标的流量发送到Node节点时,iptables将进行NAT,将流量转发到对应的服务上。一般情况下, 很少会遇到服务器接受非自身绑定IP流量的情况,所以externalIPs不常被使用,但配合网络层的其他工具,它可以实现给Service绑定外部IP的效果。

今天我们将使用externalIPs配合IPVS的DR(Direct Routing)模式实现将外部流量引入到集群内部,同时实现负载均衡。

环境搭建

为了演示,我们搭建了4台服务器组成的集群。一台服务器运行IPVS,扮演负载均衡器的作用,一台服务器运行Kubernetes Master组件, 其他两台服务器作为Node加入到Kubernetes集群当中。搭建过程这里不详细介绍,大家可以参考相关的文档。

所有服务器在172.17.8.0/24这个网段中。服务的VIP我们设定为172.17.8.201。整体架构入下图所示:

使用IPVS实现Kubernetes入口流量负载均衡_第1张图片

接下来让我们来配置IPVS和Kubernetes。

使用externalIPs暴露Kubernetes Service

首先在集群内部运行2个nginx Pod用作演示。

$ kubectl run nginx --image=nginx --replicas=2

再将它暴露为Service,同时设定externalIPs字段

$ kubectl expose deployment nginx --port 80 --external-ip 172.17.8.201

查看iptables配置,确认对应的iptables规则已经被加入。

$ sudo iptables -t nat -L KUBE-SERVICES -n
Chain KUBE-SERVICES (2 references)
target     prot opt source               destination
KUBE-SVC-4N57TFCL4MD7ZTDA  tcp  --  0.0.0.0/0            10.3.0.156           /* default/nginx: cluster IP */ tcp dpt:80
KUBE-MARK-MASQ  tcp  --  0.0.0.0/0            172.17.8.201         /* default/nginx: external IP */ tcp dpt:80
KUBE-SVC-4N57TFCL4MD7ZTDA  tcp  --  0.0.0.0/0            172.17.8.201         /* default/nginx: external IP */ tcp dpt:80 PHYSDEV match ! --physdev-is-in ADDRTYPE match src-type !LOCAL
KUBE-SVC-4N57TFCL4MD7ZTDA  tcp  --  0.0.0.0/0            172.17.8.201         /* default/nginx: external IP */ tcp dpt:80 ADDRTYPE match dst-type LOCAL
KUBE-SVC-NPX46M4PTMTKRN6Y  tcp  --  0.0.0.0/0            10.3.0.1             /* default/kubernetes:https cluster IP */ tcp dpt:443
KUBE-NODEPORTS  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service nodeports; NOTE: this must be the last rule in this chain */ ADDRTYPE match dst-type LOCAL

配置IPVS实现流量转发

首先在IPVS服务器上,打开ipv4_forward

$ sudo sysctl -w net.ipv4.ip_forward=1

接下来加载IPVS内核模块。

$ sudo modprobe ip_vs

将VIP绑定在网卡上。

$ sudo ifconfig eth0:0 172.17.8.201 netmask 255.255.255.0 broadcast 172.17.8.255

再使用ipvsadm来配置IPVS,这里我们直接使用Docker镜像,避免和特定发行版绑定。

$ docker run --privileged -it --rm --net host luizbafilho/ipvsadm
/ # ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
/ # ipvsadm -A -t 172.17.8.201:80
/ # ipvsadm -a -t 172.17.8.201:80 -r 172.17.8.11:80 -g
/ # ipvsadm -a -t 172.17.8.201:80 -r 172.17.8.12:80 -g
/ # ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.17.8.201:http wlc
  -> 172.17.8.11:http             Route   1      0          0
  -> 172.17.8.12:http             Route   1      0          0

可以看到,我们成功建立了从VIP到后端服务器的转发。

验证转发效果

首先使用curl来测试是否能够正常访问nginx服务。

$ curl http://172.17.8.201
DOCTYPE html>


</span><span class="typ" style="color:rgb(166,226,46);">Welcome</span><span class="pln" style="color:rgb(102,217,239);"> to nginx</span><span class="pun" style="color:rgb(248,248,242);">!</</span><span class="pln" style="color:rgb(102,217,239);">title</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="str" style="color:rgb(230,219,116);"><style></span><span class="pln" style="color:rgb(102,217,239);">
    body </span><span class="pun" style="color:rgb(248,248,242);">{</span><span class="pln" style="color:rgb(102,217,239);">
        width</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">35em</span><span class="pun" style="color:rgb(248,248,242);">;</span><span class="pln" style="color:rgb(102,217,239);">
        margin</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="kwd" style="color:rgb(249,38,89);">auto</span><span class="pun" style="color:rgb(248,248,242);">;</span><span class="pln" style="color:rgb(102,217,239);">
        font</span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">family</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Tahoma</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Verdana</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Arial</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> sans</span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">serif</span><span class="pun" style="color:rgb(248,248,242);">;</span><span class="pln" style="color:rgb(102,217,239);">
    </span><span class="pun" style="color:rgb(248,248,242);">}</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="str" style="color:rgb(230,219,116);">/style>
</</span><span class="pln" style="color:rgb(102,217,239);">head</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="str" style="color:rgb(230,219,116);"><body></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="str" style="color:rgb(230,219,116);"><h1></span><span class="typ" style="color:rgb(166,226,46);">Welcome</span><span class="pln" style="color:rgb(102,217,239);"> to nginx</span><span class="pun" style="color:rgb(248,248,242);">!</</span><span class="pln" style="color:rgb(102,217,239);">h1</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="str" style="color:rgb(230,219,116);"><p></span><span class="typ" style="color:rgb(166,226,46);">If</span><span class="pln" style="color:rgb(102,217,239);"> you see </span><span class="kwd" style="color:rgb(249,38,89);">this</span><span class="pln" style="color:rgb(102,217,239);"> page</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> the nginx web server </span><span class="kwd" style="color:rgb(249,38,89);">is</span><span class="pln" style="color:rgb(102,217,239);"> successfully installed </span><span class="kwd" style="color:rgb(249,38,89);">and</span><span class="pln" style="color:rgb(102,217,239);">
working</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Further</span><span class="pln" style="color:rgb(102,217,239);"> configuration </span><span class="kwd" style="color:rgb(249,38,89);">is</span><span class="pln" style="color:rgb(102,217,239);"> required</span><span class="pun" style="color:rgb(248,248,242);">.</</span><span class="pln" style="color:rgb(102,217,239);">p</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">

</span><span class="str" style="color:rgb(230,219,116);"><p></span><span class="typ" style="color:rgb(166,226,46);">For</span><span class="pln" style="color:rgb(102,217,239);"> online documentation </span><span class="kwd" style="color:rgb(249,38,89);">and</span><span class="pln" style="color:rgb(102,217,239);"> support please refer to
</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="pln" style="color:rgb(102,217,239);">a href</span><span class="pun" style="color:rgb(248,248,242);">=</span><span class="str" style="color:rgb(230,219,116);">"http://nginx.org/"</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">nginx</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">org</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="str" style="color:rgb(230,219,116);">/a>.<br/</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="typ" style="color:rgb(166,226,46);">Commercial</span><span class="pln" style="color:rgb(102,217,239);"> support </span><span class="kwd" style="color:rgb(249,38,89);">is</span><span class="pln" style="color:rgb(102,217,239);"> available at
</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="pln" style="color:rgb(102,217,239);">a href</span><span class="pun" style="color:rgb(248,248,242);">=</span><span class="str" style="color:rgb(230,219,116);">"http://nginx.com/"</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">nginx</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">com</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="str" style="color:rgb(230,219,116);">/a>.</</span><span class="pln" style="color:rgb(102,217,239);">p</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">

</span><span class="str" style="color:rgb(230,219,116);"><p><em></span><span class="typ" style="color:rgb(166,226,46);">Thank</span><span class="pln" style="color:rgb(102,217,239);"> you </span><span class="kwd" style="color:rgb(249,38,89);">for</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="kwd" style="color:rgb(249,38,89);">using</span><span class="pln" style="color:rgb(102,217,239);"> nginx</span><span class="pun" style="color:rgb(248,248,242);">.</</span><span class="pln" style="color:rgb(102,217,239);">em</span><span class="pun" style="color:rgb(248,248,242);">></</span><span class="pln" style="color:rgb(102,217,239);">p</span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="pun" style="color:rgb(248,248,242);"><</span><span class="str" style="color:rgb(230,219,116);">/body>
</</span><span class="pln" style="color:rgb(102,217,239);">html</span><span class="pun" style="color:rgb(248,248,242);">></span></pre> 
  </div> 
  <p style="text-indent:30px;"> 接下来在<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.11</code>上抓包来确认IPVS的工作情况。</p> 
  <div class="highlight"> 
   <pre class="prettyprint" style="overflow:auto;font-family:'courier new';font-size:12px;line-height:20px;color:rgb(248,248,212);background:rgb(39,40,34);border:none;"><span class="pln" style="color:rgb(102,217,239);">$ sudo tcpdump </span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">i any port </span><span class="lit" style="color:rgb(174,129,255);">80</span><span class="pln" style="color:rgb(102,217,239);">
tcpdump</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> verbose output suppressed</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="kwd" style="color:rgb(249,38,89);">use</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">v </span><span class="kwd" style="color:rgb(249,38,89);">or</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">vv </span><span class="kwd" style="color:rgb(249,38,89);">for</span><span class="pln" style="color:rgb(102,217,239);"> full protocol decode
listening on any</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> link</span><span class="pun" style="color:rgb(248,248,242);">-</span><span class="pln" style="color:rgb(102,217,239);">type LINUX_SLL </span><span class="pun" style="color:rgb(248,248,242);">(</span><span class="typ" style="color:rgb(166,226,46);">Linux</span><span class="pln" style="color:rgb(102,217,239);"> cooked</span><span class="pun" style="color:rgb(248,248,242);">),</span><span class="pln" style="color:rgb(102,217,239);"> capture size </span><span class="lit" style="color:rgb(174,129,255);">262144</span><span class="pln" style="color:rgb(102,217,239);"> bytes
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.503858</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.201</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">2747628840</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">65535</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">5</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">eol</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504241</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.3</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">2747628840</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">65535</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">5</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">eol</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504498</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.3</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">2747628840</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">65535</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">5</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">eol</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504827</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.3</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">.],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">3762638044</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> ack </span><span class="lit" style="color:rgb(174,129,255);">2747628841</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">28960</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">153786592</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">7</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504827</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">10.2</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">0.3</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">.],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">3762638044</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> ack </span><span class="lit" style="color:rgb(174,129,255);">2747628841</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">28960</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">153786592</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">7</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.504888</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.201</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">S</span><span class="pun" style="color:rgb(248,248,242);">.],</span><span class="pln" style="color:rgb(102,217,239);"> seq </span><span class="lit" style="color:rgb(174,129,255);">3762638044</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> ack </span><span class="lit" style="color:rgb(174,129,255);">2747628841</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">28960</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">mss </span><span class="lit" style="color:rgb(174,129,255);">1460</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">sackOK</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">153786592</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">1332071005</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">wscale </span><span class="lit" style="color:rgb(174,129,255);">7</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span><span class="pln" style="color:rgb(102,217,239);">
</span><span class="lit" style="color:rgb(174,129,255);">04</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">09</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="lit" style="color:rgb(174,129,255);">07.505599</span><span class="pln" style="color:rgb(102,217,239);"> IP </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.1</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">51921</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">></span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="lit" style="color:rgb(174,129,255);">172.17</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="lit" style="color:rgb(174,129,255);">8.201</span><span class="pun" style="color:rgb(248,248,242);">.</span><span class="pln" style="color:rgb(102,217,239);">http</span><span class="pun" style="color:rgb(248,248,242);">:</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="typ" style="color:rgb(166,226,46);">Flags</span><span class="pln" style="color:rgb(102,217,239);"> </span><span class="pun" style="color:rgb(248,248,242);">[.],</span><span class="pln" style="color:rgb(102,217,239);"> ack </span><span class="lit" style="color:rgb(174,129,255);">1</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> win </span><span class="lit" style="color:rgb(174,129,255);">4117</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);"> options </span><span class="pun" style="color:rgb(248,248,242);">[</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">nop</span><span class="pun" style="color:rgb(248,248,242);">,</span><span class="pln" style="color:rgb(102,217,239);">TS val </span><span class="lit" style="color:rgb(174,129,255);">1332071007</span><span class="pln" style="color:rgb(102,217,239);"> ecr </span><span class="lit" style="color:rgb(174,129,255);">153786592</span><span class="pun" style="color:rgb(248,248,242);">],</span><span class="pln" style="color:rgb(102,217,239);"> length </span><span class="lit" style="color:rgb(174,129,255);">0</span></pre> 
  </div> 
  <p style="text-indent:30px;"> 可以看到,由客户端<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.1</code>发送给<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.201</code>的封包,经过IPVS的中转发送给了<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.11</code>这台服务器, 并经过NAT后发送给了<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">10.2.0.3</code>这个Pod。返回的封包不经过IPVS服务器直接从<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.11</code>发送给了<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.1</code>。 说明IPVS的DR模式工作正常。重复多次测试可以看到流量分别从<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.11</code>和<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">172.17.8.12</code>进入,再分发给不同的Pod, 说明负载均衡工作正常。</p> 
  <p style="text-indent:30px;"> 与传统的IPVS DR模式配置不同的是,我们并未在承接流量的服务器上执行绑定VIP,再关闭ARP的操作。 那是因为对VIP的处理直接发生在iptables上,我们无需在服务器上运行程序来承接流量,iptables会将流量转发到对应的Pod上。</p> 
  <p style="text-indent:30px;"> 使用这种方法来承接流量,仅需要配置<code style="font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:13.5px;color:rgb(199,37,78);">externalIPs</code>为VIP即可,无需对服务器做任何特殊的设置,使用起来相当方便。</p> 
  <h2 id="总结" style="font-family:inherit;line-height:1.1;font-size:18px;border-bottom:1px solid rgb(234,234,234);"> 总结</h2> 
  <p style="text-indent:30px;"> 在本文中演示了使用IPVS配合externalIPs实现将外部流量导入到Kubernetes集群中,并实现负载均衡的方法。 希望可以帮助大家理解IPVS和externalIPs的工作原理,以便在恰当的场景下合理使用这两项技术解决问题。 实际部署时,还需要考虑后台服务器可用性检查,IPVS节点主从备份,水平扩展等问题。在这里就不详细介绍了。</p> 
  <p style="text-indent:30px;"> 在Kubernetes中还有许多与externalIPs类似的非常用功能,有些甚至是使用Annotation来进行配置,将来有机会再进一步分享。</p> 
  <p style="text-indent:30px;"> 最后插播下广告,为了实现私有环境下的Kubernetes集群自动化部署和运维,我们为Archon系统增加了PXE管理物理机的支持, 相应的配置案例在这里。如果使用过程中有任何问题,欢迎跟我们联系。</p> 
  <p style="text-indent:30px;"> 原文:使用IPVS实现Kubernetes入口流量负载均衡</p> 
  <div> 
   <br> 
  </div> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1188508656078004224"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(kubernetes)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1950192091439099904.htm"
                           title="K8S 常用命令全解析:高效管理容器化集群" target="_blank">K8S 常用命令全解析:高效管理容器化集群</a>
                        <span class="text-muted">恩爸编程</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/k8s%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">k8s常用命令</a><a class="tag" taget="_blank" href="/search/k8s%E6%9C%89%E5%93%AA%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">k8s有哪些常用命令</a><a class="tag" taget="_blank" href="/search/k8s%E5%91%BD%E4%BB%A4%E6%9C%89%E5%93%AA%E4%BA%9B/1.htm">k8s命令有哪些</a><a class="tag" taget="_blank" href="/search/K8S%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%9C%89%E5%93%AA%E4%BA%9B/1.htm">K8S常用命令有哪些</a>
                        <div>K8S常用命令全解析:高效管理容器化集群一、引言Kubernetes(K8S)作为强大的容器编排平台,其丰富的命令行工具(kubectl)为用户提供了便捷的方式来管理集群中的各种资源。熟练掌握K8S常用命令对于开发人员和运维人员至关重要,能够有效提高容器化应用的部署、监控与维护效率。本文将详细介绍一些K8S常用命令及其使用案例。二、基础资源操作命令(一)kubectlcreate功能:用于创建K8</div>
                    </li>
                    <li><a href="/article/1950131321980383232.htm"
                           title="深入了解 Kubernetes(k8s):从概念到实践" target="_blank">深入了解 Kubernetes(k8s):从概念到实践</a>
                        <span class="text-muted"></span>

                        <div>目录一、k8s核心概念二、k8s的优势三、k8s架构组件控制平面组件节点组件四、k8s+docker运行前后端分离项目的例子1.准备前端项目2.准备后端项目3.创建k8s部署配置文件4.部署应用到k8s集群在当今云计算和容器化技术飞速发展的时代,Kubernetes(简称k8s)已成为容器编排领域的事实标准。无论是互联网巨头、传统企业还是初创公司,都在广泛采用k8s来管理和部署容器化应用。本文将带</div>
                    </li>
                    <li><a href="/article/1950065015335743488.htm"
                           title="Coze开源实战指南:构建企业级AI应用的全链路技术解析(含Kubernetes+服务网格深度实践)" target="_blank">Coze开源实战指南:构建企业级AI应用的全链路技术解析(含Kubernetes+服务网格深度实践)</a>
                        <span class="text-muted"></span>

                        <div>一、Coze技术架构深度解析1.1核心组件与五层异构架构Coze采用五层异构架构(感知层→执行层→决策层→监控层→进化层),实现亚毫秒级实时响应与动态弹性扩展。其核心模块包括:架构亮点支持横向扩展的微服务集群基于Kubernetes的自动扩缩容机制服务网格(Istio)实现流量治理核心组件对比表组件功能特性典型性能指标CozeStudio30+节点类型/多模式编排响应速度提升300%CozeLoo</div>
                    </li>
                    <li><a href="/article/1949908035187044352.htm"
                           title="kubeadm部署安装K8S集群及核心概念-02" target="_blank">kubeadm部署安装K8S集群及核心概念-02</a>
                        <span class="text-muted"></span>

                        <div>Kubernetes组件介绍KubernetesCluster由Master和Node组成,节点上运行着若干Kubernetes服务。Master节点Master是KubernetesCluster的大脑,运行着如下Daemon服务:kube-apiserver、kube-scheduler、kube-controller-manager、etcd和Pod网络(例如flannel)。APIServ</div>
                    </li>
                    <li><a href="/article/1949907403294175232.htm"
                           title="Kubeadm 快速搭建 k8s 集群&&安装可视化管理界面" target="_blank">Kubeadm 快速搭建 k8s 集群&&安装可视化管理界面</a>
                        <span class="text-muted">头发莫的了呀</span>
<a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>文章目录1.实验准备2.安装docker3.配置阿里云K8Srepo源(三个节点)4.安装kubeadm,kubelet,kubectl(三个节点)5.部署kubernetesMaster节点(master节点上执行)6.k8s-node节点加入master节点(两个node执行)7.安装Pod网络插件(CNI插件,master节点)8.master节点安装可视化管理界面dashboard1.实验</div>
                    </li>
                    <li><a href="/article/1949900466318012416.htm"
                           title="初始化 K8s 主节点时 报错failed to pull image registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.17" target="_blank">初始化 K8s 主节点时 报错failed to pull image registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.17</a>
                        <span class="text-muted">Ashmcracker</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>运行r如下命令初始化kubernetes的master节点2025年3月12日更新:阿里云的镜像仓库目前只给它自己云上的服务器使用了,建议更换华为云的镜像加速器https://support.huaweicloud.com/usermanual-swr/swr_01_0045.htmlkubeadminit\--kubernetes-version=v1.23.17\--image-reposit</div>
                    </li>
                    <li><a href="/article/1949815341693595648.htm"
                           title="零信任架构落地:Java + SPIFFE 微服务身份联邦体系" target="_blank">零信任架构落地:Java + SPIFFE 微服务身份联邦体系</a>
                        <span class="text-muted">司铭鸿</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1.htm">线性代数</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>“信任是最昂贵的漏洞。”——2017年Equifax数据泄露后安全专家总结开篇:当城堡护城河干涸时2019年,某跨国金融集团遭遇“服务间信任链断裂”攻击。攻击者利用Kubernetes服务账户令牌泄露,伪装成合法服务横向渗透,窃取核心交易数据。其传统边界防火墙与VPN如同中世纪的护城河,对内部流量毫无防御能力。这场灾难性事件点燃了他们落地零信任架构(ZeroTrustArchitecture,ZT</div>
                    </li>
                    <li><a href="/article/1949785973357342720.htm"
                           title="在阿里云服务器上搭建单节点Kubernetes集群的完整指南与故障排除" target="_blank">在阿里云服务器上搭建单节点Kubernetes集群的完整指南与故障排除</a>
                        <span class="text-muted">老牛十八岁SYZ</span>
<a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>在阿里云服务器上搭建单节点Kubernetes集群的完整指南与故障排除在云计算和容器化技术日益普及的今天,Kubernetes(简称K8s)已成为容器编排的事实标准。本文将以阿里云服务器(AlibabaCloudLinux)为例,详细介绍如何搭建单节点Kubernetes集群,并针对实际操作中可能遇到的典型问题提供系统性解决方案。【阿里云限时特惠】云产品低至38元/年起!各位技术伙伴,阿里云爆款钜</div>
                    </li>
                    <li><a href="/article/1949651062357028864.htm"
                           title="k8s 的基本原理、架构图、使用步骤和注意事项" target="_blank">k8s 的基本原理、架构图、使用步骤和注意事项</a>
                        <span class="text-muted"></span>

                        <div>Kubernetes(k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。以下是其基本原理、使用步骤和注意事项的总结:一、k8s基本原理核心架构Master节点:控制集群的核心组件,包括:APIServer:所有操作的入口,提供RESTfulAPI。Scheduler:将Pod分配到合适的Node。ControllerManager:维护集群状态(如副本数、故障检测)。etcd</div>
                    </li>
                    <li><a href="/article/1949650935991037952.htm"
                           title="1、kubernetes 1.5.2原理以及集群HA部署" target="_blank">1、kubernetes 1.5.2原理以及集群HA部署</a>
                        <span class="text-muted">yongbang_yan</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>Kubernetes是什么?1.是一个全新的基于容器技术的分布式架构,是谷歌的Borg技术的一个开源版本Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,基于容器技术,目的是实现资源管理的自动化,垮多个数据中心的资源利用率的最大化2.Kubernetes是一个开放的平台。不局限于任何一种语言,没有限定任何编程接口。3.Kubernetes是一个完备的分布式系统支持平台。Kubernete</div>
                    </li>
                    <li><a href="/article/1949649045467230208.htm"
                           title="28、深入了解Kubernetes对象与EKS集群部署" target="_blank">28、深入了解Kubernetes对象与EKS集群部署</a>
                        <span class="text-muted">week9</span>
<a class="tag" taget="_blank" href="/search/AWS%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%AE%9E%E6%88%98%EF%BC%9A%E4%BB%8E%E7%90%86%E8%AE%BA%E5%88%B0%E5%AE%9E%E8%B7%B5/1.htm">AWS微服务实战:从理论到实践</a><a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/EKS/1.htm">EKS</a><a class="tag" taget="_blank" href="/search/Ingress/1.htm">Ingress</a>
                        <div>深入了解Kubernetes对象与EKS集群部署1.Kubernetes对象概述Kubernetes中有多种重要对象,它们在集群的运行和管理中发挥着关键作用。-Ingress:Ingress是一个KubernetesAPI对象,用于管理集群中服务的外部HTTP/HTTPS流量。它通过Ingress配置中定义的规则,将集群外部的流量路由暴露给服务。Deployment用于创建Pod,ReplicaS</div>
                    </li>
                    <li><a href="/article/1949641856052686848.htm"
                           title="2、Kubernetes:架构、优势与部署方案解析" target="_blank">2、Kubernetes:架构、优势与部署方案解析</a>
                        <span class="text-muted">coffee</span>
<a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BC%98%E5%8A%BF/1.htm">优势</a>
                        <div>Kubernetes:架构、优势与部署方案解析1.Kubernetes基础概念工作负载平面(WorkloadPlane)有时也被称为数据平面(DataPlane),但这种说法容易让人混淆,因为该平面承载的是应用程序而非数据。这里的“平面”可以理解为应用程序运行的“表面”。非生产集群可以使用单个主节点,而高可用集群则至少需要三个物理主节点来承载控制平面(ControlPlane)。工作节点的数量取决</div>
                    </li>
                    <li><a href="/article/1949618155378765824.htm"
                           title="K8s 集群成本优化实战:基于 Spot 实例与模型量化的" target="_blank">K8s 集群成本优化实战:基于 Spot 实例与模型量化的</a>
                        <span class="text-muted">女码农的重启</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>在Kubernetes集群运维中,成本控制与服务稳定性往往存在博弈——根据CNCF2024年报告,超过67%的企业K8s集群资源利用率低于50%,年浪费成本平均达12万美元。对于中小团队而言,通过技术手段降低运行成本更是生存刚需。本文聚焦两类核心优化手段:Spot实例的弹性调度与模型量化的资源压缩,结合生产环境实测数据,提供可落地的K8s成本优化方案,包含完整的配置模板与量化指标对比。一、Spot</div>
                    </li>
                    <li><a href="/article/1949608572350427136.htm"
                           title="Kubernetes 核心组件解析" target="_blank">Kubernetes 核心组件解析</a>
                        <span class="text-muted">算法小生Đ</span>
<a class="tag" taget="_blank" href="/search/%E7%B2%BE%E9%80%89%E5%AE%9E%E8%B7%B5/1.htm">精选实践</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>Kubernetes(K8S)的组件组成可以分为控制平面组件(ControlPlaneComponents)和节点组件(NodeComponents),以及一些附加组件。以下是详细的组成说明:1.控制平面组件(ControlPlaneComponents)控制平面负责管理集群的状态,通常运行在主节点(MasterNode)上,包含以下核心组件:APIServer(kube-apiserver)集群</div>
                    </li>
                    <li><a href="/article/1949563812122259456.htm"
                           title="PHP 8.0 云原生与前沿技术深度整合(1)" target="_blank">PHP 8.0 云原生与前沿技术深度整合(1)</a>
                        <span class="text-muted">jishujiaoliu1682</span>
<a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>PHP8.0云原生与前沿技术深度整合目录云原生PHP架构ServerlessPHP实践AI/ML集成方案区块链与PHP物联网(IoT)开发边缘计算部署未来技术展望云原生PHP架构KubernetesOperator设计phpclassPhpAppOperator{private$k8sClient;publicfunction__construct(K8sClient$client){$this-</div>
                    </li>
                    <li><a href="/article/1949395368475160576.htm"
                           title="关于cgroup 学习" target="_blank">关于cgroup 学习</a>
                        <span class="text-muted">序冢--磊</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>一、前言cgroup在K8S中有重要应用,K8S参考书籍:kubernetes权威指南第5版公司一个项目用linux的cgroup技术来限制进场cpu和内存使用,具有非常好的学习意义,所以业余写下笔记,来记录一下cgroup的使用cgroup可以绑定一组进程集合,他的内核接口暴露是通过linux伪文件系统来实现的,我们可以通过linux上一些特定的文件来限制进场cpu和内存的使用二、cgroup学</div>
                    </li>
                    <li><a href="/article/1949395369490182144.htm"
                           title="Linux 内核中 cgroup(控制组) 作用是什么?" target="_blank">Linux 内核中 cgroup(控制组) 作用是什么?</a>
                        <span class="text-muted"></span>

                        <div>cgroup(ControlGroups)是Linux内核提供的一种机制,用于对进程(或线程)组进行资源限制、优先级分配、统计监控和任务控制。通过将进程分组管理,可以实现对CPU、内存、磁盘I/O、网络等系统资源的精细化分配和隔离。它是现代容器技术(如Docker、Kubernetes)的底层核心组件之一。1.cgroup的核心目标资源限制:限制进程组使用的资源量(如CPU最大使用率、内存上限)。</div>
                    </li>
                    <li><a href="/article/1949320510164758528.htm"
                           title="498. 【kubernetes】好用的 kubectl 命令" target="_blank">498. 【kubernetes】好用的 kubectl 命令</a>
                        <span class="text-muted">七镜</span>

                        <div>将Pod的端口号映射到宿主机(通常用于测试)命令格式:kubectlport-forwardPOD[LOCAL_PORT:]REMOTE_PORT[...[LOCAL_PORT_N:]REMOTE_PORT_N][flags]将Pod的80端口映射到宿主机的8888端口,客户端即可通过http://:8888访问容器服务:[root@k8s0workspace_test]#kubectlport-</div>
                    </li>
                    <li><a href="/article/1949282382083321856.htm"
                           title="Java学习第六十三部分——K8s" target="_blank">Java学习第六十三部分——K8s</a>
                        <span class="text-muted"></span>

                        <div>目录一、关键概述二、定义起源三、核心特点️四、核心组件五、资源对象⚡六、应用场景七、Java与K8s️八、运维与监控九、总结与归纳一、关键概述Kubernetes(简称K8s,源自“K”与“s”之间的8个字母)是开源的容器编排平台,由Google团队基于其内部Borg系统设计理念开源,现已成为云原生应用管理的事实标准。Java与K8s的结合是云原生应用开发的核心实践,帮助Java开发者高效管理容器</div>
                    </li>
                    <li><a href="/article/1949230683268378624.htm"
                           title="Go语言从入门到精通" target="_blank">Go语言从入门到精通</a>
                        <span class="text-muted">qq_44601070</span>
<a class="tag" taget="_blank" href="/search/go%E8%AF%AD%E8%A8%80/1.htm">go语言</a><a class="tag" taget="_blank" href="/search/go%E8%AF%AD%E8%A8%80/1.htm">go语言</a>
                        <div>“Gowillbetheserverlanguageofthefuture.”—TobiasLütke,Shopify在过去几年,崛起了一门新的语言:Go或者GoLang。没有什么比一门新的编程语言更令开发者兴奋了,不是么?目前一些开源社区,纷纷采用Go语言开发了许多平台、框架等,如:Docker、Kubernetes等,甚至逐步从其它语言(如:C、Java等)转换到了Go,相信这一点你已经体会到</div>
                    </li>
                    <li><a href="/article/1949211135265796096.htm"
                           title="企业运维实践-如何在K8S集群环境Gitlab+Jenkins+Jmeter+Grafana技术中实现自动化分布压力测试数据展示..." target="_blank">企业运维实践-如何在K8S集群环境Gitlab+Jenkins+Jmeter+Grafana技术中实现自动化分布压力测试数据展示...</a>
                        <span class="text-muted">全栈工程师修炼指南</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E5%AE%9E%E8%B7%B5%E4%B8%93%E6%A0%8F/1.htm">运维实践专栏</a><a class="tag" taget="_blank" href="/search/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95/1.htm">压力测试</a><a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                        <div>关注「WeiyiGeek」公众号设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!本章目录:0x00前言简述0x01安装配置在Windows中安装Apachejmeter工具以二进制方式安装Helm部署工具以helm方式安装Grafana9.x在K8S集群中部署动态持久卷在K8S集群中部署压力测试演示站点1.基础环境2.依赖环境0x02Kubernetes+jmeter+Inf</div>
                    </li>
                    <li><a href="/article/1949197762411163648.htm"
                           title="k8s:利用kubectl部署nginx" target="_blank">k8s:利用kubectl部署nginx</a>
                        <span class="text-muted">云游</span>
<a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>本文介绍了在离线环境下基于HygonC86处理器和麒麟操作系统部署HTTPS服务的完整流程。首先通过CA签发服务器证书并创建KubernetesSecret存储证书密钥,然后配置Nginx服务(包含HTTP/HTTPS监听端口),接着创建PV/PVC存储和部署Nginx容器,最后通过NodePort服务暴露端口。关键步骤包括:1)使用ConfigMap管理Nginx配置;2)通过Secret挂载T</div>
                    </li>
                    <li><a href="/article/1949195368575070208.htm"
                           title="在K8S中,Deploy升级过程包括什么?" target="_blank">在K8S中,Deploy升级过程包括什么?</a>
                        <span class="text-muted">Dusk_橙子</span>
<a class="tag" taget="_blank" href="/search/K8S/1.htm">K8S</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>在kubernetes中,Deployment的升级过程主要包括以下几个步骤:1、更新Deployment配置:当需要对应程序进行升级时,通常会更新Deploymen的yaml配置文件,可以更新的内容包括但不限于:容器镜像版本(v1.0–升级–>v2.0)应用配置(环境变量、命令参数)资源请求与限制更新策略和其他元数据2、选择升级策略:默认情况,Deployment使用滚动升级(RollingUp</div>
                    </li>
                    <li><a href="/article/1949194108052500480.htm"
                           title="【Kubernetes】使用StatefulSet进行的资源调度,扩缩容,更改配置到版本回滚,三种配置更新方式" target="_blank">【Kubernetes】使用StatefulSet进行的资源调度,扩缩容,更改配置到版本回滚,三种配置更新方式</a>
                        <span class="text-muted"></span>

                        <div>StatefulSet实战进阶:从扩缩容到版本回滚的完整操作指南在Kubernetes中,StatefulSet的优势不仅在于稳定的身份标识,更在于其有序的更新和回滚机制。一、StatefulSet的扩缩容:有序增减实例和Deployment不同,StatefulSet的扩缩容有严格的顺序——扩容时从低序号到高序号创建,缩容时从高序号到低序号删除。这对分布式集群(如ZooKeeper)尤为重要,避</div>
                    </li>
                    <li><a href="/article/1949189944236896256.htm"
                           title="【 Kubernetes 集群】Service&Ingress 网络无法访问排障处理" target="_blank">【 Kubernetes 集群】Service&Ingress 网络无法访问排障处理</a>
                        <span class="text-muted">soso160</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                        <div>Service提供公网或内网服务无法访问提供公网服务或者内网服务的Service,如果出现无法访问或者CLB端口状态异常的情况,建议您进行如下检查:参考查看节点安全组配置检查集群中节点的安全组是否正确放通30000-32768端口区间。如果是公网服务,则进一步检查节点是否有公网带宽(仅针对传统账户类型)。如果Service的type为loadbalancer类型,可忽略CLB,直接检查NodeIP</div>
                    </li>
                    <li><a href="/article/1949189439867645952.htm"
                           title="k8s怎么找deploy历史版本?" target="_blank">k8s怎么找deploy历史版本?</a>
                        <span class="text-muted"></span>

                        <div>在Kubernetes中,可以通过以下步骤查找Deployment的历史版本:####查看Deployment的历史版本记录使用以下命令查看指定Deployment的历史版本列表:```bashkubectlrollouthistorydeployment/```示例:```bashkubectlrollouthistorydeployment/my-app```输出将显示版本的修订号(REVIS</div>
                    </li>
                    <li><a href="/article/1949051753324408832.htm"
                           title="【云原生篇】深入理解K8S CNI,CRI和 CSI" target="_blank">【云原生篇】深入理解K8S CNI,CRI和 CSI</a>
                        <span class="text-muted">IChen.</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>在Kubernetes(K8s)生态系统中,CNI,CRI和CSI是三个关键的接口,它们分别代表ContainerNetworkInterface,ContainerlRuntimeInterface和ContainerStorageInterface。这些接口定义了Kubernetes如何与网络、容器运行时和存储系统进行交互,使得Kubernetes能够与各种技术栈兼容,增加了其灵活性和可扩展性</div>
                    </li>
                    <li><a href="/article/1949041656204423168.htm"
                           title="云原生组网架构介绍" target="_blank">云原生组网架构介绍</a>
                        <span class="text-muted">大他者大战小客体</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>常用云服务介绍CCE:云容器引擎云容器引擎(CloudContainerEngine,简称CCE)是一个企业级的Kubernetes集群托管服务,支持容器化应用的全生命周期管理,为您提供高度可扩展的、高性能的云原生应用部署和管理方案。https://support.huaweicloud.com/productdesc-cce/cce_productdesc_0022.htmlAPIG:API网关</div>
                    </li>
                    <li><a href="/article/1949011027169439744.htm"
                           title="Docker+Kubernetes 实战:1 小时实现容器化" target="_blank">Docker+Kubernetes 实战:1 小时实现容器化</a>
                        <span class="text-muted">大力出奇迹985</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>在当今快速发展的技术领域,容器化部署已然成为众多开发者与企业的心头好。它就像一把神奇的钥匙,能够高效解决应用部署过程中的诸多难题。而Docker和Kubernetes,堪称容器化世界里的双子星。Docker凭借自身的独特魅力,让应用的打包与分发变得轻松简单,仿佛拥有了一键复制应用环境的超能力;Kubernetes则如同一位智慧的指挥官,有条不紊地管理着大规模容器,实现自动化部署、伸缩与调度。接下来</div>
                    </li>
                    <li><a href="/article/1948985688993099776.htm"
                           title="Kubernetes 网络插件 Calico 深度解析与实战:从原理到性能优化" target="_blank">Kubernetes 网络插件 Calico 深度解析与实战:从原理到性能优化</a>
                        <span class="text-muted">爱熬夜的小古</span>
<a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>在云原生生态中,Kubernetes作为容器编排的事实标准,其网络的高效配置与稳定运行至关重要。Calico作为Kubernetes主流网络插件之一,凭借高性能、强安全性和灵活的策略控制能力,受到众多企业青睐。本文将深入剖析Calico的技术原理、实战应用及性能优化策略,助你全面掌握这一关键技术。一、Calico网络架构核心原理1.1网络模型基础Calico基于纯三层IP网络模型构建,摒弃传统的O</div>
                    </li>
                                <li><a href="/article/66.htm"
                                       title="项目中 枚举与注解的结合使用" target="_blank">项目中 枚举与注解的结合使用</a>
                                    <span class="text-muted">飞翔的马甲</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a>
                                    <div>前言:版本兼容,一直是迭代开发头疼的事,最近新版本加上了支持新题型,如果新创建一份问卷包含了新题型,那旧版本客户端就不支持,如果新创建的问卷不包含新题型,那么新旧客户端都支持。这里面我们通过给问卷类型枚举增加自定义注解的方式完成。顺便巩固下枚举与注解。 
 
一、枚举 
1.在创建枚举类的时候,该类已继承java.lang.Enum类,所以自定义枚举类无法继承别的类,但可以实现接口。 
 
   </div>
                                </li>
                                <li><a href="/article/193.htm"
                                       title="【Scala十七】Scala核心十一:下划线_的用法" target="_blank">【Scala十七】Scala核心十一:下划线_的用法</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                                    <div>下划线_在Scala中广泛应用,_的基本含义是作为占位符使用。_在使用时是出问题非常多的地方,本文将不断完善_的使用场景以及所表达的含义 
  1. 在高阶函数中使用 
scala> val list = List(-3,8,7,9)
list: List[Int] = List(-3, 8, 7, 9)

scala> list.filter(_ > 7)
r</div>
                                </li>
                                <li><a href="/article/320.htm"
                                       title="web缓存基础:术语、http报头和缓存策略" target="_blank">web缓存基础:术语、http报头和缓存策略</a>
                                    <span class="text-muted">dalan_123</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a>
                                    <div>对于很多人来说,去访问某一个站点,若是该站点能够提供智能化的内容缓存来提高用户体验,那么最终该站点的访问者将络绎不绝。缓存或者对之前的请求临时存储,是http协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这是受控于对该内容所声明的缓存策略。接下来将讨web内容缓存策略的基本概念,具体包括如如何选择缓存策略以保证互联网范围内的缓存能够正确处理的您的内容,并谈论下</div>
                                </li>
                                <li><a href="/article/447.htm"
                                       title="crontab 问题" target="_blank">crontab 问题</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/crontab/1.htm">crontab</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a>
                                    <div>  
一:  0481-079   Reached   a   symbol   that   is   not   expected.   
   
背景:  
*/5   *   *   *   *  /usr/IBMIHS/rsync.sh  </div>
                                </li>
                                <li><a href="/article/574.htm"
                                       title="让tomcat支持2级域名共享session" target="_blank">让tomcat支持2级域名共享session</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/session/1.htm">session</a>
                                    <div>tomcat默认情况下是不支持2级域名共享session的,所有有些情况下登陆后从主域名跳转到子域名会发生链接session不相同的情况,但是只需修改几处配置就可以了。 
打开tomcat下conf下context.xml文件 
找到Context标签,修改为如下内容 
如果你的域名是www.test.com 
<Context sessionCookiePath="/path&q</div>
                                </li>
                                <li><a href="/article/701.htm"
                                       title="web报表工具FineReport常用函数的用法总结(数学和三角函数)" target="_blank">web报表工具FineReport常用函数的用法总结(数学和三角函数)</a>
                                    <span class="text-muted">老A不折腾</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a>
                                    <div>  
ABS 
ABS(number):返回指定数字的绝对值。绝对值是指没有正负符号的数值。 
Number:需要求出绝对值的任意实数。 
示例: 
ABS(-1.5)等于1.5。 
ABS(0)等于0。 
ABS(2.5)等于2.5。 
  
ACOS 
ACOS(number):返回指定数值的反余弦值。反余弦值为一个角度,返回角度以弧度形式表示。 
Number:需要返回角</div>
                                </li>
                                <li><a href="/article/828.htm"
                                       title="linux 启动java进程 sh文件" target="_blank">linux 启动java进程 sh文件</a>
                                    <span class="text-muted">墙头上一根草</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/jar/1.htm">jar</a>
                                    <div>#!/bin/bash
#初始化服务器的进程PId变量
user_pid=0;
robot_pid=0;
loadlort_pid=0;
gateway_pid=0;

#########
#检查相关服务器是否启动成功
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid </div>
                                </li>
                                <li><a href="/article/955.htm"
                                       title="我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory" target="_blank">我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Spring+3+%E7%B3%BB%E5%88%97/1.htm">Spring 3 系列</a>
                                    <div>如何使用ApplicationContext替换BeanFactory? 
 
package onlyfun.caterpillar.device;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import</div>
                                </li>
                                <li><a href="/article/1082.htm"
                                       title="Linux 内存使用方法详细解析" target="_blank">Linux 内存使用方法详细解析</a>
                                    <span class="text-muted">annan211</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98/1.htm">内存</a><a class="tag" taget="_blank" href="/search/Linux%E5%86%85%E5%AD%98%E8%A7%A3%E6%9E%90/1.htm">Linux内存解析</a>
                                    <div>来源 http://blog.jobbole.com/45748/ 
 
 

我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。

一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。

Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用</div>
                                </li>
                                <li><a href="/article/1209.htm"
                                       title="数据库的单表查询常用命令及使用方法(-)" target="_blank">数据库的单表查询常用命令及使用方法(-)</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E8%A1%A8%E6%9F%A5%E8%AF%A2/1.htm">单表查询</a>
                                    <div>  
  
创建数据库; 
      
--建表
create table bloguser(username varchar2(20),userage number(10),usersex char(2));

 
      创建bloguser表,里面有三个字段 
  
  
&nbs</div>
                                </li>
                                <li><a href="/article/1336.htm"
                                       title="多线程基础知识" target="_blank">多线程基础知识</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>一.进程和线程 
进程就是一个在内存中独立运行的程序,有自己的地址空间。如正在运行的写字板程序就是一个进程。 
“多任务”:指操作系统能同时运行多个进程(程序)。如WINDOWS系统可以同时运行写字板程序、画图程序、WORD、Eclipse等。 
线程:是进程内部单一的一个顺序控制流。 
线程和进程 
a.       每个进程都有独立的</div>
                                </li>
                                <li><a href="/article/1463.htm"
                                       title="fastjson简单使用实例" target="_blank">fastjson简单使用实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a>
                                    <div>一.简介 
        阿里巴巴fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库;包括“序列化”和“反序列化”两部分,它具备如下特征:     </div>
                                </li>
                                <li><a href="/article/1590.htm"
                                       title="【RPC框架Burlap】Spring集成Burlap" target="_blank">【RPC框架Burlap】Spring集成Burlap</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>Burlap和Hessian同属于codehaus的RPC调用框架,但是Burlap已经几年不更新,所以Spring在4.0里已经将Burlap的支持置为Deprecated,所以在选择RPC框架时,不应该考虑Burlap了。 
这篇文章还是记录下Burlap的用法吧,主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成 
 </div>
                                </li>
                                <li><a href="/article/1717.htm"
                                       title="【Mahout一】基于Mahout 命令参数含义" target="_blank">【Mahout一】基于Mahout 命令参数含义</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Mahout/1.htm">Mahout</a>
                                    <div>1. mahout seqdirectory 
  
    $ mahout seqdirectory 
        --input (-i) input               Path to job input directory(原始文本文件).
        --output (-o) output             The directory pathna</div>
                                </li>
                                <li><a href="/article/1844.htm"
                                       title="linux使用flock文件锁解决脚本重复执行问题" target="_blank">linux使用flock文件锁解决脚本重复执行问题</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/linux+lock%E3%80%80%E9%87%8D%E5%A4%8D%E6%89%A7%E8%A1%8C/1.htm">linux lock 重复执行</a>
                                    <div>linux的crontab命令,可以定时执行操作,最小周期是每分钟执行一次。关于crontab实现每秒执行可参考我之前的文章《linux crontab 实现每秒执行》现在有个问题,如果设定了任务每分钟执行一次,但有可能一分钟内任务并没有执行完成,这时系统会再执行任务。导致两个相同的任务在执行。 
例如:       
<?         
// 
test
.php      </div>
                                </li>
                                <li><a href="/article/1971.htm"
                                       title="java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字" target="_blank">java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class OcuppyMoreThanHalf {

	/**
	 * Q74 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
	 * two solutions:
	 * 1.O(n)
	 * see <beauty of coding>--每次删除两个不同的数字,不改变数组的特性
	 * 2.O(nlogn)
	 * 排序。中间</div>
                                </li>
                                <li><a href="/article/2098.htm"
                                       title="linux 系统相关命令" target="_blank">linux 系统相关命令</a>
                                    <span class="text-muted">candiio</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>系统参数 
cat /proc/cpuinfo  cpu相关参数 
cat /proc/meminfo 内存相关参数 
cat /proc/loadavg 负载情况 
性能参数 
1)top 
M:按内存使用排序 
P:按CPU占用排序 
1:显示各CPU的使用情况 
k:kill进程 
o:更多排序规则 
回车:刷新数据 
2)ulimit 
ulimit -a:显示本用户的系统限制参</div>
                                </li>
                                <li><a href="/article/2225.htm"
                                       title="[经营与资产]保持独立性和稳定性对于软件开发的重要意义" target="_blank">[经营与资产]保持独立性和稳定性对于软件开发的重要意义</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/1.htm">软件开发</a>
                                    <div> 
 
     一个软件的架构从诞生到成熟,中间要经过很多次的修正和改造 
 
      如果在这个过程中,外界的其它行业的资本不断的介入这种软件架构的升级过程中 
    
      那么软件开发者原有的设计思想和开发路线</div>
                                </li>
                                <li><a href="/article/2352.htm"
                                       title="在CentOS5.5上编译OpenJDK6" target="_blank">在CentOS5.5上编译OpenJDK6</a>
                                    <span class="text-muted">Cwind</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/OpenJDK/1.htm">OpenJDK</a>
                                    <div>几番周折终于在自己的CentOS5.5上编译成功了OpenJDK6,将编译过程和遇到的问题作一简要记录,备查。  
0. OpenJDK介绍 
OpenJDK是Sun(现Oracle)公司发布的基于GPL许可的Java平台的实现。其优点: 
1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;(代码上最主要的差异是</div>
                                </li>
                                <li><a href="/article/2479.htm"
                                       title="java乱码问题" target="_blank">java乱码问题</a>
                                    <span class="text-muted">dashuaifu</span>
<a class="tag" taget="_blank" href="/search/java%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98/1.htm">java乱码问题</a><a class="tag" taget="_blank" href="/search/js%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">js中文乱码</a>
                                    <div>swfupload上传文件参数值为中文传递到后台接收中文乱码               在js中用setPostParams({"tag" : encodeURI( document.getElementByIdx_x("filetag").value,"utf-8")}); 
然后在servlet中String t</div>
                                </li>
                                <li><a href="/article/2606.htm"
                                       title="cygwin很多命令显示command not found的解决办法" target="_blank">cygwin很多命令显示command not found的解决办法</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/cygwin/1.htm">cygwin</a>
                                    <div>cygwin很多命令显示command not found的解决办法 
  
修改cygwin.BAT文件如下 
@echo off 
D: 
set CYGWIN=tty notitle glob 
set PATH=%PATH%;d:\cygwin\bin;d:\cygwin\sbin;d:\cygwin\usr\bin;d:\cygwin\usr\sbin;d:\cygwin\us</div>
                                </li>
                                <li><a href="/article/2733.htm"
                                       title="[介绍]从 Yii 1.1 升级" target="_blank">[介绍]从 Yii 1.1 升级</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a>
                                    <div>2.0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,通过本指南你将会了解两个版本间主要的不同之处。 
如果你之前没有用过 Yii 1.1,可以跳过本章,直接从"入门篇"开始读起。 
请注意,Yii 2.0 引入了很多本章并没有涉及到的新功能。强烈建议你通读整部权威指南来了解所有新特性。这样有可能会发</div>
                                </li>
                                <li><a href="/article/2860.htm"
                                       title="Linux SSH免登录配置总结" target="_blank">Linux SSH免登录配置总结</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/ssh-keygen/1.htm">ssh-keygen</a><a class="tag" taget="_blank" href="/search/Linux+SSH%E5%85%8D%E7%99%BB%E5%BD%95%E8%AE%A4%E8%AF%81/1.htm">Linux SSH免登录认证</a><a class="tag" taget="_blank" href="/search/Linux+SSH%E4%BA%92%E4%BF%A1/1.htm">Linux SSH互信</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2187265 一、原理 
     我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上。 
     生成公钥与私钥有两种加密方式,第一种是</div>
                                </li>
                                <li><a href="/article/2987.htm"
                                       title="手势滑动销毁Activity" target="_blank">手势滑动销毁Activity</a>
                                    <span class="text-muted">gundumw100</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>老是效仿ios,做android的真悲催! 
有需求:需要手势滑动销毁一个Activity 
怎么办尼?自己写? 
不用~,网上先问一下百度。 
结果: 
http://blog.csdn.net/xiaanming/article/details/20934541 
 
 
首先将你需要的Activity继承SwipeBackActivity,它会在你的布局根目录新增一层SwipeBackLay</div>
                                </li>
                                <li><a href="/article/3114.htm"
                                       title="JavaScript变换表格边框颜色" target="_blank">JavaScript变换表格边框颜色</a>
                                    <span class="text-muted">ini</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                                    <div>效果查看:http://hovertree.com/texiao/js/2.htm代码如下,保存到HTML文件也可以查看效果: 
<html>
<head>
<meta charset="utf-8">
<title>表格边框变换颜色代码-何问起</title>
</head>
<body&</div>
                                </li>
                                <li><a href="/article/3241.htm"
                                       title="Kafka Rest : Confluent" target="_blank">Kafka Rest : Confluent</a>
                                    <span class="text-muted">kane_xie</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/confluent/1.htm">confluent</a>
                                    <div>最近拿到一个kafka rest的需求,但kafka暂时还没有提供rest api(应该是有在开发中,毕竟rest这么火),上网搜了一下,找到一个Confluent Platform,本文简单介绍一下安装。 
这里插一句,给大家推荐一个九尾搜索,原名叫谷粉SOSO,不想fanqiang谷歌的可以用这个。以前在外企用谷歌用习惯了,出来之后用度娘搜技术问题,那匹配度简直感人。 
 
 环境声明:Ubu</div>
                                </li>
                                <li><a href="/article/3368.htm"
                                       title="Calender不是单例" target="_blank">Calender不是单例</a>
                                    <span class="text-muted">men4661273</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/Calender/1.htm">Calender</a>
                                    <div>         在我们使用Calender的时候,使用过Calendar.getInstance()来获取一个日期类的对象,这种方式跟单例的获取方式一样,那么它到底是不是单例呢,如果是单例的话,一个对象修改内容之后,另外一个线程中的数据不久乱套了吗?从试验以及源码中可以得出,Calendar不是单例。 
测试: 
  Calendar c1 = </div>
                                </li>
                                <li><a href="/article/3495.htm"
                                       title="线程内存和主内存之间联系" target="_blank">线程内存和主内存之间联系</a>
                                    <span class="text-muted">qifeifei</span>
<a class="tag" taget="_blank" href="/search/java+thread/1.htm">java thread</a>
                                    <div>1, java多线程共享主内存中变量的时候,一共会经过几个阶段,    
  lock:将主内存中的变量锁定,为一个线程所独占。 
  unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。 
  read:将主内存中的变量值读到工作内存当中。 
  load:将read读取的值保存到工作内存中的变量副本中。 
  </div>
                                </li>
                                <li><a href="/article/3622.htm"
                                       title="schedule和scheduleAtFixedRate" target="_blank">schedule和scheduleAtFixedRate</a>
                                    <span class="text-muted">tangqi609567707</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/schedule/1.htm">schedule</a>
                                    <div>原文地址:http://blog.csdn.net/weidan1121/article/details/527307 
import java.util.Timer;import java.util.TimerTask;import java.util.Date; 
/** * @author vincent */public class TimerTest { 
 </div>
                                </li>
                                <li><a href="/article/3749.htm"
                                       title="erlang 部署" target="_blank">erlang 部署</a>
                                    <span class="text-muted">wudixiaotie</span>
<a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a>
                                    <div>1.如果在启动节点的时候报这个错 : 
{"init terminating in do_boot",{'cannot load',elf_format,get_files}} 
则需要在reltool.config中加入 
{app, hipe, [{incl_cond, exclude}]}, 
  
  
2.当generate时,遇到: 
ERROR</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>