<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[N0MANSKY'S BLOG]]></title><description><![CDATA[DONE IS BETTER THAN PERFECT]]></description><link>https://nomansky.top/</link><image><url>https://nomansky.top/favicon.png</url><title>N0MANSKY&apos;S BLOG</title><link>https://nomansky.top/</link></image><generator>Ghost 5.68</generator><lastBuildDate>Thu, 30 Apr 2026 07:18:17 GMT</lastBuildDate><atom:link href="https://nomansky.top/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[IETLS  Essay: Change, Tue 28 Mar]]></title><description><![CDATA[IETLS Essay]]></description><link>https://nomansky.top/ietls-essay-change-tue-28-mar/</link><guid isPermaLink="false">6425737249534000010381d4</guid><category><![CDATA[IETLS]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Thu, 30 Mar 2023 11:34:05 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p><strong>Some people think the Chinese government should stick to their zero-covid policy. However, others believe abandoning the lockdown is the best choice.<br>
Discuss both these views and give your own opinion.</strong></p>
<p>While many people are justifiably resistant to the idea of abandoning the zero-covid policy,  others believe that without lockdown is fundamental for recovering from the economic recession and emotional depression of people in the last three years. In my opinion, the zero-covid policy is not a sustainable way to solve the problem and should not continue after omicron becomes the main global pandemic.</p>
<p>Those who argue in favour of non-change point out that their vulnerable family members are in a safe environment when the lockdown continues,<br>
This is evident as children and seniors have weaker immune systems than young adults and are more susceptible to covid virus. The same fact applies when a person infects with the covid virus, which can lead to long-coivd, such as loss of smell sense, tiresome and fatigue. One further concern of this relates to the mortality rate. It will cause millions of deaths if China reopens, which referred to Hong Kong&apos;s mortality rate after it has reopened.</p>
<p>However, the lockdown is not a sustainable way to deal with covid virus. This fact is illustrated in China&apos;s economic growth. The  GDP data of Shanghai released by the China Bureau of Statistics shows shanghai had gone through a significant plummet in the first half year of 2022 because the whole city was in a three-month lockdown. It is more likely that the economy would not have suffered a vast strike if the government had implemented a more irrational policy. Furthermore, the lockdown caused enormous secondary disasters. One hospital refused to aid a nurse with asthma because she didn&apos;t take a nuclei test in 48 hours. Also, ambulances take long hours to respond due to roadblocks. This is also the case when it comes to other cities. Residents living in a compound in Chengdu were forbidden to go downstairs during an earthquake. By abandoning the lockdown and replacing it with a more rational procedure, the economy has a better chance of reviving and secondary disasters will diminish.</p>
<p>In conclusion, even though abandoning the zero-covid policy can be a catalyst for excess death, sticking to endless nuclei tests and keeping people at home should not be regarded as a long-term solution to address the problem, especially after so many unnecessary tragedies. The government should seek a sustainable method like opening the lockdown gradually and discreetly but not consistently ignoring people&apos;s voices.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Book Review of Memoirs of a Geisha]]></title><description><![CDATA[Book Review of Memoirs of a Geisha]]></description><link>https://nomansky.top/book-review-of-memoirs-of-a-geisha/</link><guid isPermaLink="false">63c5191236c31c00011a0718</guid><category><![CDATA[Essay]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Mon, 16 Jan 2023 09:31:10 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Recently I read Memoirs of a Geisha by Arthur Golden. I knew a movie filmed from the book that was the same name as the book, but I hadn&apos;t watched it before I finished the book because I didn&apos;t want to be spoiled by the movie. I read the book because I had searched the book recommendations for English B1 Level, and some websites recommended it. I finished the reading after I bought the book from Amazon about two months.</p>
<p>The book is about a little girl named Chiyo who was sold to an Okiya and eventually became a famous geisha. The story of the background started in the 1920s and ended in the 1950s, I think. It describes the lifestyle of geisha, the scenic Gion district in Kyoto and the crucial of world war 2.</p>
<p>After I read it, I thought it was a suitable book for the B1 level English learner. It has limited advanced vocabulary, and the sentence is easy to read because the author wrote this book in the first-person&apos;s perspective. Also, the culture of the book is relatable to me since the book&apos;s background is based on Japanese culture. Secondly, the author wrote this book from a view of a western. It is novel.</p>
<p>Furthermore, it vividly depicted Gion during that period of time, and I was fascinated by the geisha culture, so I watched the movie of Memoirs of a Geisha and some Japanese TV series, such as Cooking for the Maiko house. But I was somehow disappointed with the movie since I thought it didn&apos;t describe the whole story coherently, although the scenery of the movie was really breathtaking. Also, the illustration of wartime is unforgettable. Due to the war, food was a shortage, the geisha had to work in factories, and a lot of people died. I used to think the vicious of the war was mainly borne by China which was invaded, and Japan only bombed with two warheads. But the Japanese also in a really hard time during world war 2, especially in the late war.</p>
<p>However, the relationship between the chairman and Sayuri (the art name of Chiyo after she became an apprentice of geisha) confused me. I can understand Sayuri has an attachment to the chairman as she didn&apos;t have any connected one since her parents died and her sister was missing; also, she was abused by senior geisha Hatasumomo, and the only kind to her was from the chairman. But it&apos;s really weird to me that the chairman, who is a middle-aged man, has a feeling for Sayuri, who was a minor. This is not even the most confusing thing. The mizuage ceremony really makes people uncomfortable, and kind of lets geisha become a prostitute. Yet, we can&apos;t use the perspective of modern society to judge history. In the 1920s, it was hard for peasants to live and maybe becoming a geisha was the best way out for a girl from a lowly background.</p>
<p>On the whole, this book depicted a beautiful Kyoto and unveiled the mysterious life of geisha to laypeople. I recommend this book for the English learner on the B1 level and interested in Japanese culture. After reading this book, I learnt many vocabularies, and I think I may have improved my English reading skill.</p>
<p>Off-topics, since China has alleviated its covid lockdown policy, maybe it&apos;s a good choice to have a trip to Kyoto.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Dive into Kubernetes BGP Network, Part Three]]></title><description><![CDATA[Kubernetes BGP Network with Cilium]]></description><link>https://nomansky.top/dive-into-kubernetes-bgp-network-part-three/</link><guid isPermaLink="false">63be721f36c31c00011a0708</guid><category><![CDATA[Kubernetes]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Wed, 11 Jan 2023 08:25:51 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="0x00-introduction">0x00 Introduction</h1>
<p>In part two of this series, I wrote about deploying Cilium with BGP mode in the Kubernetes Cluster, which worked fine in the internal cluster. Today, I will write about how to make the cluster pod IP routable from the outside, such as the on-premises environment.</p>
<p>In this article, I will use a Linux virtual machine installed BIRD as a software router that runs as a BGP peer so that the on-premises and the cluster pod IP are routable.</p>
<h2 id="0x0000-the-environment">0x0000 The Environment</h2>
<p>Here is the environment information of the software router:</p>
<ul>
<li>System Distribution: <code>Ubuntu 22.04.1 LTS</code></li>
<li>IP Address: <code>192.168.56.10</code></li>
<li>BIRD version: <code>1.6.8</code></li>
<li>kube-router: <code>v1.5.3</code></li>
</ul>
<h1 id="0x01-deployment">0x01 Deployment</h1>
<h2 id="0x0101-configure-kube-router">0x0101 Configure Kube-router</h2>
<p>To use an external BGP peer, we have to change some configurations of kube-router. You can download the original YAML of kube-router from <a href="https://github.com/cloudnativelabs/kube-router/blob/v1.5.3/daemonset/generic-kuberouter-only-advertise-routes.yaml?ref=nomansky.top">https://github.com/cloudnativelabs/kube-router/blob/v1.5.3/daemonset/generic-kuberouter-only-advertise-routes.yaml</a> , and here is the snippet of the configurations which I modified.</p>
<pre><code class="language-bash">...
containers:
      - name: kube-router
        image: docker.io/cloudnativelabs/kube-router
        imagePullPolicy: Always
        args:
        - &quot;--run-router=true&quot;
        - &quot;--run-firewall=false&quot;
        - &quot;--run-service-proxy=false&quot;
        - &quot;--bgp-graceful-restart=true&quot;
        - &quot;--enable-cni=false&quot;
        - &quot;--enable-ibgp=true&quot;
        - &quot;--enable-overlay=false&quot;
        - &quot;--peer-router-ips=192.168.56.10&quot;
        - &quot;--peer-router-asns=65000&quot;
        - &quot;--cluster-asn=65001&quot;
        - &quot;--advertise-cluster-ip=true&quot;
        - &quot;--advertise-external-ip=true&quot;
        - &quot;--advertise-loadbalancer-ip=true&quot;
...
</code></pre>
<p>Some options need to be noticed if you will use external BGP. The peer-router-ips are the IP addresses of external BPGs. The peer-router-asns are ASN numbers of the BGP peer to which cluster nodes will advertise cluster IP and node&apos;s pod CIDR. The advertise-cluster-ip means add Cluster IP of the service to the RIB (<strong>Routing Information Base</strong> that contains the routing information maintained by that router) so that it gets advertises to the BGP peers. Now we apply the configuration.</p>
<h2 id="0x0102-deploy-external-bgp-peer">0x0102 Deploy External  BGP Peer</h2>
<p>Now we need to install an external BGP Peer on <code>192.168.56.10</code> .</p>
<pre><code class="language-bash">sudo apt -y install bird-bgp
</code></pre>
<p>Here is the configuration of BIRD.</p>
<pre><code class="language-bash">cat /etc/bird/bird.conf
protocol kernel {
	scan time 60;
	import none;
	export all;   # Actually insert routes into the kernel routing table
}

# The Device protocol is not a real routing protocol. It doesn&apos;t generate any
# routes and it only serves as a module for getting information about network
# interfaces from the kernel.
protocol device {
	scan time 60;

}

protocol bgp k8smaster0 {
	import all;
        local as 65000;
        neighbor 192.168.56.4 as 65001;
}

protocol bgp k8sslave0 {
	import all;
        local as 65000;
        neighbor 192.168.56.5 as 65001;
}
</code></pre>
<p>The above snippet means we receive the BGP propagations from Kubernetes nodes. The ASN  needs to match the ASN we configured in kube-router. After the <code>bird.conf</code> has been configured, we can use the following commands to start the BIRD process and check the routes:</p>
<pre><code class="language-bash">sysadmin@ubuntu:~$ sudo invoke-rc.d bird start

sysadmin@ubuntu:~$ sudo birdc show route
BIRD 1.6.8 ready.
10.98.28.103/32    via 192.168.56.4 on enp0s8 [k8smaster0 14:40:34] * (100) [AS65001i]
                   via 192.168.56.5 on enp0s8 [k8sslave0 14:40:33] (100) [AS65001i]
10.96.229.67/32    via 192.168.56.4 on enp0s8 [k8smaster0 14:40:34] * (100) [AS65001i]
                   via 192.168.56.5 on enp0s8 [k8sslave0 14:40:33] (100) [AS65001i]
10.96.0.1/32       via 192.168.56.4 on enp0s8 [k8smaster0 14:40:34] * (100) [AS65001i]
                   via 192.168.56.5 on enp0s8 [k8sslave0 14:40:33] (100) [AS65001i]
10.96.0.10/32      via 192.168.56.4 on enp0s8 [k8smaster0 14:40:34] * (100) [AS65001i]
                   via 192.168.56.5 on enp0s8 [k8sslave0 14:40:33] (100) [AS65001i]
10.112.0.0/24      via 192.168.56.4 on enp0s8 [k8smaster0 14:40:34] * (100) [AS65001i]
10.112.1.0/24      via 192.168.56.5 on enp0s8 [k8sslave0 14:40:33] * (100) [AS65001i]
</code></pre>
<p>The result shows the cluster service IP and Cluster pod IP have been propagated to the external BGP peer. Now we can access the pod IP from <code>192.168.56.10</code> directly.</p>
<pre><code class="language-bash">## Get the Nginx Pod IP 
root@k8smaster0:~/kube-router# kubectl get pods -A -l app=nginx -o wide
NAMESPACE   NAME                                READY   STATUS    RESTARTS      AGE   IP             NODE        NOMINATED NODE   READINESS GATES
default     nginx-deployment-7fb96c846b-7jhtt   1/1     Running   2 (67m ago)   47h   10.112.1.194   k8sslave0   &lt;none&gt;           &lt;none&gt;
default     nginx-deployment-7fb96c846b-lqpgf   1/1     Running   2 (67m ago)   47h   10.112.1.90    k8sslave0   &lt;none&gt;           &lt;none&gt;

## Curl from 192.168.56.10
sysadmin@ubuntu:~$ curl -I 10.112.1.194
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Wed, 11 Jan 2023 06:49:32 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
Connection: keep-alive
ETag: &quot;5c0692e1-264&quot;
Accept-Ranges: bytes
</code></pre>
<p>Then we tried to access the cluster service IP.</p>
<pre><code class="language-bash">## Get service IP of nginx
root@k8smaster0:~/kube-router# kubectl get service -A -l app=nginx -o wide
NAMESPACE   NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
default     nginx   ClusterIP   10.96.229.67   &lt;none&gt;        80/TCP    47h   app=nginx

## Curl from 192.168.56.10
sysadmin@ubuntu:~$ curl 10.96.229.67 -v
*   Trying 10.96.229.67:80...
</code></pre>
<p>But the result shows we still can&#x2019;t access cluster service IP directly. It&#x2019;s strange; let&apos;s check the monitor metrics of Cilium to see if or not the traffic from external BGP peer VM are normal.</p>
<pre><code class="language-bash">## Step 1. Find the Nginx service managed by which daemonset of Cilum

root@k8smaster0:~/kube-router# kubectl -n kube-system exec cilium-2xlxh -- cilium service list
Defaulted container &quot;cilium-agent&quot; out of: cilium-agent, mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init)
ID   Frontend           Service Type   Backend
1    10.96.229.67:80    ClusterIP      1 =&gt; 10.112.1.194:80 (active)
                                       2 =&gt; 10.112.1.90:80 (active)

## Step 2. Use Cilium daemonset located on the node of CIDR 10.112.1.0/24
## to check traffic

root@k8smaster0:~/kube-router# kubectl -n kube-system exec -ti cilium-hcr6r -- cilium monitor --type drop
Defaulted container &quot;cilium-agent&quot; out of: cilium-agent, mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init)
Listening for events on 4 CPUs with 64x4096 of shared memory
Press Ctrl-C to quit

## Step 3. Curl from 192.168.56.10

sysadmin@ubuntu:~$ curl 10.96.229.67 -v
*   Trying 10.96.229.67:80...

## Step 4. Check the stdout of cilium monitor and we can see the TCP packet has been dropped

root@k8smaster0:~/kube-router# kubectl -n kube-system exec -ti cilium-hcr6r -- cilium monitor --type drop
Defaulted container &quot;cilium-agent&quot; out of: cilium-agent, mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init)
Listening for events on 4 CPUs with 64x4096 of shared memory
Press Ctrl-C to quit
level=info msg=&quot;Initializing dissection cache...&quot; subsys=monitor
xx drop (Is a ClusterIP) flow 0x0 to endpoint 0, file bpf_host.c line 665, , identity world-&gt;unknown: 192.168.56.10:33802 -&gt; 10.112.1.90:80 tcp SYN
xx drop (Is a ClusterIP) flow 0x0 to endpoint 0, file bpf_host.c line 665, , identity world-&gt;unknown: 192.168.56.10:33802 -&gt; 10.112.1.90:80 tcp SYN
</code></pre>
<p>I read the official document, and it seems to be because of the option of bpf-lb-external-clusterip. The official document shows this option enables external access to ClusterIP services, and by default, it is false. Now we know why the curl failed, so we can modify it to true:</p>
<pre><code class="language-bash">root@k8smaster0:~/kube-router# cilium config view | grep -i bpf-lb-external-clusterip
bpf-lb-external-clusterip                      false

root@k8smaster0:~/kube-router# cilium config set bpf-lb-external-clusterip true
&#x2728; Patching ConfigMap cilium-config with bpf-lb-external-clusterip=true...
&#x267B;&#xFE0F;  Restarted Cilium pods

## curl from 192.168.56.10
sysadmin@ubuntu:~$ curl 10.96.229.67 -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Wed, 11 Jan 2023 07:26:35 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
Connection: keep-alive
ETag: &quot;5c0692e1-264&quot;
Accept-Ranges: bytes

</code></pre>
<p>Finally, we can access the cluster service from outside. We need to do the last step to test if external IP is routable from pods.</p>
<pre><code class="language-bash">## Create a busybox deployment 
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    command:
      - sleep
      - &quot;3600&quot;
    imagePullPolicy: IfNotPresent
  restartPolicy: Always

## Ping from pod of busybox
root@k8smaster0:~/app# kubectl exec -it busybox -- ping -c 3 192.168.56.10
PING 192.168.56.10 (192.168.56.10): 56 data bytes
64 bytes from 192.168.56.10: seq=0 ttl=62 time=3.074 ms
64 bytes from 192.168.56.10: seq=1 ttl=62 time=0.566 ms
64 bytes from 192.168.56.10: seq=2 ttl=62 time=0.927 ms

--- 192.168.56.10 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.566/1.522/3.074 ms
</code></pre>
<h1 id="0x02-summary">0x02 Summary</h1>
<p>By now, the Kubernetes cluster and external BGP router are routable from each other. You only need to configure some static routes on your local environment and external BGP router if you want the K8s cluster and the local environment to be routable to each other.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Dive into Kubernetes BGP Network, Part Two]]></title><description><![CDATA[Kubernetes with Cilium BGP]]></description><link>https://nomansky.top/dive-into-kubernetes-bgp-network-part-two/</link><guid isPermaLink="false">63bbcc2636c31c00011a06ce</guid><category><![CDATA[Kubernetes]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Mon, 09 Jan 2023 08:26:40 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="0x00-introduction">0x00 Introduction</h1>
<p>In my previous blog of this series, I wrote about how to prepare the environment for deploying Kubernetes with BGP Network. Today, I am going to write about the process of how I deployed.</p>
<h2 id="0x0000-the-environment">0x0000 The Environment</h2>
<p>Before We start, here are the tools and versions I used to deploy Kubernetes.</p>
<ul>
<li>kubeadm: v1.25.4</li>
<li>cilium: v1.12.2</li>
<li>helm: v3.10.2</li>
<li>kube-router: v1.5.3</li>
</ul>
<p>Here is my configuration for kubeadm, and I will explain the usage of the configurations I used.</p>
<pre><code class="language-bash">kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd        # Specify cgroup driver of kubelet,recommend systemd
---
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.56.4   # the address for apiserver listening
  bindPort: 6443
    #nodeRegistration:
    #  criSocket: unix:///var/run/containerd/containerd.sock
    #  imagePullPolicy: IfNotPresent
    #  name: k8smaster0
    #  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.k8s.io
kind: ClusterConfiguration
kubernetesVersion: 1.25.4
# Recommand to set up controlPlane if you want to add apiserver for HA,
# and the cluster-endpoint is to use for the DNS parsed to the apiservers.
controlPlaneEndpoint: &quot;cluster-endpoint:6443&quot;  
networking:
  dnsDomain: cluster.local
# Specify the service CIDR range
  serviceSubnet: 10.96.0.0/12
# Specify the pod CIDR range
  podSubnet: 10.112.0.0/12
scheduler: {}
</code></pre>
<p>Usually, We can start to deploy Kubernetes using kubeadm, but unfortunately, as a Chinese developer behind the GFW, there are some obstacle to pulling the images. So I wrote the scripts to pull images from the domestic image mirror sources, and the scripts will rename images to the name that kubeadm used.</p>
<p>After we install kubeadm, we can use <code>kubeadm config images list</code> to show the images require for kubeadm. Here is my command execution result:</p>
<pre><code class="language-bash">root@k8smaster0:~# kubeadm config images list
I1221 07:38:49.772660    1024 version.go:256] remote version is much newer: v1.26.0; falling back to: stable-1.25
registry.k8s.io/kube-apiserver:v1.25.5
registry.k8s.io/kube-controller-manager:v1.25.5
registry.k8s.io/kube-scheduler:v1.25.5
registry.k8s.io/kube-proxy:v1.25.5
registry.k8s.io/pause:3.8
registry.k8s.io/etcd:3.5.5-0
registry.k8s.io/coredns/coredns:v1.9.3
</code></pre>
<p>As you know, we have already installed containerd as Kubernetes runtime in the previous article. However, the usage of containerd is somewhat different from docker because containerd uses <code>ctr</code> as a command line tool, and also, containerd has a namespace concept. If we use <code>ctr</code> command without specifying namespaces, it will use the default namespace. However, the Kubernetes CRI use <code>k8s.io</code> namespace. So if we want to pre-pull images, we need to put them into the correct namespace; otherwise, Kubernetes can not find the resources. Here are my commands to pre-pull images:</p>
<pre><code class="language-bash">#Download the scripts for pulling images from China.
wget https://raw.githubusercontent.com/N0mansky/docker_wrapper/master/crt_wrapper.py
chmod +x crt_wrapper.py

# Pullings images to k8s.io namespace by using scripts
./crt_wrapper.py pull registry.k8s.io/xxxxxx

# After we have pulled the images, we can check by using the command
ctr -n k8s.io image ls -q

# Or we can use the crictl
root@k8sslave0:~# crictl image ls
IMAGE                                                         TAG                 IMAGE ID            SIZE
docker.io/cloudnativelabs/kube-router                         latest              a5e6dc4b76a3f       45MB
docker.io/library/busybox                                     1.28                8c811b4aec35f       728kB
docker.io/library/nginx                                       1.14.2              295c7be079025       44.7MB
quay.io/cilium/cilium                                         v1.12.2             743cf6b60787d       167MB
quay.io/cilium/cilium                                         v1.12.4             b7257a8403c50       167MB
quay.io/cilium/operator-generic                               v1.12.2             1f3c9d6876457       18.9MB
quay.io/cilium/operator-generic                               v1.12.4             ca5b3c9580cb3       18.9MB
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns   v1.9.3              5185b96f0becf       14.8MB
registry.k8s.io/coredns/coredns                               v1.9.3              5185b96f0becf       14.8MB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause     3.8                 4873874c08efc       311kB
registry.k8s.io/pause                                         3.8                 4873874c08efc       311kB
registry.k8s.io/kube-proxy                                    v1.25.4             2c2bc18642790       20.3MB
</code></pre>
<h1 id="0x01-deployment">0x01 Deployment</h1>
<h2 id="0x0100-create-cluster">0x0100 Create Cluster</h2>
<p>After all the pre-work has been done, it is time to create a cluster. First, I initiated the master with the command:</p>
<pre><code class="language-bash"># I specified to skip kube-proxy, because I will use cilium to replace it.
kubeadm init --config kubeadm-config.yml --skip-phases=addon/kube-proxy

# After the above command had finished, the following results were printed.
...
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run &quot;kubectl apply -f [podnetwork].yaml&quot; with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join cluster-endpoint:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:7337839717eb93c80bad2157ecbed814c389f8fa843c2d6b41e305e763751107 \
	--control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join cluster-endpoint:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:7337839717eb93c80bad2157ecbed814c389f8fa843c2d6b41e305e763751107
</code></pre>
<p>After the master node had initialized successfully, I used the following command to add a worker node:</p>
<pre><code class="language-bash"># Executing the join command on worker node
kubeadm join cluster-endpoint:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:7337839717eb93c80bad2157ecbed814c389f8fa843c2d6b41e305e763751107

# After the above command had finished, the following result were printed.
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run &apos;kubectl get nodes&apos; on the control-plane to see this node join the cluster.

# And the nodes all were in the ready status
root@k8smaster0:~# kubectl get nodes -A
NAME         STATUS   ROLES           AGE     VERSION
k8smaster0   Ready    control-plane   5m42s   v1.25.4
k8sslave0    Ready    &lt;none&gt;          66s     v1.25.4
</code></pre>
<p>Now we can use <code>kubectl get pods -A</code> to check the state of pods. We can see the result didn&#x2019;t show the pods of kube-proxy, and the Coredns are in ContainerCreating status. That is because we didn&#x2019;t install kube-proxy and a network add-on, and the Coredns containers need a pod network add-on for creation.</p>
<pre><code class="language-bash">root@k8smaster0:~# kubectl get pods -A
NAMESPACE     NAME                                 READY   STATUS              RESTARTS           AGE
kube-system   coredns-565d847f94-l7pz9             0/1     ContainerCreating   0                  18d
kube-system   coredns-565d847f94-pfxbj             0/1     ContainerCreating   0                  18d
kube-system   etcd-k8smaster0                      1/1     Running             1154 (5m50s ago)   18d
kube-system   kube-apiserver-k8smaster0            1/1     Running             1327 (5m50s ago)   18d
kube-system   kube-controller-manager-k8smaster0   1/1     Running             1125 (5m50s ago)   18d
kube-system   kube-scheduler-k8smaster0            1/1     Running             1186 (5m50s ago)   18d
</code></pre>
<h2 id="0x0101-install-cilium">0x0101 Install Cilium</h2>
<p>After we create the cluster, it is time to install the Network add-on. At this time, I am using cilium. There are many methods to install Cilium. I used helm to install it. Here is the command I used to install Cilium.</p>
<pre><code class="language-bash">root@k8smaster0:~# cat install_cilium.sh
API_SERVER_IP=192.168.56.4
# Kubeadm default is 6443
API_SERVER_PORT=6443
helm install cilium cilium/cilium --version 1.12.4 \
    --namespace kube-system \
    --set kubeProxyReplacement=strict \
    --set k8sServiceHost=${API_SERVER_IP} \
    --set k8sServicePort=${API_SERVER_PORT} \
    --set ipv4NativeRoutingCIDR=192.168.56.0/24 \
    --set tunnel=&quot;disabled&quot; \
    --set ipam.mode=kubernetes
</code></pre>
<p>Let me explain those options. The kubeProxyReplacement means we are using Cilium to replace the kube-proxy component. The tunnel and ipv4NativeRoutingCIDR indicate we are using Native Route mode instead of the overlay network and the ipam.mode means we delegate each node in the cluster to allocate IP addresses for the Pods.</p>
<p>The CoreDNS has been running since we installed Cilium.</p>
<pre><code class="language-bash">root@k8smaster0:~# kubectl get pods -A
NAMESPACE     NAME                                 READY   STATUS    RESTARTS           AGE
kube-system   cilium-2xlxh                         1/1     Running   0                  6m53s
kube-system   cilium-hcr6r                         1/1     Running   0                  6m53s
kube-system   cilium-operator-675567f547-8jz7l     1/1     Running   0                  6m53s
kube-system   cilium-operator-675567f547-l68zt     1/1     Running   0                  6m53s
kube-system   coredns-565d847f94-l7pz9             1/1     Running   0                  18d
kube-system   coredns-565d847f94-pfxbj             1/1     Running   0                  18d
kube-system   etcd-k8smaster0                      1/1     Running   1154 (4h19m ago)   18d
kube-system   kube-apiserver-k8smaster0            1/1     Running   1327 (4h19m ago)   18d
kube-system   kube-controller-manager-k8smaster0   1/1     Running   1125 (4h19m ago)   18d
kube-system   kube-scheduler-k8smaster0            1/1     Running   1186 (4h19m ago)   18d
</code></pre>
<h2 id="0x0102-install-kube-router">0x0102 Install kube-router</h2>
<p>At the moment, the setting up of the network still has some work to do. If we want to use BGP mode, we must install BGP Daemonset on each node for BPG peering and route propagation. There have many options, such as kube-router, BIRD and Cilium Native BGP. I chose kube-router instead of others because the kube-router is easy to use.</p>
<p>You can download the YAML file which I used  to install kube-router from here <a href="https://github.com/cloudnativelabs/kube-router/blob/v1.5.3/daemonset/generic-kuberouter-only-advertise-routes.yaml?ref=nomansky.top">https://github.com/cloudnativelabs/kube-router/blob/v1.5.3/daemonset/generic-kuberouter-only-advertise-routes.yaml</a> ,and I used following options:</p>
<pre><code class="language-bash">...
containers:
      - name: kube-router
        image: docker.io/cloudnativelabs/kube-router
        imagePullPolicy: Always
        args:
        - &quot;--run-router=true&quot;
        - &quot;--run-firewall=false&quot;
        - &quot;--run-service-proxy=false&quot;
        - &quot;--bgp-graceful-restart=true&quot;
        - &quot;--enable-cni=false&quot;
        - &quot;--enable-ibgp=true&quot;
        - &quot;--enable-overlay=false&quot;
        - &quot;--cluster-asn=65001&quot;
        - &quot;--advertise-cluster-ip=true&quot;
        - &quot;--advertise-external-ip=true&quot;
        - &quot;--advertise-loadbalancer-ip=true&quot;
...
</code></pre>
<p>Now, the internal cluster is already using BGP. We can create a Deployment and a service to test it.</p>
<pre><code class="language-bash">apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
</code></pre>
<p>Check the Nginx pods and services IP addresses by the following command. It indicated Cilium works fine.</p>
<pre><code class="language-bash">root@k8smaster0:~/app# kubectl get service nginx
NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
nginx   ClusterIP   10.96.229.67   &lt;none&gt;        80/TCP    12m
root@k8smaster0:~/app# kubectl get pods -o wide -l app=nginx
NAME                                READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
nginx-deployment-7fb96c846b-7jhtt   1/1     Running   0          12m   10.112.1.174   k8sslave0   &lt;none&gt;           &lt;none&gt;
nginx-deployment-7fb96c846b-lqpgf   1/1     Running   0          12m   10.112.1.125   k8sslave0   &lt;none&gt;           &lt;none&gt;
root@k8smaster0:~/app# curl 10.96.229.67
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Welcome to nginx!&lt;/title&gt;
&lt;style&gt;
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Welcome to nginx!&lt;/h1&gt;
&lt;p&gt;If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.&lt;/p&gt;

&lt;p&gt;For online documentation and support please refer to
&lt;a href=&quot;http://nginx.org/&quot;&gt;nginx.org&lt;/a&gt;.&lt;br/&gt;
Commercial support is available at
&lt;a href=&quot;http://nginx.com/&quot;&gt;nginx.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thank you for using nginx.&lt;/em&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>And we can use the Cilium command to get the services managed by Cilium.</p>
<pre><code class="language-bash">root@k8smaster0:~/app# kubectl get pods -A -l k8s-app=cilium
NAMESPACE     NAME           READY   STATUS    RESTARTS   AGE
kube-system   cilium-2xlxh   1/1     Running   0          60m
kube-system   cilium-hcr6r   1/1     Running   0          60m
root@k8smaster0:~/app# kubectl -n kube-system exec cilium-2xlxh -- cilium service list
Defaulted container &quot;cilium-agent&quot; out of: cilium-agent, mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init)
ID   Frontend           Service Type   Backend
1    10.96.0.1:443      ClusterIP      1 =&gt; 192.168.56.4:6443 (active)
2    10.96.0.10:53      ClusterIP      1 =&gt; 10.112.0.59:53 (active)
                                       2 =&gt; 10.112.0.84:53 (active)
3    10.96.0.10:9153    ClusterIP      1 =&gt; 10.112.0.59:9153 (active)
                                       2 =&gt; 10.112.0.84:9153 (active)
4    10.98.28.103:443   ClusterIP      1 =&gt; 192.168.56.4:4244 (active)
                                       2 =&gt; 192.168.56.5:4244 (active)
5    10.96.229.67:80    ClusterIP      1 =&gt; 10.112.1.125:80 (active)
                                       2 =&gt; 10.112.1.174:80 (active)
root@k8smaster0:~/app#
</code></pre>
<p>We can see the Nginx Cluster IP <code>10.96.229.67</code> is active.</p>
<p>By now, we have finished all the work, the internal cluster is using BPG to communicate with each other, but we still have some work to do to let the external can route to the cluster. I&#x2019;ll write it in my next blog.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Dive into Kubernetes BGP Network, Part One]]></title><description><![CDATA[Using Kubernetes with BGP]]></description><link>https://nomansky.top/dive-into-kubernetes-bgp-network-part-one/</link><guid isPermaLink="false">639ad2a6d9164c000108a53a</guid><category><![CDATA[Kubernetes]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Thu, 15 Dec 2022 07:54:59 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="0x00introduction">0x00 Introduction</h1>
<h2 id="0x0000background">0x0000 Background</h2>
<p>Recently, my company abandoned the local data centre and migrated all services to the k8s cluster in a public cloud provider. But after that, some problems emerged, and I was dealing with them. One of the problems is that we also migrated the development environment to the k8s cluster, but the developers of the R&amp;D team still need to access the development environment directly. Let me explain why.</p>
<p>We used a microservice model to design our app architecture. Because my colleague needed access to the other modules and middleware, such as Zookeeper, Kafka, etc., while debugging in IDE, so you may ask, why don&apos;t my colleagues access services in k8s via the ingress? Well, usually, it can solve the problem. But in this case, because our services used Nacos as the service discovery/registry centre and Apache Dubbo as the RPC Framework, the services invoke the other services directly by IP address and port, so it&apos;s hard to let modules communicate by k8s service or ingress.</p>
<p>After that, I first needed to get through the network between the on-premises and cloud VPC, and I used the IPsec VPN protocol to deal with that. That&apos;s written in another post. Ok, Now you may know the background of my work. Still, I wasn&apos;t going to implement this solution in the on-used environment&#x2014;the entire solution was deployed in an experimental environment because some work processes had to finish. Anyway, the result is not my point. The whole process is much more worthwhile.</p>
<h2 id="0x0001theexperimentalenvironment">0x0001 The Experimental Environment</h2>
<p>In the previous, I said I deployed this in an experimental environment, which I set up with some virtual machines in the VirtualBox. So I have to introduce my network structure and System in my environment.</p>
<p>Here&#x2019;s my IP assignment:</p>
<ul>
<li>k8s node CIDR: <code>192.168.56.0/24</code></li>
<li>k8s master0 IP: <code>192.168.56.4</code></li>
<li>k8s slave0 IP: <code>192.168.56.5</code></li>
<li>k8s cluster-IP CIDR: <code>10.96.0.0/12</code></li>
<li>k8s pod-IP CIDR: <code>10.112.0.0/12</code></li>
<li>On-Premises CIDR: <code>192.168.57.0/24</code></li>
</ul>
<p>Here&#x2019;s my OS Configuration:</p>
<ul>
<li>System Version: <code>Ubuntu 22.04.1 LTS</code></li>
<li>Linux Kernel Version: <code>5.15.0-56-generic</code></li>
</ul>
<p>Besides what I mentioned above, I also installed eBPF tools on my ubuntu. Here&#x2019;s the command I used for the installation.</p>
<pre><code class="language-bash">sudo apt-get install -y  make clang llvm libelf-dev libbpf-dev bpfcc-tools libbpfcc-dev linux-tools-$(uname -r) linux-headers-$(uname -r)

</code></pre>
<p>And I installed two NICs on each VM. One of the NICs was using a NAT network, and the other was using a Host-Only network, configuring IP within the k8s Nodes CIDR range.</p>
<p>Here&#x2019;s a network configuration example from one of the VMs.</p>
<pre><code class="language-bash">root@k8smaster0:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by &apos;subiquity&apos;
network:
  ethernets:
    enp0s3:
      dhcp4: true
    enp0s8:
      dhcp4: false
      addresses: [192.168.56.4/24]
      nameservers:
        addresses: [8.8.8.8,114.114.114.114]
  version: 2
root@k8smaster0:~#

</code></pre>
<h1 id="0x01deployment">0x01 Deployment</h1>
<h2 id="0x0100prerequisite">0x0100 Pre-requisite</h2>
<p>After I installed ubuntu and configured the network in the virtual machines, its&#x2019; time to install Kubernetes.</p>
<p>First, I specified the hostname with IP addresses in the <code>/etc/hosts</code> on each node, which is unnecessary. Still, I strongly recommend doing it because the kubelet will use the IP parsed by hostname as the node IP for the registry by default. Otherwise, you need to specify the parameter with <code>--node-ip=x.x.x.x</code> when starting kubelet. For example, If I want to register a k8s worker node with the hostname of k8sslave0 and two NICs, the first NIC with IP10.0.2.15 configured with the default route and the second with IP <code>192.168.56.5</code>. If I want to use <code>192.168.56.5</code> as my registry IP, I need to configure <code>/etc/hosts</code> as follows:</p>
<pre><code class="language-bash">127.0.0.1 localhost
127.0.1.1 ubuntu
192.168.56.5 k8sslave0
</code></pre>
<p>After configuring the host for each node, we need to install container runtime on each node so pods can run there. As you may know, many choices exist, but many people prefer to use the Docker Engine as runtime directly. Still, I used containerd as my runtime because Kubernetes no longer support  Docker Engine directly after v1.23. You can access Kubernetes&#x2019;s official documents to get more details.</p>
<p>Here are the commands to install containerd on ubuntu. You can find all of it on Docker&#x2019;s official site.</p>
<pre><code class="language-bash"># Uninstall old versions
sudo apt-get remove docker docker-engine docker.io containerd runc

# Set up the repository
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# Add Docker&apos;s official GPG key:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Use the following command to set up the repository:
echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null

sudo apt-get update
sudo apt-get install containerd.io
</code></pre>
<p>Then we need to configure systemd as the cgroup driver, this is optional, but systemd is recommended if you use cgroupv2. Here&#x2019;re the commands to enable systemd.</p>
<pre><code class="language-bash"># If we use package management tools like apt or yum, 
# we need to generate the default configuration first.
containerd config default &gt; /etc/containerd/config.toml

# Then, modify the config.toml to enable systemd
[plugins.&quot;io.containerd.grpc.v1.cri&quot;.containerd.runtimes.runc]
  ...
  [plugins.&quot;io.containerd.grpc.v1.cri&quot;.containerd.runtimes.runc.options]
    SystemdCgroup = true

# We will use kubeadm 1.25.4 to install k8s later,
# so, we need to change the sandbox image configured in the config.toml
[plugins.&quot;io.containerd.grpc.v1.cri&quot;]
  sandbox_image = &quot;registry.k8s.io/pause:3.8&quot;

sudo systemctl restart containerd
</code></pre>
<p>We also need to check if our CNI is installed. Usually, after the container runtime is installed, the CNI will also be installed with the runtime. As default, the CNI binary files are located in the directory <code>/opt/cni/bin</code>, and the configuration directory is <code>/etc/cni/net.d</code>. Of course, the directory is configurable, which can find in the containerd configuration file.</p>
<pre><code class="language-bash">cat /etc/containerd/config.toml

## Here&apos;s the configuration related to the cni
...
[plugins.&quot;io.containerd.grpc.v1.cri&quot;.cni]
      bin_dir = &quot;/opt/cni/bin&quot;
      conf_dir = &quot;/etc/cni/net.d&quot;
      conf_template = &quot;&quot;
      ip_pref = &quot;&quot;
      max_conf_num = 1
</code></pre>
<p>At this point, all of our preparation work for installing Kubernetes has been done. In my next blog, I will continue introducing how to install Kubernetes and configure cilium.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[How to Solve the "Cannot find pyconfig.h" Error]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Last week, I had an error when installing cryptography by pip. Then I did a lot of searches, and most of the answers told me to install python-devel, but it still didn&apos;t work after I installed that, which drove me crazy. By the way, my process was running</p>]]></description><link>https://nomansky.top/how-to-solve-the-cannot-find-pyconfig-h-error/</link><guid isPermaLink="false">62cc07bef49d220001cd09fe</guid><category><![CDATA[Tips]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Mon, 11 Jul 2022 11:24:42 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Last week, I had an error when installing cryptography by pip. Then I did a lot of searches, and most of the answers told me to install python-devel, but it still didn&apos;t work after I installed that, which drove me crazy. By the way, my process was running on Centos 7.4, and my python version is 2.7.5.</p>
<p>While installing cryptography by pip, GCC needs to compile a bunch of C files, and the C files reference header files, such as <code>&lt;pyconfig.h&gt;</code>. However, the GCC did not search pyconfig.h in <code>/usr/include/python2.7/</code>, because the GCC default search path does not include that path. We can print the current search pathes of GCC via command: <code>gcc -xc -E -v -</code>.</p>
<p>Finally, after I found the radical problem of this error, it was easy to solve by including a new search path for the GCC. Here is the command: <code>export C_INCLUDE_PATH=&quot;$C_INCLUDE_PATH:/usr/include/python2.7/&quot;</code></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Some thoughts on learning english]]></title><description><![CDATA[Some thoughts on leanring english]]></description><link>https://nomansky.top/some-thoughts-on-leanring-english/</link><guid isPermaLink="false">62a6fb7ff49d220001cd09cc</guid><category><![CDATA[Essay]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Mon, 13 Jun 2022 12:03:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="whydoweterribleatenglish">Why do we terrible at English</h2>
<p>English as a global language is essential, especially for someone who wants to obtain first-hand information or live oversea. Chinese students spend much time learning English in their K-12 educational experience, but many still stay low. The reason I think is because of the wrong way of learning english.</p>
<p>In Chinese english Education, the most crucial purpose of learning english is not to communicate with people but to pass exams. That is why Chinese students are constantly reading and writing much better than listening and speaking because they spend much time on grammar, vocabulary, and reading exercises.</p>
<h2 id="theoriginoflanguage">The origin of language</h2>
<p>At first, primitive humans did not have a literal. The way of conveying information is speaking, the first edition of language. So we can see the basis of language is not about reading and writing but listening and speaking. After years of human revolution, primitive humans became cultured. They lived far away than they used to be, which is why we need the paper word to write letters, announcements, and something else. That is why language can be split into two parts: listening and speaking, which is based on audio, and reading and writing, which is based on vision.<br>
The right way to learn English</p>
<p>As mentioned above, We know that language learning is divided into two parts, and each part can be divided into the input and output parts. If we want to improve our whole English level, the input is critical because the input is the ceiling of the output. That is why we need to set listening and reading as our priority.</p>
<h2 id="thepartoftheinput">The Part of the Input</h2>
<h3 id="listening">Listening</h3>
<p>As a Chinese IT industry practitioner, using VPN is a fundamental skill, which is a great advantage to learning English. Because the video resources on chinese websites such as bilibili can not compare with Youtube, and the most important is that the resources on Youtube are free. Besides Youtube, podcasts are also a helpful tool for learning English. Listening to podcasts is way better than watching TV series or movies because audio has more intensive information than video.</p>
<h3 id="reading">Reading</h3>
<p>Besides listening, reading also is a part of the input. This part is relative to writing. To write concisely and correctly, we must read continuously and read everything in english, not just fiction, reports, novels, etc. For example, as an IT developers, we can read all software documents in English. Software documents are often written in simple sentences, which is a good beginning for us to start reading in English. If we can skim the documents without obstacles, we can change to reading novels.</p>
<h2 id="thepartoftheoutput">The part of the output</h2>
<h3 id="speaking">Speaking</h3>
<p>This part is the most difficult for me. As a non-native speaker, I do not think we have too much opportunity to speak, so I do not focus too much on that. I only spent a little time shadowing English Youtubers or reading books aloud. Maybe I will pay some  English speaking coach to improve my speaking.</p>
<h3 id="writing">Writing</h3>
<p>Writing is also tricky, but it is easier to solve than speaking. Speaking needs a partner to practice, but writing can practice by ourselves. We can write diaries, blogs, articles, etc. Another trick of writing is to use grammar-checking tools. Writing does not have to be too much; we can start with a tiny step, with no need to feel too much pressure. This is why I decide writing in English from now on. Maybe we will write with flaws, incorrect grammar usage, or something else, but a least it has started.</p>
<h2 id="thelast">The last</h2>
<p>Anyway, after learning english for two years, I feel kind of stuck, which is why I wrote this blog to recap. I hope I will be better.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[基于strongwan在CentOS上搭建IPSEC VPN的问题详解]]></title><description><![CDATA[strongswan搭建ipsec]]></description><link>https://nomansky.top/ji-yu-strongwanzai-centosshang-da-jian-ipsec-vpnde-wen-ti-xiang-jie/</link><guid isPermaLink="false">61e92386f49d220001cd09ae</guid><category><![CDATA[TCP/IP]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Thu, 20 Jan 2022 09:00:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="0x00">0x00 &#x80CC;&#x666F;</h2>
<p>&#x9700;&#x8981;&#x6253;&#x901A;&#x963F;&#x91CC;&#x4E91;VPC &#x7F51;&#x7EDC;&#x4E0E;&#x672C;&#x5730;IDC&#x673A;&#x623F;&#x7684;&#x79C1;&#x6709;&#x7F51;&#x7EDC;&#xFF0C;&#x9047;&#x5230;&#x4E0D;&#x5C11;&#x95EE;&#x9898;&#x90FD;&#x6CA1;&#x6709;&#x627E;&#x5230;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF0C;&#x5728;&#x770B;&#x4E86;&#x4E0D;&#x5C11;strongswan&#x7684;wiki&#x6587;&#x7AE0;&#x540E;&#x624D;&#x89E3;&#x51B3;&#xFF0C;&#x7279;&#x6B64;&#x8BB0;&#x5F55;&#x4E0B;&#x3002;&#x8BE5;&#x7F51;&#x7EDC;&#x62D3;&#x6251;&#x4F2A;&#x53C2;&#x6570;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-bash">ali_vpc_network(172.16.0.0/16) &lt;--&gt; ECS(IPSEC Gateway)&lt;--&gt; IDC Firewall(IPSEC Gateway)&lt;--&gt; Local Network(192.168.22.0/24,192.168.24.0/23)

## ECS Internal IP: 172.16.10.1 Elastic IP: 1.1.1.1
## IDC Firewall IP: 192.168.10.1 Public IP: 2.2.2.2

</code></pre>
<h2 id="0x01ecs">0x01 ECS &#x90E8;&#x7F72;&#x547D;&#x4EE4;</h2>
<p>&#x5B89;&#x88C5;strongswan</p>
<pre><code class="language-bash">yum install epel-release -y
yum install strongswan -y
## &#x5F00;&#x542F;ipforward &#x4FEE;&#x6539; /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
### &#x5E94;&#x7528;&#x914D;&#x7F6E;
sysctl -p

</code></pre>
<p>&#x914D;&#x7F6E; strongswan /etc/strongswan/ipsec.conf</p>
<pre><code class="language-bash"># ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
        # strictcrlpolicy=yes
        # uniqueids = no
        charondebug=&quot;all&quot;
        uniqueids=never
conn %default
        authby=psk
        type=tunnel
conn office_wire
    dpdaction=hold # &#x610F;&#x5916;&#x65AD;&#x5F00;&#x540E;&#x5C1D;&#x8BD5;&#x91CD;&#x8FDE;&#x65F6;&#x957F;
    dpddelay=30s # &#x610F;&#x5916;&#x65AD;&#x5F00;&#x540E;&#x8D85;&#x65F6;&#x65F6;&#x957F;&#xFF0C;&#x53EA;&#x5BF9; IKEv1 &#x8D77;&#x4F5C;&#x7528;
    dpdtimeout=60s
    fragmentation=yes
    keyexchange=ikev1           #IPsec&#x8FDE;&#x63A5;&#x4F7F;&#x7528;&#x7684;IKE&#x534F;&#x8BAE;&#x7684;&#x7248;&#x672C;
    left=172.16.10.1
    leftsubnet=172.16.0.0/16    #VPC&#x7684;&#x7F51;&#x6BB5;
    leftid=1.1.1.1              # Elastic IP
    right=2.2.2.2               # IDC public IP
    rightsubnet=192.168.22.0/24 #&#x672C;&#x5730;&#x7684;&#x7F51;&#x6BB5;
    auto=start
    ike=3des-md5-modp1024       #IPsec&#x8FDE;&#x63A5;&#x4E2D;IKE&#x534F;&#x8BAE;&#x7684;&#x52A0;&#x5BC6;&#x7B97;&#x6CD5;-&#x8BA4;&#x8BC1;&#x7B97;&#x6CD5;-DH&#x5206;&#x7EC4;
    ikelifetime=7200s          #IKE&#x534F;&#x8BAE;&#x7684;SA&#x751F;&#x547D;&#x5468;&#x671F;
    esp=3des-sha1       #IPsec&#x8FDE;&#x63A5;&#x4E2D;IPsec&#x534F;&#x8BAE;&#x7684;&#x52A0;&#x5BC6;&#x7B97;&#x6CD5;-&#x8BA4;&#x8BC1;&#x7B97;&#x6CD5;-DH&#x5206;&#x7EC4;
    lifetime=7200s             #IPsec&#x534F;&#x8BAE;&#x7684;SA&#x751F;&#x547D;&#x5468;&#x671F;
    type=tunnel
conn office_wireless
    also=office_wire
    rightsubnet=192.168.24.0/23 #&#x672C;&#x5730;&#x7684;&#x7F51;&#x6BB5;
</code></pre>
<p>&#x914D;&#x7F6E;strongswan&#x7684;psk /etc/strongswan/ipsec.secrets</p>
<pre><code class="language-bash"># ipsec.secrets - strongSwan IPsec secrets file
1.1.1.1 2.2.2.2 : PSK password_placeholder  #123456&#x4E3A;IPsec&#x8FDE;&#x63A5;&#x7684;&#x9884;&#x5171;&#x4EAB;&#x5BC6;&#x94A5;&#xFF0C;&#x672C;&#x5730;IDC&#x4FA7;&#x548C;VPN&#x7F51;&#x5173;&#x4FA7;&#x7684;&#x9884;&#x5171;&#x4EAB;&#x5BC6;&#x94A5;&#x9700;&#x4E00;&#x81F4;
</code></pre>
<p>&#x542F;&#x52A8;strongswan</p>
<pre><code class="language-bash">systemctl start strongswan
systemctl enable strongswan
### &#x67E5;&#x770B;&#x8FDE;&#x63A5;&#x72B6;&#x6001;

strongswan statusall
## &#x5982;&#x679C;&#x6709;sa &#x4E3A;up &#x5219;&#x5EFA;&#x7ACB;&#x6210;&#x529F;

## &#x8FD9;&#x65F6;&#x5019;&#x53EF;&#x4EE5;ping&#x901A;
ping 192.168.22.x
</code></pre>
<p>&#x5982;&#x679C;&#x8FD8;&#x9700;&#x8981;VPC &#x7F51;&#x7EDC;&#x4E2D; 172.16.0.0/16 &#x4E2D;&#x7684;&#x5176;&#x4ED6;ECS&#x4E5F;&#x80FD;&#x8BBF;&#x95EE;&#x672C;&#x5730;IDC&#x7684;&#x673A;&#x5668;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x5728;VPC&#x7F51;&#x7EDC;&#x4E2D;&#x7684;&#x8DEF;&#x7531;&#x8868;&#x4E2D;&#x914D;&#x7F6E; 172.16.10.1 &#x4E3A;&#x4E0B;&#x4E00;&#x8DF3;&#x8DEF;&#x7531;&#x3002;&#x540C;&#x65F6;&#x8FD8;&#x8981;&#x8FD8;&#x5B89;&#x5168;&#x7EC4;&#x4E2D;&#x5F00;&#x542F;&#x5141;&#x8BB8;local network &#x7684; inbound&#x8BBF;&#x95EE;&#x3002;</p>
<h2 id="0x02idcfirewall">0x02 IDC Firewall &#x914D;&#x7F6E;</h2>
<p>&#x8FD9;&#x6B65;&#x4E0D;&#x591A;&#x8BF4;&#x4E86;&#xFF0C;&#x4E3B;&#x8981;&#x7684;&#x95EE;&#x9898;&#x5728;&#x4E8E;&#x611F;&#x5174;&#x8DA3;&#x6D41;&#x7684;&#x914D;&#x7F6E;&#x3002;&#x4E00;&#x822C; &#x8BBF;&#x95EE;&#x5916;&#x7F51;&#x662F;NAT&#x51FA;&#x53BB;&#xFF0C;&#x5047;&#x8BBE;ACL 3010 &#x5E94;&#x7528;&#x4E8E;&#x8BE5;NAT outbound&#xFF0C;&#x5219;&#x9700;&#x8981;&#x5728;&#x8BE5;3010 &#x4E2D;deny&#x6240;&#x6709;&#x5230; aliyun vpc&#x7684;&#x6D41;&#x91CF;&#xFF0C;&#x540C;&#x65F6;&#x9700;&#x8981;&#x5728;ipsec policy &#x4E2D;&#x5BF9;&#x5E94;&#x7684;ACL&#xFF0C;&#x8FD9;&#x91CC;&#x5047;&#x8BBE;&#x662F;3001&#x4E2D; permit &#x6240;&#x6709;&#x5230;aliyun vpc&#x7684;&#x6D41;&#x91CF;&#x3002;&#x8FD9;&#x6837;&#x624D;&#x4F1A;&#x89E6;&#x53D1;&#x611F;&#x5174;&#x8DA3;&#x6D41;&#xFF0C;&#x624D;&#x80FD;&#x6210;&#x529F;&#x5EFA;&#x7ACB;ike sa &amp; ipsec sa&#x3002;</p>
<h2 id="0x03troubleshooting">0x03 Troubleshooting</h2>
<ol>
<li>&#x672C;&#x5730;&#x53EF;&#x4EE5;ping &#x901A; ECS VPC Gateway&#xFF0C;&#x4F46;&#x662F;&#x65E0;&#x6CD5;ping&#x901A;&#x5176;&#x4ED6;&#x673A;&#x5668;
<ol>
<li>&#x53EF;&#x80FD;&#x662F;ip_forward&#x6CA1;&#x5F00;&#xFF0C;&#x6216;&#x8005;iptables forward policy &#x4E3A;drop&#xFF0C;&#x6700;&#x597D;&#x6539;&#x4E3A;accept</li>
</ol>
</li>
<li>&#x53EF;&#x4EE5;ping&#x901A;&#xFF0C;&#x4E5F;&#x53EF;&#x5EFA;&#x7ACB;tcp&#x8FDE;&#x63A5;&#xFF0C;&#x4F46;&#x662F;http&#x670D;&#x52A1;&#x8BBF;&#x95EE;&#x4E0D;&#x884C;&#xFF0C;&#x6216;&#x8005;mysql&#x8BBF;&#x95EE;&#x5361;&#x4F4F;&#x4E86;&#x3002;&#x4E00;&#x822C;&#x662F;mtu&#x7684;&#x95EE;&#x9898;
<ol>
<li>
<p>&#x53EF;&#x4EE5;&#x6267;&#x884C;&#xFF1A;iptables -t mangle -A FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360</p>
</li>
<li>
<p>&#x6216;&#x4FEE;&#x6539;/etc/strongswan/strongswan.d/charon/kernel-netlink.conf &#x4E2D;&#x7684; mtu&#x4E3A; 1360</p>
</li>
<li>
<p>&#x91CD;&#x542F;strongswan</p>
</li>
</ol>
</li>
<li>strongswan&#x65E0;&#x6CD5;&#x548C;&#x672C;&#x5730;&#x6210;&#x529F;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#xFF1A;
<ol>
<li>&#x56E0;&#x4E3A;ECS &#x662F;&#x5728;&#x5F39;&#x6027;&#x516C;&#x7F51;IP&#x4E0B;&#x9762;&#xFF0C;ifconfig &#x662F;&#x770B;&#x4E0D;&#x5230;&#x516C;&#x7F51;IP&#x7684;&#xFF0C;&#x6240;&#x4EE5;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4E2D;&#x7684;left&#x8981;&#x4F7F;&#x7528;private IP</li>
</ol>
</li>
<li>strongswan&#x65E0;&#x6CD5;&#x5EFA;&#x7ACB;&#x8BBE;&#x7F6E;&#x7684;&#x591A;&#x4E2A;private network cidr
<ol>
<li>&#x8FD9;&#x4E2A;&#x5E94;&#x8BE5;&#x662F;strongswan&#x7684;&#x4E00;&#x4E2A;bug&#xFF0C;&#x5728;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4E2D;&#x4F7F;&#x7528;also&#x53C2;&#x6570;&#x5EFA;&#x7ACB;&#x591A;&#x4E2A;private network</li>
</ol>
</li>
<li>&#x5728;Linux&#x4E0A;&#x600E;&#x4E48;&#x67E5;&#x770B;&#x5DF2;&#x5EFA;&#x7ACB;&#x7684;Ipsec policy?
<ol>
<li>ip xfrm policy show</li>
</ol>
</li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[MySQL GTID主备不一致修复方案]]></title><description><![CDATA[创建或修复损坏的MySQL副本]]></description><link>https://nomansky.top/mysql-gtidzhu-bei-bu-yi-zhi-xiu-fu-fang-an/</link><guid isPermaLink="false">6062dcdb8cccbd0001e08657</guid><category><![CDATA[MySQL]]></category><category><![CDATA[Database]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Tue, 30 Mar 2021 00:12:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="replicas">&#x65B9;&#x6848;&#x4E00;&#xFF1A;&#x91CD;&#x5EFA; Replicas</h1>
<p>MySQL 5.6&#x53CA;&#x4EE5;&#x4E0A;&#x7248;&#x5728;&#x590D;&#x5236;&#x4E2D;&#x5F15;&#x5165;&#x4E86;&#x65B0;&#x7684;&#x5168;&#x5C40;&#x4E8B;&#x52A1;ID&#xFF08;GTID&#xFF09;&#x652F;&#x6301;&#x3002; &#x5728;&#x542F;&#x7528;&#x4E86;GTID&#x6A21;&#x5F0F;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x6267;&#x884C;MySQL&#x548C;MySQL 5.7&#x7684;&#x5907;&#x4EFD;&#x65F6;&#xFF0C;Percona XtraBackup&#x4F1A;&#x81EA;&#x52A8;&#x5C06;GTID&#x503C;&#x5B58;&#x50A8;&#x5728;xtrabackup_binlog_info&#x4E2D;&#x3002; &#x8BE5;&#x4FE1;&#x606F;&#x53EF;&#x7528;&#x4E8E;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#xFF08;&#x6216;&#x4FEE;&#x590D;&#x635F;&#x574F;&#x7684;&#xFF09;&#x57FA;&#x4E8E;GTID&#x7684;&#x526F;&#x672C;&#x3002;</p>
<h2 id>&#x524D;&#x63D0;&#x6761;&#x4EF6;</h2>
<ol>
<li>MySQL &#x673A;&#x5668;&#x4E0A;&#x9700;&#x8981;&#x5B89;&#x88C5; percona xtrabackup</li>
</ol>
<h2 id>&#x4F18;&#x70B9;</h2>
<ol>
<li>&#x6BD4;&#x8F83;&#x5B89;&#x5168;&#xFF0C;&#x64CD;&#x4F5C;&#x7B80;&#x5355;</li>
</ol>
<h2 id>&#x7F3A;&#x70B9;</h2>
<ol>
<li>&#x6570;&#x636E;&#x91CF;&#x8F83;&#x5927;&#x7684;&#x65F6;&#x5019;&#x5907;&#x4EFD;&#x6240;&#x9700;&#x7684;&#x65F6;&#x95F4;&#x6BD4;&#x8F83;&#x4E45;</li>
<li>&#x5F53;&#x6570;&#x636E;&#x5E93;&#x6709;&#x505A;&#x8BFB;&#x5199;&#x5206;&#x79BB;&#x7684;&#x65F6;&#x5019;&#xFF0C;Slave &#x627F;&#x62C5;&#x7684;&#x8BFB;&#x8BF7;&#x6C42;&#x9700;&#x8981;&#x8F6C;&#x79FB;&#x5230; Master</li>
</ol>
<h2 id>&#x64CD;&#x4F5C;&#x6B65;&#x9AA4;</h2>
<h3 id="master">Master</h3>
<ol>
<li>&#x5728; Master &#x4E0A;&#x4F7F;&#x7528; xtrabackup &#x5DE5;&#x5177;&#x5BF9;&#x5F53;&#x524D;&#x7684;&#x6570;&#x636E;&#x5E93;&#x8FDB;&#x884C;&#x5907;&#x4EFD;&#xFF0C;&#x6267;&#x884C;&#x8BE5;&#x547D;&#x4EE4;&#x7684;&#x7528;&#x6237;&#x9700;&#x8981;&#x6709;&#x8BFB;&#x53D6; MySQL data &#x76EE;&#x5F55;&#x7684;&#x6743;&#x9650;</li>
</ol>
<pre><code class="language-bash">innobackupex --default-file=/etc/my.cnf --user=root -H 127.0.0.1 --password=[PASSWORD]  /tmp
</code></pre>
<ol start="2">
<li>&#x5C06;&#x8BE5;&#x5907;&#x4EFD;&#x6587;&#x4EF6;&#x62F7;&#x8D1D;&#x5230; Slave &#x673A;&#x5668;&#x4E0A;</li>
</ol>
<h3 id="slave">Slave</h3>
<ol>
<li>&#x5728; Slave &#x673A;&#x5668;&#x4E0A;&#x6267;&#x884C;&#x8BE5;&#x547D;&#x4EE4;&#xFF0C;&#x51C6;&#x5907;&#x5907;&#x4EFD;&#x6587;&#x4EF6;</li>
</ol>
<pre><code class="language-bash">innobackupex --default-file=/etc/my.cnf --user=root -H 127.0.0.1 --password=[PASSWORD] --apply-log /tmp/[TIMESTAMP]
</code></pre>
<ol start="2">
<li>&#x5907;&#x4EFD;&#x5E76;&#x5220;&#x9664; Slave data&#x76EE;&#x5F55;</li>
</ol>
<pre><code class="language-bash">systemctl stop mysqld
mv /data/mysql{,.bak}
</code></pre>
<ol start="3">
<li>&#x5C06;&#x5907;&#x4EFD;&#x62F7;&#x8D1D;&#x5230;&#x76EE;&#x6807;&#x76EE;&#x5F55;&#xFF0C;&#x5E76;&#x8D4B;&#x4E88;&#x76F8;&#x5E94;&#x7684;&#x6743;&#x9650;&#xFF0C;&#x7136;&#x540E;&#x91CD;&#x542F; Slave</li>
</ol>
<pre><code class="language-bash">innobackupex --default-file=/etc/my.cnf --user=root -H 127.0.0.1 --password=[PASSWORD] --copy-back /tmp/[TIMESTAMP]
chmod 750 /data/mysql
chown mysql.mysql -R /data/mysql
systemctl start mysqld
</code></pre>
<ol start="4">
<li>&#x67E5;&#x770B;&#x5F53;&#x524D;&#x5907;&#x4EFD;&#x5DF2;&#x7ECF;&#x6267;&#x884C;&#x8FC7;&#x7684;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x7684;GTID&#xFF0C;&#x5982;&#x4E0B;&#x793A;&#x4F8B;</li>
</ol>
<pre><code class="language-bash">$ cat /tmp/[TIMESTAMP]/xtrabackup_binlog_info
mysql-bin.000002    1232        c777888a-b6df-11e2-a604-080027635ef5:1-4
</code></pre>
<p>&#x8FD9;&#x4E2A;GTID&#x4E5F;&#x4F1A;&#x5728; innobackupex &#x5907;&#x4EFD;&#x5B8C;&#x6210;&#x540E;&#x6253;&#x5370;&#x51FA;&#x6765;</p>
<pre><code class="language-bash">innobackupex: MySQL binlog position: filename &apos;mysql-bin.000002&apos;, position 1232, GTID of the last change &apos;c777888a-b6df-11e2-a604-080027635ef5:1-4&apos;
</code></pre>
<ol start="5">
<li>&#x4F7F;&#x7528; root &#x767B;&#x5F55; MySQL&#xFF0C;&#x8FDB;&#x884C;&#x5982;&#x4E0B;&#x914D;&#x7F6E;</li>
</ol>
<pre><code class="language-sql">NewSlave &gt; RESET MASTER;
NewSlave &gt; SET GLOBAL gtid_purged=&apos;c777888a-b6df-11e2-a604-080027635ef5:1-4&apos;;
NewSlave &gt; CHANGE MASTER TO
             MASTER_HOST=&quot;$masterip&quot;,
             MASTER_USER=&quot;repl&quot;,
             MASTER_PASSWORD=&quot;$slavepass&quot;,
             MASTER_AUTO_POSITION = 1;
NewSlave &gt; START SLAVE;
</code></pre>
<ol start="6">
<li>&#x67E5;&#x770B; Slave &#x7684;&#x590D;&#x5236;&#x72B6;&#x6001;&#x662F;&#x5426;&#x6B63;&#x5E38;</li>
</ol>
<pre><code class="language-sql">NewSlave &gt; SHOW SLAVE STATUS\G
         [..]
         Slave_IO_Running: Yes
         Slave_SQL_Running: Yes
         [...]
         Retrieved_Gtid_Set: c777888a-b6df-11e2-a604-080027635ef5:5
         Executed_Gtid_Set: c777888a-b6df-11e2-a604-080027635ef5:1-5
</code></pre>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x526F;&#x672C;&#x5DF2;&#x68C0;&#x7D22;&#x5230;&#x7F16;&#x53F7;&#x4E3A;5&#x7684;&#x65B0;&#x4E8B;&#x52A1;&#xFF0C;&#x56E0;&#x6B64;&#x4ECE;1&#x5230;5&#x7684;&#x4E8B;&#x52A1;&#x5DF2;&#x5728;&#x6B64;&#x526F;&#x672C;&#x4E0A;&#x4E86;&#x3002;&#x8FD9;&#x6837;&#x6211;&#x4EEC;&#x5C31;&#x5B8C;&#x6210;&#x4E86;&#x4E00;&#x4E2A;&#x65B0; replicas &#x7684;&#x642D;&#x5EFA;&#x3002;</p>
<h1 id="perconatoolkit">&#x65B9;&#x6848;&#x4E8C;&#xFF1A;&#x4F7F;&#x7528;percona-toolkit&#x8FDB;&#x884C;&#x6570;&#x636E;&#x4FEE;&#x590D;</h1>
<p>PT&#x5DE5;&#x5177;&#x5305;&#x4E2D;&#x5305;&#x542B;pt-table-checksum&#x548C;pt-table-sync&#x4E24;&#x4E2A;&#x5DE5;&#x5177;&#xFF0C;&#x4E3B;&#x8981;&#x7528;&#x4E8E;&#x68C0;&#x6D4B;&#x4E3B;&#x4ECE;&#x662F;&#x5426;&#x4E00;&#x81F4;&#x4EE5;&#x53CA;&#x4FEE;&#x590D;&#x6570;&#x636E;&#x4E0D;&#x4E00;&#x81F4;&#x60C5;&#x51B5;&#x3002;</p>
<h2 id>&#x524D;&#x63D0;&#x6761;&#x4EF6;</h2>
<ol>
<li>MySQL &#x673A;&#x5668;&#x4E0A;&#x9700;&#x8981;&#x5B89;&#x88C5; percona-toolkit &#x5DE5;&#x5177;</li>
</ol>
<h2 id>&#x4F18;&#x70B9;</h2>
<ol>
<li>&#x4FEE;&#x590D;&#x901F;&#x5EA6;&#x5FEB;&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x505C;&#x6B62;&#x4ECE;&#x5E93;</li>
</ol>
<h2 id>&#x7F3A;&#x70B9;</h2>
<ol>
<li>&#x64CD;&#x4F5C;&#x590D;&#x6742;&#xFF0C;&#x64CD;&#x4F5C;&#x524D;&#x6700;&#x540E;&#x5148;&#x5907;&#x4EFD;&#x6570;&#x636E;&#x5E93;</li>
<li>&#x5F85;&#x4FEE;&#x590D;&#x7684;&#x8868;&#x9700;&#x8981;&#x5177;&#x6709; unique constraint</li>
</ol>
<h2 id>&#x64CD;&#x4F5C;&#x6B65;&#x9AA4;</h2>
<h3 id>&#x80CC;&#x666F;&#x793A;&#x4F8B;</h3>
<h3 id="ip">IP &#x5173;&#x7CFB;&#x5BF9;&#x5E94;</h3>
<pre><code class="language-markdown">|  IP  | Role  |
|  ----  | ----  |
| 192.168.100.132  | Master |
| 192.168.100.131  | Slave |
</code></pre>
<p>&#x5047;&#x8BBE;&#x5F85;&#x6062;&#x590D;&#x7684;&#x8868;&#x7ED3;&#x6784;&#x5982;&#x4E0B;&#x6240;&#x793A;</p>
<pre><code class="language-sql">mysql&gt; show create table test.t;
+-------+-------------------------------------
| Table | Create Table                                                                                                                                  |
+-------+-------------------------------------
| t     | CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `content` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-------------------------------------
</code></pre>
<p>&#x6B63;&#x5E38;&#x4E3B;&#x5907;&#x4E00;&#x81F4;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;Master &#x548C; Slave &#x7684;&#x6570;&#x636E;&#x5747;&#x4E3A;&#x5982;&#x4E0B;&#x6240;&#x793A;</p>
<pre><code class="language-sql">mysql&gt; select * from test.t;
+----+---------+
| id | content |
+----+---------+
|  1 | a       |
|  2 | b       |
+----+---------+
2 rows in set (0.00 sec)
</code></pre>
<p>&#x5728;&#x6781;&#x7AEF;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5047;&#x5982;&#x51FA;&#x73B0;&#x4E86;&#x5982;&#x4E0B;&#x4E3B;&#x5907;&#x4E0D;&#x4E00;&#x81F4;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x60C5;&#x5F62;&#x5982;&#x4E0B;&#xFF1A;</p>
<ol>
<li>Master &#x65B0;&#x589E;&#x4E86;&#x4E00;&#x6761; id &#x4E3A; 3 &#x7684;&#x8BB0;&#x5F55;&#xFF0C;&#x5982;&#x4E0B;&#x6240;&#x793A;&#xFF0C;&#x4F46;&#x5E76;&#x6CA1;&#x6709;&#x540C;&#x6B65;&#x5230; Slave&#xFF0C;&#x540C;&#x65F6;&#x81EA;&#x52A8; failover &#x5230;&#x4E86; Slave&#x3002;</li>
<li>Old Slave &#x4F5C;&#x4E3A; New Master &#x5728;&#x670D;&#x52A1;&#x4E86;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x540E;&#xFF0C;&#x8868;&#x4E2D;&#x589E;&#x52A0;&#x4E86;&#x65B0;&#x7684;&#x8BB0;&#x5F55;&#x3002;</li>
</ol>
<p>&#x91CD;&#x65B0;&#x542F;&#x52A8; Old Master &#x540E;&#xFF0C;Old Master&#x7684;&#x6570;&#x636E;&#x5982;&#x4E0B;&#x6240;&#x793A;:</p>
<pre><code class="language-sql">old_master&gt; select * from test.t;
+----+---------+
| id | content |
+----+---------+
|  1 | a       |
|  2 | b       |
|  3 | c       |
+----+---------+
3 rows in set (0.00 sec)
</code></pre>
<p>New Master &#x7684;&#x6570;&#x636E;&#x5982;&#x4E0B;&#x6240;&#x793A;:</p>
<pre><code class="language-sql">new_master&gt; select * from test.t;
+----+---------+
| id | content |
+----+---------+
|  1 | a       |
|  2 | b       |
|  3 | cc      |
|  4 | dd      |
+----+---------+
4 rows in set (0.00 sec)
</code></pre>
<p>&#x6B64;&#x65F6;&#x5982;&#x679C;&#x5C06; old master &#x914D;&#x7F6E;&#x4E3A; new master &#x7684;slave&#xFF0C;&#x5219;&#x4F1A;&#x62A5;&#x9519;&#xFF0C;&#x6BD4;&#x5982;&#x51FA;&#x73B0;&#x5982;&#x4E0B;&#x62A5;&#x9519;</p>
<pre><code>...Last_IO_Error: binary log: &apos;Slave has more GTIDs than the master has, using the master&apos;s SERVER_UUID.
</code></pre>
<p>&#x53EF;&#x4EE5;&#x770B;&#x5230; Old Master &#x7684; GTID &#x5DF2;&#x5230; 255</p>
<pre><code>Executed_Gtid_Set: 5b750c75-86c2-11eb-af71-000c2973a2d5:1-10,
60d082ee-86c2-11eb-a9df-000c2988edab:1-255
</code></pre>
<p>&#x800C; New Master &#x7684; GTID&#x624D;&#x5230;254</p>
<pre><code>mysql&gt; show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 4062
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set: 5b750c75-86c2-11eb-af71-000c2973a2d5:1-2,
60d082ee-86c2-11eb-a9df-000c2988edab:1-254
1 row in set (0.00 sec)
</code></pre>
<p>&#x6B64;&#x65F6;&#x6211;&#x4EEC;&#x914D;&#x7F6E; Old Master &#x8DF3;&#x8FC7;&#x9519;&#x8BEF;&#xFF0C;&#x5C06; Old Master &#x6062;&#x590D;&#x6210;&#x53EF;&#x4EE5;&#x6B63;&#x5E38;&#x4ECE; New Master &#x590D;&#x5236;&#x7684;&#x72B6;&#x6001;</p>
<pre><code class="language-sql">old_master&gt; stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

old_master&gt; set gtid_next=&apos;60d082ee-86c2-11eb-a9df-000c2988edab:254&apos;;  --Specify the version of the next transaction,the GTID you want to skip
Query OK, 0 rows affected (0.00 sec)

old_master&gt; begin;
Query OK, 0 rows affected (0.00 sec)

old_master&gt; commit;                                                   -- Inject an empty transaction
Query OK, 0 rows affected (0.00 sec)

old_master&gt; set gtid_next=&apos;AUTOMATIC&apos;&#xFF1B;   -- Restore to automaic GTID
Query OK, 0 rows affected (0.00 sec)

old_master&gt; start slave;
Query OK, 0 rows affected (0.13 sec)
</code></pre>
<p>&#x7136;&#x540E;&#x6211;&#x4EEC;&#x5728; Old Master &#x4E0A;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x590D;&#x5236;&#x5728;&#x6B63;&#x5E38;&#x8FDB;&#x884C;</p>
<pre><code class="language-sql">mysql&gt; show slave status\G
            ...
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            ...
            Executed_Gtid_Set: 5b750c75-86c2-11eb-af71-000c2973a2d5:1-10,
60d082ee-86c2-11eb-a9df-000c2988edab:1-255
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
</code></pre>
<p>&#x6700;&#x540E;&#x6211;&#x4EEC;&#x5728; New Master &#x4E0A;&#x6E05;&#x9664; slave_master_info</p>
<pre><code class="language-sql">new_master&gt; reset slave all for channel &apos;&apos;;
Query OK, 0 rows affected (0.00 sec)

new_master&gt; show slave status\G;
Empty set (0.01 sec)
</code></pre>
<h3 id>&#x6821;&#x9A8C;&#x4E00;&#x81F4;&#x6027;</h3>
<p>&#x63A5;&#x4E0B;&#x6765;&#x6211;&#x4EEC;&#x8981;&#x6821;&#x9A8C;&#x4E3B;&#x4ECE;&#x4E00;&#x81F4;&#x6027;&#xFF0C;&#x5728; New Master&#x4E0A;&#x6267;&#x884C; pt-table-checksum&#xFF0C;ROWS&#x4E3A;4&#xFF0C;&#x5B58;&#x5728;&#x4E00;&#x6761;DIFFS</p>
<pre><code class="language-bash">[root@localhost ~]# pt-table-checksum h=&apos;127.0.0.1&apos;,u=&apos;mha&apos;,p=&apos;[PASSWORD]&apos;,P=3306 --no-check-binlog-format --databases test
Checking if all tables can be checksummed ...
Starting checksum ...
            TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
03-29T19:24:18      0      1        4          1       1       0   0.322 test.t
</code></pre>
<h3 id>&#x53CC;&#x5411;&#x540C;&#x6B65;&#xFF08;<strong>&#x540C;&#x6B65;&#x64CD;&#x4F5C;&#x4F1A;&#x4FEE;&#x6539;&#x6570;&#x636E;&#xFF0C;&#x64CD;&#x4F5C;&#x524D;&#x8FDB;&#x884C;&#x6570;&#x636E;&#x5907;&#x4EFD;</strong>&#xFF09;</h3>
<p>&#x5728;&#x540C;&#x6B65;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;pt-table-sync &#x4F1A;&#x5728; Master &#x4E0A;&#x8FDB;&#x884C;&#x6570;&#x636E;&#x4FEE;&#x6539;&#xFF0C;pt-table-sync&#x7684;&#x53C2;&#x6570;&#x4F5C;&#x7528;&#x5982;&#x4E0B;</p>
<pre><code class="language-bash">pt-table-sync --databases test --bidirectional --conflict-column=&apos;*&apos; --conflict-comparison &apos;newest&apos; h=&apos;192.168.100.132&apos;,u=&apos;mha&apos;,p=&apos;[PASSWORD]&apos;,P=3306 h=&apos;192.168.100.131&apos; --print
--database                &#x6307;&#x5B9A;&#x5F85;&#x6267;&#x884C;&#x7684;&#x6570;&#x636E;&#x5E93;
--bidirectional           &#x4E3A;&#x53CC;&#x5411;&#x540C;&#x6B65;
--conflict-column         &#x5BF9;&#x6BD4;&#x8BE5;&#x5217;&#x5F53;&#x51B2;&#x7A81;&#x53D1;&#x751F;&#x65F6;
--conflict-comparison     &#x51B2;&#x7A81;&#x5BF9;&#x6BD4;&#x7B56;&#x7565;
--print                   &#x8F93;&#x51FA;&#x5BF9;&#x6BD4;&#x7ED3;&#x679C;
--dry-run                 &#x6D4B;&#x8BD5;&#x8FD0;&#x884C;
--execute                 &#x6267;&#x884C;&#x6D4B;&#x8BD5;

# &#x5DE6;&#x8FB9;&#x7684;DSN&#x4E3A; Slave
# &#x53F3;&#x8FB9;&#x7684;DSN&#x4E3A; Master
</code></pre>
<p>&#x8FD9;&#x91CC;&#x6211;&#x4EEC;&#x6307;&#x5B9A;<code>&#x2014;conflict-name=&apos;content&apos;</code>&#x4F5C;&#x4E3A;&#x5BF9;&#x6BD4;&#x5217;&#xFF0C;&#x4E00;&#x822C;&#x4F7F;&#x7528;&#x4E1A;&#x52A1;&#x4E3B;&#x952E;&#x4F5C;&#x4E3A;&#x8BE5;&#x5217;&#x3002;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x6253;&#x5370;&#x51FA;&#x4E86;&#x5F85;&#x6267;&#x884C;&#x7684;&#x8BED;&#x53E5;</p>
<pre><code class="language-bash">[root@localhost ~]# pt-table-sync --databases test --bidirectional  --conflict-column=&apos;content&apos; --conflict-comparison &apos;newest&apos; h=&apos;192.168.100.132&apos;,u=&apos;mha&apos;,p=&apos;[PASSWORD]&apos;,P=3306 h=&apos;192.168.100.131&apos; --print
/*192.168.100.132:3306*/ UPDATE `test`.`t` SET `content`=&apos;cc&apos; WHERE `id`=&apos;3&apos; LIMIT 1;
/*192.168.100.132:3306*/ INSERT INTO `test`.`t`(`id`, `content`) VALUES (&apos;4&apos;, &apos;dd&apos;);
</code></pre>
<p>&#x63A5;&#x4E0B;&#x6765;&#x6267;&#x884C;&#x8BED;&#x53E5;</p>
<pre><code class="language-bash">[root@localhost ~]# pt-table-sync --databases test --bidirectional  --conflict-column=&apos;content&apos; --conflict-comparison &apos;newest&apos; h=&apos;192.168.100.132&apos;,u=&apos;mha&apos;,p=&apos;[PASSWORD]&apos;,P=3306 h=&apos;192.168.100.131&apos; --execute
</code></pre>
<p>&#x7136;&#x540E;&#x5728; Master &#x4E0A;&#x518D;&#x6B21;&#x6267;&#x884C;&#x6570;&#x636E;&#x5BF9;&#x6BD4;&#xFF0C;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x6570;&#x636E;&#x6B63;&#x5E38;&#x4E86;</p>
<pre><code class="language-bash">[root@localhost ~]# pt-table-checksum h=&apos;127.0.0.1&apos;,u=&apos;mha&apos;,p=&apos;[PASSWORD]&apos;,P=3306 --no-check-binlog-format --databases test
Checking if all tables can be checksummed ...
Starting checksum ...
            TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
03-30T12:09:57      0      0        4          0       1       0   0.330 test.t
</code></pre>
<h1 id>&#x53C2;&#x8003;&#x6587;&#x6863;</h1>
<p><a href="https://www.percona.com/doc/percona-xtrabackup/2.4/howtos/recipes_ibkx_gtid.html?ref=nomansky.top">https://www.percona.com/doc/percona-xtrabackup/2.4/howtos/recipes_ibkx_gtid.html</a></p>
<p><a href="https://www.percona.com/doc/percona-toolkit/3.0/pt-table-checksum.html?ref=nomansky.top">https://www.percona.com/doc/percona-toolkit/3.0/pt-table-checksum.html</a></p>
<p><a href="https://www.percona.com/doc/percona-toolkit/3.0/pt-table-sync.html?ref=nomansky.top">https://www.percona.com/doc/percona-toolkit/3.0/pt-table-sync.html</a></p>
<p><a href="https://developer.aliyun.com/article/708726?ref=nomansky.top">https://developer.aliyun.com/article/708726</a></p>
<p><a href="https://tech.meituan.com/2017/11/17/mysql-flashback.html?ref=nomansky.top">https://tech.meituan.com/2017/11/17/mysql-flashback.html</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[安全学习笔记之Web安全（二）]]></title><description><![CDATA[一些 Web 安全漏洞]]></description><link>https://nomansky.top/an-quan-xue-xi-bi-ji-zhi-weban-quan-er/</link><guid isPermaLink="false">5e26b4afc9c64a000149b5a6</guid><category><![CDATA[安全]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Tue, 21 Jan 2020 08:23:26 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="0x00">0x00 &#x524D;&#x8A00;</h1>
<p>&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x4E16;&#x754C;&#x4E2D;&#xFF0C;&#x4E00;&#x4E2A;&#x4E1C;&#x897F;&#x4E60;&#x60EF;&#x5206;&#x6210;&#x4E0D;&#x540C;&#x7684;&#x5C42;&#x7EA7;&#xFF0C;&#x6765;&#x6A21;&#x5757;&#x5316;&#x548C;&#x89E3;&#x8026;&#x7CFB;&#x7EDF;&#xFF0C;&#x8FD9;&#x4E5F;&#x5C31;&#x610F;&#x5473;&#x7740;&#x4E00;&#x4E2A;&#x4E1C;&#x897F;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x5C42;&#xFF0C;&#x6BD4;&#x5982;&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;&#x5B83;&#x6709; OSI &#x4E03;&#x5C42;&#x6A21;&#x578B;&#x548C; TCP/IP &#x4E94;&#x5C42;&#x6A21;&#x578B;&#x7B49;&#xFF0C;&#x8BA1;&#x7B97;&#x673A;&#x4F53;&#x7CFB;&#x7ED3;&#x6784;&#x4ECE;&#x4E0A;&#x5230;&#x4E0B;&#x53EF;&#x5927;&#x81F4;&#x5206;&#x4E3A;&#x5E94;&#x7528;&#x5C42;&#xFF0C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5C42;&#xFF0C;&#x5FAE;&#x6307;&#x4EE4;&#x67B6;&#x6784;&#x5C42;&#xFF0C;&#x786C;&#x4EF6;&#x5C42;&#x7B49;&#x7B49;&#xFF0C;&#x50CF;&#x5176;&#x4ED6;&#x7684;&#x5982;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x548C;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x4E5F;&#x662F;&#x4E00;&#x6837;&#x7684;&#x9053;&#x7406;&#xFF0C;&#x53EF;&#x89C1;&#x62BD;&#x8C61;&#x548C;&#x5C01;&#x88C5;&#x5C31;&#x662F;&#x8BA1;&#x7B97;&#x673A;&#x4E16;&#x754C;&#x7684;&#x57FA;&#x672C;&#x539F;&#x5219;&#x3002;</p>
<p>&#x540C;&#x6837;&#xFF0C;&#x6211;&#x4EEC;&#x5728;&#x8C08;&#x4FE1;&#x606F;&#x5B89;&#x5168;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4FE1;&#x606F;&#x5B89;&#x5168;&#x4E5F;&#x662F;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x5C42;&#x7EA7;&#x7684;&#x3002;&#x4E0A;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#x6211;&#x4EEC;&#x8BF4;&#x8FC7;&#x4E86;&#xFF0C;&#x5B89;&#x5168;&#x7684;&#x672C;&#x8D28;&#x662F;&#x6570;&#x636E;&#xFF0C;&#x800C;&#x968F;&#x7740;&#x6570;&#x636E;&#x7684;&#x6D41;&#x52A8;&#xFF0C;&#x5C31;&#x5206;&#x5C42;&#x4E86;&#x4E0D;&#x540C;&#x7684;&#x5C42;&#x7EA7;&#x3002;&#x5F53;&#x6570;&#x636E;&#x5728;&#x7F51;&#x7EDC;&#x4E2D;&#x6D41;&#x52A8;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5B83;&#x662F;&#x7F51;&#x7EDC;&#x5B89;&#x5168;&#xFF1B;&#x5F53;&#x6570;&#x636E;&#x6D41;&#x7ECF;&#x5230;&#x4E86; Web &#x5BB9;&#x5668;&#x548C; Web &#x5E94;&#x7528;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5B83;&#x662F; Web &#x5B89;&#x5168;&#xFF1B;&#x5F53;&#x6570;&#x636E;&#x6D41;&#x7ECF;&#x5230;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x662F;&#xFF0C;&#x5B83;&#x662F;&#x4E3B;&#x673A;&#x5B89;&#x5168;&#x3002;</p>
<p>&#x5728;&#x4E86;&#x89E3;&#x4E86;&#x8FD9;&#x4E9B;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x9488;&#x5BF9;&#x4E0D;&#x540C;&#x7684;&#x5C42;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x5B66;&#x4E60;&#x65B9;&#x5411;&#xFF0C;&#x800C;&#x4ECA;&#x5929;&#x6211;&#x8BB0;&#x5F55;&#x7684;&#x5B66;&#x4E60;&#x7B14;&#x8BB0;&#x662F; Web &#x5B89;&#x5168;&#x7684;&#x5B66;&#x4E60;&#x7B14;&#x8BB0;&#x3002;&#x5728;&#x6211;&#x4EEC;&#x4E86;&#x89E3;&#x5177;&#x4F53;&#x7684;&#x6F0F;&#x6D1E;&#x524D;&#xFF0C;&#x9700;&#x8981;&#x62B1;&#x7740;&#x4E00;&#x5207;&#x7528;&#x6237;&#x8F93;&#x5165;&#x7686;&#x4E0D;&#x53EF;&#x4FE1;&#x7684;&#x601D;&#x60F3;&#xFF0C;&#x5F88;&#x591A;&#x6F0F;&#x6D1E;&#x5229;&#x7528;&#x672C;&#x8D28;&#x5C31;&#x662F;&#x628A;&#x7528;&#x6237;&#x7684;&#x8F93;&#x5165;&#x7684;&#x6570;&#x636E;&#x5F53;&#x505A;&#x4EE3;&#x7801;&#x6267;&#x884C;&#x3002;</p>
<h1 id="0x10web">0x10 &#x5E38;&#x89C1; Web &#x6F0F;&#x6D1E;</h1>
<h2 id="0x11xss">0x11 XSS</h2>
<p>&#x539F;&#x7406;&#xFF1A;&#x7528;&#x6237;&#x7684;&#x8F93;&#x5165;&#x88AB;&#x5F53;&#x505A; js &#x4EE3;&#x7801;&#x6267;&#x884C;&#x4E86;<br>
&#x5206;&#x7C7B;&#xFF1A;</p>
<ul>
<li>&#x53CD;&#x5C04;&#x578B;: &#x6076;&#x610F;&#x4EE3;&#x7801;&#x8F93;&#x5165;&#x76F4;&#x63A5;&#x88AB;&#x8F93;&#x51FA;&#x6267;&#x884C;&#xFF0C;&#x4E00;&#x822C;&#x5728;&#x524D;&#x540E;&#x7AEF;&#x4E00;&#x4F53;&#x7684;&#x67B6;&#x6784;&#x4E2D;&#xFF0C;&#x670D;&#x52A1;&#x7AEF;&#x6539;&#x53D8;&#x4E86;&#x8FD4;&#x56DE;&#x7684;&#x9875;&#x9762;&#x4EE3;&#x7801;</li>
<li>&#x5B58;&#x50A8;&#x578B;: &#x6076;&#x610F;&#x4EE3;&#x7801;&#x88AB;&#x63D0;&#x4EA4;&#x5B58;&#x50A8;&#x5728;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#xFF0C;&#x53EF;&#x4EE5;&#x88AB;&#x52A0;&#x8F7D;&#x6267;&#x884C;</li>
<li>DOM&#x578B;: &#x6076;&#x610F;&#x4EE3;&#x7801;&#x63D0;&#x4EA4;&#x5230;&#x540E;&#x7AEF;&#x670D;&#x52A1;&#x5668;&#x540E;&#xFF0C;&#x524D;&#x7AEF;&#x4EE3;&#x7801;&#x6839;&#x636E;&#x540E;&#x7AEF;&#x670D;&#x52A1;&#x5668;&#x8FD4;&#x56DE;&#x7684;&#x5185;&#x5BB9;&#x901A;&#x8FC7; js &#x4FEE;&#x6539;&#x4E86; htm &#x9875;&#x9762;&#xFF0C;&#x8FBE;&#x5230;&#x4E86;&#x63D2;&#x5165;&#x811A;&#x672C;&#x7684;&#x76EE;&#x7684;&#xFF0C;&#x5E38;&#x89C1;&#x4E8E;&#x524D;&#x540E;&#x7AEF;&#x5206;&#x79BB;&#x7684;&#x9879;&#x76EE;&#x3002;<br>
&#x5371;&#x5BB3;&#xFF1A;</li>
<li>&#x7A83;&#x53D6; cookie</li>
<li>&#x9493;&#x9C7C;&#x64CD;&#x4F5C;</li>
<li>&#x8BB0;&#x5F55;&#x7528;&#x6237;&#x884C;&#x4E3A;</li>
<li>&#x672A;&#x6388;&#x6743;&#x64CD;&#x4F5C;<br>
&#x9632;&#x62A4;&#xFF1A;</li>
<li>&#x9A8C;&#x8BC1;&#x8F93;&#x5165;&#x8F93;&#x51FA;</li>
<li>&#x7F16;&#x7801;</li>
<li>&#x767D;&#x540D;&#x5355;&#x8FC7;&#x6EE4;</li>
<li>CSP(Content Security Policy)</li>
</ul>
<h2 id="0x12sql">0x12 SQL&#x6CE8;&#x5165;</h2>
<p>&#x539F;&#x7406;&#xFF1A;&#x6784;&#x9020;&#x6076;&#x610F; SQL &#x8BED;&#x53E5;&#x53C2;&#x6570;&#xFF0C;&#x5BFC;&#x81F4; SQL &#x8BED;&#x53E5;&#x88AB;&#x7BE1;&#x6539;<br>
&#x5206;&#x7C7B;&#xFF1A;&#x53C2;&#x6570;&#x7C7B;&#x578B;&#x53EF;&#x5206;&#x4E3A;&#x6570;&#x5B57;&#x578B;&#x548C;&#x5B57;&#x7B26;&#x578B;&#xFF0C;&#x800C;&#x6839;&#x636E;&#x56DE;&#x663E;&#x7ED3;&#x679C;&#x53EF;&#x4EE5;&#x5206;&#x4E3A;&#x56DE;&#x663E;&#x6CE8;&#x5165;&#xFF0C;&#x62A5;&#x9519;&#x6CE8;&#x5165;&#x548C;&#x76F2;&#x6CE8;<br>
&#x5371;&#x5BB3;&#xFF1A;&#x7BE1;&#x6539;&#x7A83;&#x53D6;&#x6570;&#x636E;<br>
&#x9632;&#x62A4;&#xFF1A;&#x9884;&#x7F16;&#x8BD1;&#x8BED;&#x53E5;&#xFF0C;&#x9A8C;&#x8BC1;&#x8F93;&#x5165;&#xFF0C;&#x4F7F;&#x7528;&#x5B58;&#x50A8;&#x8FC7;&#x7A0B;</p>
<h2 id="0x13csrf">0x13 CSRF</h2>
<p>&#x539F;&#x7406;&#xFF1A;&#x4F2A;&#x9020;&#x7528;&#x6237;&#x64CD;&#x4F5C;<br>
&#x9632;&#x62A4;&#xFF1A;csrf token&#xFF0C;&#x4E8C;&#x6B21;&#x9A8C;&#x8BC1;&#xFF0C;&#x9632;&#x6B62;&#x53C2;&#x6570;&#x88AB;&#x653B;&#x51FB;&#x8005;&#x731C;&#x89E3;</p>
<h2 id="0x14ssrf">0x14 SSRF</h2>
<p>&#x539F;&#x7406;&#xFF1A;&#x901A;&#x8FC7; url &#x63A7;&#x5236;&#x670D;&#x52A1;&#x5668;&#x53BB;&#x8BBF;&#x95EE;&#x5176;&#x4ED6;&#x670D;&#x52A1;&#x5668;<br>
&#x9632;&#x62A4;&#xFF1A;&#x767D;&#x540D;&#x5355;&#x9650;&#x5236;&#xFF0C;&#x534F;&#x8BAE;&#x548C;&#x8D44;&#x6E90;&#x9650;&#x5236;&#xFF0C;&#x8BF7;&#x6C42;&#x7AEF;&#x9650;&#x5236;</p>
<h2 id="0x15">0x15 &#x53CD;&#x5E8F;&#x5217;&#x5316;&#x6F0F;&#x6D1E;</h2>
<p>&#x539F;&#x7406;&#xFF1A;&#x901A;&#x8FC7;&#x5728;&#x6570;&#x636E;&#x4E2D;&#x5D4C;&#x5165;&#x81EA;&#x5B9A;&#x4E49;&#x4EE3;&#x7801;&#x63D0;&#x4EA4;&#x5230;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x53CD;&#x5E8F;&#x5217;&#x5316;&#x8FC7;&#x7A0B;&#x4E2D;&#x6267;&#x884C;&#x4E86;&#x4EE3;&#x7801;&#xFF0C;&#x6765;&#x63A7;&#x5236;&#x6574;&#x53F0;&#x670D;&#x52A1;&#x5668;<br>
&#x9632;&#x62A4;&#xFF1A;&#x9650;&#x5236;&#x5E8F;&#x5217;&#x5316;&#x548C;&#x53CD;&#x5E8F;&#x5217;&#x5316;&#x7684;&#x7C7B;&#xFF0C;RASP &#x68C0;&#x6D4B;</p>
<h2 id="0x16">0x16 &#x4FE1;&#x606F;&#x6CC4;&#x9732;</h2>
<p>&#x539F;&#x7406;&#xFF1A;&#x6CE8;&#x91CA;&#x3001;&#x5F02;&#x5E38;&#x3001;&#x8FD4;&#x56DE;&#x4FE1;&#x606F;&#x6216;&#x8005;&#x4EE3;&#x7801;&#x6CC4;&#x9732;<br>
&#x9632;&#x62A4;&#xFF1A;&#x6A21;&#x7CCA;&#x5904;&#x7406;&#xFF0C;&#x5173;&#x95ED;&#x5F02;&#x5E38;&#x6253;&#x5370;&#x548C;&#x9519;&#x8BEF;&#xFF0C;&#x76D1;&#x63A7; github &#x7B49;&#x7F51;&#x7AD9;</p>
<h2 id="0x17">0x17 &#x63D2;&#x4EF6;&#x6F0F;&#x6D1E;</h2>
<p>&#x539F;&#x7406;&#xFF1A;&#x7B2C;&#x4E09;&#x65B9;&#x63D2;&#x4EF6;&#x5B58;&#x5728;&#x6F0F;&#x6D1E;<br>
&#x9632;&#x62A4;&#xFF1A;&#x7B2C;&#x4E09;&#x65B9;&#x63D2;&#x4EF6;&#x76D1;&#x63A7;&#x548C;&#x68C0;&#x6D4B;</p>
<h2 id="0x18">0x18 &#x4E0A;&#x4F20;&#x6F0F;&#x6D1E;</h2>
<p>&#x539F;&#x7406;&#xFF1A;&#x4E0A;&#x4F20;&#x56FE;&#x7247;&#x6216;&#x8005; webshell<br>
&#x9632;&#x62A4;&#xFF1A;&#x6587;&#x4EF6;&#x6821;&#x9A8C;</p>
<h1 id="0x20">0x20 &#x5C0F;&#x7ED3;</h1>
<p>web &#x5B89;&#x5168;&#x7684;&#x6F0F;&#x6D1E;&#x6709;&#x5F88;&#x591A;&#xFF0C;&#x8FD9;&#x91CC;&#x4E5F;&#x53EA;&#x8BB0;&#x4E86;&#x4E2A;&#x5927;&#x6982;&#xFF0C;&#x603B;&#x4E4B;&#x6F0F;&#x6D1E;&#x7684;&#x539F;&#x7406;&#x5C31;&#x662F;&#x7A0B;&#x5E8F;&#x628A;&#x6570;&#x636E;&#x5F53;&#x505A;&#x4EE3;&#x7801;&#x6267;&#x884C;&#xFF0C;&#x800C;&#x6211;&#x4EEC;&#x7684;&#x5E94;&#x5BF9;&#x9632;&#x6B62;&#x65E0;&#x975E;&#x662F;&#x9A8C;&#x8BC1;&#x6570;&#x636E;&#x548C;&#x8FC7;&#x6EE4;&#x7B49;&#x7B49;&#xFF0C;&#x8FD8;&#x662F;&#x90A3;&#x53E5;&#x8BDD;&#xFF0C;&#x4E00;&#x5207;&#x8F93;&#x5165;&#x7686;&#x4E0D;&#x53EF;&#x4FE1;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[安全学习笔记之安全基础（一）]]></title><description><![CDATA[安全学习篇之基础安全]]></description><link>https://nomansky.top/an-quan-xue-xi-bi-ji-zhi-an-quan-ji-chu-yi/</link><guid isPermaLink="false">5dff16b9c9c64a000149b598</guid><category><![CDATA[安全]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Sun, 22 Dec 2019 07:10:48 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="0x00">0x00 &#x524D;&#x8A00;</h1>
<p>&#x4F5C;&#x4E3A;&#x4E00;&#x540D;&#x5728;&#x5B89;&#x5168;&#x548C;&#x8FD0;&#x7EF4;&#x5C97;&#x4F4D;&#x90FD;&#x6709;&#x8FC7;&#x4ECE;&#x4E1A;&#x7ECF;&#x9A8C;&#x7684;&#x4EBA;&#x6765;&#x8BF4;&#xFF0C;&#x6211;&#x4E00;&#x76F4;&#x89C9;&#x5F97;&#x8FD0;&#x7EF4;&#x548C;&#x5B89;&#x5168;&#x662F;&#x5BC6;&#x4E0D;&#x53EF;&#x5206;&#x7684;&#xFF0C;&#x8FD0;&#x7EF4;&#x548C;&#x5B89;&#x5168;&#x56E2;&#x961F;&#x7684;&#x7279;&#x70B9;&#x5C31;&#x662F;&#x65F6;&#x5E38;&#x8981;&#x9762;&#x5BF9;&#x975E;&#x5E38;&#x68D8;&#x624B;&#x7684;&#x4E8B;&#x6545;&#xFF0C;&#x4E00;&#x6CA1;&#x5904;&#x7406;&#x597D;&#x9020;&#x6210;&#x516C;&#x53F8;&#x7684;&#x635F;&#x5931;&#x90A3;&#x5E74;&#x7EC8;&#x5956;&#x5C31;&#x9E21;&#x98DE;&#x86CB;&#x6253;&#x4E86;&#xFF0C;&#x5E76;&#x4E14;&#x8FD9;&#x4E24;&#x4E2A;&#x5C97;&#x4F4D;&#x90FD;&#x662F;&#x5C5E;&#x4E8E;&#x5E73;&#x65F6;&#x6CA1;&#x51FA;&#x4E8B;&#x5C31;&#x4E00;&#x5207;&#x5B89;&#x597D;&#xFF0C;&#x4E00;&#x51FA;&#x4E8B;&#x5C31;&#x662F;&#x80CC;&#x9505;&#x7684;&#x89D2;&#x8272;&#xFF0C;&#x5728;&#x6CA1;&#x51FA;&#x4E8B;&#x65F6;&#x522B;&#x4EBA;&#x89C9;&#x5F97;&#x517B;&#x7740;&#x4F60;&#x6709;&#x4F55;&#x7528;&#xFF0C;&#x51FA;&#x4E86;&#x4E8B;&#x540E;&#x522B;&#x4EBA;&#x89C9;&#x5F97;&#x8981;&#x4F60;&#x6709;&#x4F55;&#x7528;&#x3002;&#x3002;&#x3002;&#x6240;&#x4EE5;&#x6211;&#x89C9;&#x5F97;&#x5BF9;&#x8FD0;&#x7EF4;&#x548C;&#x5B89;&#x5168;&#x6765;&#x8BF4;&#xFF0C;&#x6709;&#x9632;&#x8303;&#x4E8E;&#x672A;&#x7136;&#x548C;&#x4E3B;&#x52A8;&#x54CD;&#x5E94;&#x7684;&#x610F;&#x8BC6;&#x771F;&#x7684;&#x5F88;&#x91CD;&#x8981;&#x3002;</p>
<p>&#x73B0;&#x5728;&#x56DE;&#x60F3;&#x8D77;&#x5728;&#x4E0A;&#x5BB6;&#x516C;&#x53F8;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x516C;&#x53F8;&#x662F;&#x4E00;&#x5BB6; to B&#x7684;&#x5B89;&#x5168;&#x4E59;&#x65B9;&#x5382;&#x5546;&#xFF0C;&#x6211;&#x5F53;&#x65F6;&#x662F;&#x5728;&#x505A;&#x5B89;&#x5168;&#x5B9E;&#x65BD;&#x7684;&#x5DE5;&#x4F5C;&#xFF0C;&#x7ECF;&#x5E38;&#x9700;&#x8981;&#x5230;&#x5BA2;&#x6237;&#x90A3;&#x91CC;&#x62FF;&#x5B89;&#x5168;&#x4EA7;&#x54C1;&#x8FDB;&#x884C;&#x5DE1;&#x68C0;&#x548C;&#x90E8;&#x7F72;&#x5B89;&#x5168;&#x4EA7;&#x54C1;&#x7B49;&#x7B49;&#xFF0C;&#x6211;&#x5C31;&#x53D1;&#x73B0;&#x5B89;&#x5168;&#x771F;&#x662F;&#x9A6C;&#x592A;&#x6548;&#x5E94;&#xFF0C;&#x5927;&#x516C;&#x53F8;&#x90FD;&#x6709;&#x4E00;&#x5B9A;&#x89C4;&#x6A21;&#x7684;&#x4E13;&#x4E1A;&#x5B89;&#x5168;&#x56E2;&#x961F;&#xFF0C;&#x5E76;&#x4E14;&#x50CF;&#x4E00;&#x4E9B; WAF&#x3001;IDS/IPS &#x7B49;&#x57FA;&#x7840;&#x7684;&#x5B89;&#x5168;&#x4EA7;&#x54C1;&#x5F88;&#x5B8C;&#x5907;&#xFF0C;&#x751A;&#x81F3;&#x8FD8;&#x6709;&#x4E13;&#x95E8;&#x7684;&#x5B89;&#x5168;&#x7814;&#x53D1;&#x56E2;&#x961F;&#xFF0C;src&#x548C;&#x5B89;&#x5168;&#x8FD0;&#x8425;&#xFF0C;&#x4ED6;&#x4EEC;&#x53EF;&#x80FD;&#x6682;&#x65F6;&#x7F3A;&#x5C11;&#x7684;&#x662F;&#x4E00;&#x4E9B;&#x6BD4;&#x8F83;&#x4E0A;&#x5C42;&#x5EFA;&#x7B51;&#x7684;&#x5B89;&#x5168;&#x4EA7;&#x54C1;&#xFF0C;&#x6BD4;&#x5982; RASP &#x4E4B;&#x7C7B;&#x7684;&#x5FAE;&#x670D;&#x52A1;&#x5E94;&#x7528;&#x9632;&#x62A4;&#xFF0C;DevSecOps &#x5B89;&#x5168;&#x5F00;&#x53D1;&#x7684;&#x4EA7;&#x54C1;&#x7B49;&#x7B49;&#xFF0C;&#x800C;&#x4E2D;&#x5C0F;&#x516C;&#x53F8;&#x5219;&#x57FA;&#x672C;&#x5C31;&#x662F;&#x5B57;&#x5178;&#x91CC;&#x6CA1;&#x6709; &#x201C;&#x5B89;&#x5168;&#x201D; &#x8FD9;&#x4E24;&#x4E2A;&#x5B57;&#xFF0C;&#x53EF;&#x80FD;&#x597D;&#x70B9;&#x7684;&#x4F1A;&#x6709;&#x4E00;&#x4EBA;&#x5B89;&#x5168;&#xFF0C;&#x5C31;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x5B89;&#x5168;&#x5DE5;&#x7A0B;&#x5E08;&#xFF0C;&#x8FD9;&#x4E2A;&#x4EBA;&#x8981;&#x8D1F;&#x8D23;&#x7684;&#x4E8B;&#x4E5F;&#x633A;&#x6742;&#x633A;&#x91CD;&#x7684;&#xFF0C;&#x4EC0;&#x4E48;&#x7B49;&#x4FDD;&#x5408;&#x89C4;&#x5566;&#xFF0C;&#x6E17;&#x900F;&#x6D4B;&#x8BD5;&#xFF0C;&#x57FA;&#x7EBF;&#x68C0;&#x67E5;&#xFF0C;&#x5185;&#x90E8;&#x5B89;&#x5168;&#x51C6;&#x5219;&#x6587;&#x6863;&#x7F16;&#x5199;&#xFF0C;&#x5B89;&#x5168;&#x5F00;&#x53D1;&#x57F9;&#x8BAD;&#x7B49;&#x7B49;&#xFF0C;&#x66F4;&#x6709;&#x4E00;&#x4E9B;&#x516C;&#x53F8;&#x5219;&#x662F;&#x5B89;&#x5168;&#x7684;&#x6D3B;&#x5168;&#x7531;&#x8FD0;&#x7EF4;&#x54E5;&#x6765;&#x517C;&#x804C;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x73B0;&#x5728;&#x5C0F;&#x516C;&#x53F8;&#x7684;&#x4EC0;&#x4E48; app &#x4EA7;&#x54C1;&#x6211;&#x90FD;&#x4E0D;&#x592A;&#x6562;&#x7528;&#xFF0C;&#x6307;&#x4E0D;&#x5B9A;&#x54EA;&#x5929;&#x5C31;&#x88AB;&#x8131;&#x88E4;&#x4E86;&#x3002;&#x3002;</p>
<p>&#x5F53;&#x7136;&#xFF0C;&#x5C0F;&#x516C;&#x53F8;&#x4E0D;&#x5728;&#x4E1A;&#x52A1;&#x4E0A;&#x6295;&#x5165;&#x592A;&#x591A;&#x7684;&#x8D44;&#x6E90;&#x4E5F;&#x662F;&#x53EF;&#x4EE5;&#x7406;&#x89E3;&#x7684;&#xFF0C;&#x6BD5;&#x7ADF;&#x5B89;&#x5168;&#x662F;&#x672B;&#x4F4D;&#x9700;&#x6C42;&#xFF0C;&#x5C0F;&#x516C;&#x53F8;&#x8D44;&#x6E90;&#x6709;&#x9650;&#xFF0C;&#x4F46;&#x662F;&#x6211;&#x8BA4;&#x4E3A;&#x968F;&#x7740;&#x7B49;&#x4FDD;2.0&#x7684;&#x6B63;&#x5F0F;&#x5B9E;&#x65BD;&#xFF0C;&#x51E0;&#x4E4E;&#x6240;&#x6709;&#x7684;&#x4F01;&#x4E1A;&#x90FD;&#x8981;&#x53C2;&#x52A0;&#x7B49;&#x4FDD;&#xFF0C;&#x56FD;&#x5BB6;&#x4E5F;&#x8D8A;&#x6765;&#x8D8A;&#x91CD;&#x89C6;&#x5B89;&#x5168;&#xFF0C;&#x5B89;&#x5168;&#x95EE;&#x9898;&#x4E0D;&#x662F;&#x90A3;&#x4E48;&#x597D;&#x89C4;&#x907F;&#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x9700;&#x8981;&#x8FD0;&#x7EF4;&#x548C;&#x5F00;&#x53D1;&#x7B49;&#x6280;&#x672F;&#x4EBA;&#x5458;&#x6709;&#x57FA;&#x672C;&#x7684;&#x5B89;&#x5168;&#x7684;&#x610F;&#x8BC6;&#x3002;&#x7531;&#x4E8E;&#x6211;&#x73B0;&#x5728;&#x7684;&#x516C;&#x53F8;&#x4E4B;&#x524D;&#x4E5F;&#x51FA;&#x8FC7;&#x5B89;&#x5168;&#x4E8B;&#x6545;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x9762;&#x8BD5;&#x4E5F;&#x4F1A;&#x6CE8;&#x91CD;&#x6C42;&#x804C;&#x8005;&#x7684;&#x5B89;&#x5168;&#x77E5;&#x8BC6;&#xFF0C;&#x4F46;&#x4ECE;&#x6211;&#x4E4B;&#x524D;&#x9762;&#x8BD5;&#x8FC7;&#x7684;&#x8FD0;&#x7EF4;&#x6C42;&#x804C;&#x8005;&#x6765;&#x770B;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x4E00;&#x70B9;&#x90FD;&#x4E0D;&#x61C2;&#x5B89;&#x5168;&#x3002;&#x76EE;&#x524D;&#x6765;&#x8BF4;&#xFF0C;&#x5728;&#x5C0F;&#x516C;&#x53F8;&#x8FD0;&#x7EF4;&#x8981;&#x517C;&#x804C;&#x505A;&#x5B89;&#x5168;&#xFF0C;&#x5728;&#x5927;&#x516C;&#x53F8;&#x5219;&#x8FD0;&#x7EF4;&#x56E2;&#x961F;&#x9700;&#x8981;&#x66F4;&#x597D;&#x7684;&#x548C;&#x5B89;&#x5168;&#x56E2;&#x961F;&#x534F;&#x4F5C;&#x6765;&#x5E94;&#x6025;&#x54CD;&#x5E94;&#x7EBF;&#x4E0A;&#x95EE;&#x9898;&#x8FDB;&#x884C;&#x5904;&#x7406;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x89C9;&#x5F97;&#x4E0D;&#x7BA1;&#x662F;&#x5728;&#x5927;&#x516C;&#x53F8;&#x548C;&#x5C0F;&#x516C;&#x53F8;&#xFF0C;&#x8FD0;&#x7EF4;&#x90FD;&#x8981;&#x5B66;&#x4E60;&#x4E00;&#x5B9A;&#x7684;&#x5B89;&#x5168;&#x77E5;&#x8BC6;&#xFF0C;&#x505A;&#x597D;&#x8FD0;&#x7EF4;&#x5B89;&#x5168;&#xFF0C;&#x53E6;&#x5916;&#x73B0;&#x5728;&#x4E91;&#x8BA1;&#x7B97;&#x57FA;&#x672C;&#x90FD;&#x662F;&#x6807;&#x914D;&#x4E86;&#xFF0C;&#x5728;&#x4E91;&#x4E0A;&#x53C8;&#x4F1A;&#x9762;&#x4E34;&#x65B0;&#x7684;&#x5B89;&#x5168;&#x95EE;&#x9898;&#xFF0C;&#x53EF;&#x4EE5;&#x8BF4;&#x8FD0;&#x7EF4;&#x5B89;&#x5168;&#x7684;&#x95E8;&#x69DB;&#x662F;&#x8D8A;&#x6765;&#x8D8A;&#x9AD8;&#x4E86;&#x3002;</p>
<p>&#x867D;&#x7136;&#x6211;&#x4E5F;&#x4E4B;&#x524D;&#x5728;&#x4E59;&#x65B9;&#x5B89;&#x5168;&#x5382;&#x5546;&#x5F85;&#x8FC7;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#xFF0C;&#x5B89;&#x5168;&#x6280;&#x672F;&#x4E66;&#x4E5F;&#x770B;&#x4E86;&#x4E0D;&#x5C11;&#xFF0C;&#x4F46;&#x4E4B;&#x524D;&#x662F;&#x8D70;&#x7684;&#x91CE;&#x8DEF;&#x5B50;&#xFF0C;&#x4E14;&#x6211;&#x73B0;&#x5728;&#x89C9;&#x5F97;&#x4ECE;&#x8FD0;&#x7EF4;&#x7684;&#x89D2;&#x5EA6;&#x6765;&#x770B;&#x5B89;&#x5168;&#x548C;&#x5728;&#x4E59;&#x65B9;&#x5DEE;&#x5F02;&#x8FD8;&#x662F;&#x86EE;&#x5927;&#x7684;&#xFF0C;&#x8FD9;&#x4E5F;&#x662F;&#x6211;&#x4E3A;&#x4EC0;&#x4E48;&#x91CD;&#x62FE;&#x5B89;&#x5168;&#xFF0C;&#x7CFB;&#x7EDF;&#x7684;&#x5B66;&#x4E60;&#x4E00;&#x6CE2;&#x5B89;&#x5168;&#xFF0C;&#x628A;&#x5B66;&#x5230;&#x7684;&#x5B89;&#x5168;&#x77E5;&#x8BC6;&#x548C;&#x81EA;&#x5DF1;&#x7684;&#x5B9E;&#x9645;&#x7ECF;&#x5386;&#x8BB0;&#x5F55;&#x6210;&#x5B66;&#x4E60;&#x7B14;&#x8BB0;&#x3002;</p>
<h1 id="0x01">0x01 &#x5B89;&#x5168;&#x57FA;&#x7840;</h1>
<h2 id="0x010">0x010 &#x672C;&#x8D28;&#x662F;&#x6570;&#x636E;</h2>
<p>&#x8C08;&#x5B89;&#x5168;&#x81EA;&#x7136;&#x662F;&#x8981;&#x6709;&#x8981;&#x4FDD;&#x62A4;&#x5B89;&#x5168;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x6BD4;&#x5982;&#x94F6;&#x884C;&#x8981;&#x4FDD;&#x8BC1;&#x94B1;&#x7684;&#x5B89;&#x5168;&#xFF0C;&#x94B1;&#x5C31;&#x662F;&#x88AB;&#x4FDD;&#x62A4;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x6240;&#x4EE5;&#x94F6;&#x884C;&#x7684;&#x91D1;&#x5E93;&#x9700;&#x8981;&#x5B89;&#x4FDD;&#x63AA;&#x65BD;&#x3002;&#x540C;&#x6837;&#xFF0C;&#x5BF9;&#x4E8E;&#x4E92;&#x8054;&#x7F51;&#x516C;&#x53F8;&#x6765;&#x8BF4;&#xFF0C;&#x4EC0;&#x4E48;&#x662F;&#x8981;&#x88AB;&#x4FDD;&#x62A4;&#x7684;&#xFF1F;&#x90A3;&#x5C31;&#x662F;&#x4E1A;&#x52A1;&#xFF0C;&#x4E1A;&#x52A1;&#x6700;&#x7EC8;&#x4EA7;&#x751F;&#x7684;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4E1A;&#x52A1;&#x6700;&#x7EC8;&#x4EA7;&#x751F;&#x7684;&#x5219;&#x662F;&#x7528;&#x6237;&#x6570;&#x636E;&#xFF0C;&#x6BD4;&#x5982;&#x4E92;&#x91D1;&#x884C;&#x4E1A;&#xFF0C;&#x4ED6;&#x7684;&#x6570;&#x636E;&#x5C31;&#x662F;&#x501F;&#x8D37;&#x4EBA;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5982;&#x679C;&#x8FD9;&#x4E9B;&#x6570;&#x636E;&#x88AB;&#x4E22;&#x5931;&#x4E86;&#x6216;&#x8005;&#x635F;&#x574F;&#x4E86;&#xFF0C;&#x90A3;&#x540E;&#x679C;&#x6709;&#x591A;&#x4E25;&#x91CD;&#x53EF;&#x60F3;&#x800C;&#x77E5;&#x3002;&#x6240;&#x4EE5;&#xFF0C;&#x5BF9;&#x4E8E;&#x6570;&#x636E;&#x8FD9;&#x4E2A; objective&#xFF08;&#x5BA2;&#x4F53;&#xFF09; &#x7684;&#x4FDD;&#x62A4;&#x5C31;&#x662F;&#x6211;&#x4EEC;&#x7684;&#x5B89;&#x5168;&#x3002;<br>
&#x6570;&#x636E;&#x7684;&#x4FDD;&#x62A4;&#x4E3B;&#x8981;&#x6709; CIA 3 &#x4E2A;&#x539F;&#x5219;&#xFF1A;</p>
<ul>
<li>&#x673A;&#x5BC6;&#x6027;&#xFF08;Confidentiality&#xFF09;:
<ul>
<li>&#x786E;&#x4FDD;&#x53EA;&#x6709;&#x8BE5;&#x770B;&#x7684;&#x4EBA;&#x624D;&#x80FD;&#x770B;&#x89C1;&#xFF0C;&#x5982;&#x6211;&#x4EEC;&#x4E0D;&#x4F1A;&#x5141;&#x8BB8;&#x964C;&#x751F;&#x4EBA;&#x67E5;&#x770B;&#x6211;&#x4EEC;&#x7684;&#x9690;&#x79C1;&#xFF0C;&#x6211;&#x89C9;&#x5F97;&#x628A;&#x6570;&#x636E;&#x6BD4;&#x55BB;&#x6210;&#x6587;&#x4EF6;&#x7684;&#x8BDD;&#xFF0C;&#x8FD9;&#x5C31;&#x662F;&#x6570;&#x636E;&#x7684;&#x8BFB;&#x6743;&#x9650;</li>
<li>&#x9488;&#x5BF9;&#x673A;&#x5BC6;&#x6027;&#x5219;&#x4EA7;&#x751F;&#x4E86;&#x5404;&#x79CD;&#x52A0;&#x5BC6;&#xFF0C;&#x6DF7;&#x6DC6;&#x7B49;&#x6280;&#x672F;</li>
</ul>
</li>
<li>&#x5B8C;&#x6574;&#x6027;&#xFF08;Integrity&#xFF09;:
<ul>
<li>&#x4FDD;&#x8BC1;&#x6570;&#x636E;&#x4E0D;&#x80FD;&#x968F;&#x4FBF;&#x88AB;&#x7BE1;&#x6539;&#xFF0C;&#x6BD4;&#x5982;&#x6211;&#x4EEC;&#x4E0D;&#x53EF;&#x80FD;&#x8BA9;&#x522B;&#x4EBA;&#x628A;&#x6211;&#x4EEC;&#x7684;&#x94B1;&#x6539;&#x5C11;&#x5427;</li>
<li>&#x6570;&#x636E;&#x5199;&#x6743;&#x9650;</li>
<li>&#x5982;&#x7B7E;&#x540D;&#x6280;&#x672F;</li>
</ul>
</li>
<li>&#x53EF;&#x7528;&#x6027;&#xFF08;Availability&#xFF09;
<ul>
<li>&#x786E;&#x4FDD;&#x6570;&#x636E;&#x53EF;&#x4EE5;&#x88AB;&#x8BBF;&#x95EE;&#x5230;&#xFF0C;&#x624D;&#x80FD;&#x4FDD;&#x8BC1;&#x4E1A;&#x52A1;&#x53EF;&#x7528;</li>
<li>&#x6BD4;&#x5982;&#x67D0;&#x4E9B; P2P &#x516C;&#x53F8;&#x6076;&#x610F;&#x7ADE;&#x4E89;&#xFF0C;&#x9488;&#x5BF9;&#x6211;&#x4EEC;&#x516C;&#x53F8; DDoS &#x653B;&#x51FB;&#x5C31;&#x662F;&#x9488;&#x5BF9;&#x53EF;&#x7528;&#x6027;&#x7684;&#x653B;&#x51FB;</li>
</ul>
</li>
</ul>
<h2 id="0x0113a">0x011 3A&#x539F;&#x5219;</h2>
<p>&#x90A3;&#x4E48;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x5982;&#x4F55;&#x53BB;&#x4FDD;&#x8BC1; CIA 3 &#x4E2A;&#x539F;&#x5219;&#x5462;&#xFF1F;&#x90A3;&#x5C31;&#x662F;&#x6388;&#x6743;&#x8BA4;&#x8BC1;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x6211;&#x4EEC;&#x5E73;&#x65F6;&#x8BF4;&#x7684; 3A&#x8BA4;&#x8BC1;:</p>
<ul>
<li>&#x8BA4;&#x8BC1;(Authentication)&#xFF1A;&#x4F60;&#x662F;&#x8C01;&#xFF0C;&#x4E8B;&#x524D;&#x9632;&#x5FA1;</li>
<li>&#x6388;&#x6743;(Authorization)&#xFF1A;&#x4F60;&#x80FD;&#x505A;&#x4EC0;&#x4E48;&#xFF0C;&#x4E8B;&#x4E2D;&#x9632;&#x5FA1;</li>
<li>&#x5BA1;&#x8BA1;(Audit)&#xFF1A;&#x4F60;&#x505A;&#x8FC7;&#x4EC0;&#x4E48;&#xFF0C;&#x4E8B;&#x540E;&#x5BA1;&#x8BA1;</li>
</ul>
<h2 id="0x012">0x012 &#x5B89;&#x5168;&#x5B9E;&#x65BD;&#x57FA;&#x7840;</h2>
<p>&#x5982;&#x4F55;&#x5B9E;&#x65BD; 3A &#x8BA4;&#x8BC1;&#xFF1F;&#x5B89;&#x5168;&#x7684;&#x539F;&#x5219;&#x5EFA;&#x7ACB;&#x5728;&#x52A0;&#x5BC6;&#x7684;&#x673A;&#x5236;&#x4E0A;&#xFF0C;&#x5BC6;&#x7801;&#x5B66;&#x5C31;&#x662F;&#x5B89;&#x5168;&#x7684;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#xFF0C;&#x6240;&#x4EE5;&#x5148;&#x9700;&#x8981;&#x4E86;&#x89E3;&#x5BC6;&#x7801;&#x5B66;&#xFF0C;&#x5E38;&#x7528;&#x7684;&#x52A0;&#x5BC6;&#x7B97;&#x6CD5;&#x6709;&#xFF1A;</p>
<ul>
<li>&#x5BF9;&#x79F0;&#x52A0;&#x5BC6;&#xFF1A;&#x52A0;&#x5BC6;&#x89E3;&#x5BC6;&#x7528;&#x4E00;&#x628A;&#x94A5;&#x5319;&#xFF1A;
<ul>
<li>DES(Data Encryption Standard): &#x5BC6;&#x94A5;&#x957F;&#x5EA6; 56&#xFF0C;&#x4E0D;&#x592A;&#x5B89;&#x5168;</li>
<li>IDES(International Data Encryption Algorithm): &#x5BC6;&#x94A5;&#x957F;&#x5EA6; 128&#xFF0C;&#x6BD4; DES &#x52A0;&#x5BC6;&#x5F3A;&#xFF0C;&#x6BD4; AES &#x6162;</li>
<li>AES(Advanced Encryption Standard): &#x5BC6;&#x94A5;&#x6709; 128&#xFF0C;192&#xFF0C;256 &#x7B49;&#x957F;&#x5EA6;&#xFF0C;&#x76EE;&#x524D;&#x5B89;&#x5168;&#xFF0C;&#x7528; AES-CTR</li>
<li>&#x56FD;&#x5BC6;SM1&#x548C;SM4(SM4 Cryptographic Algorithm): &#x56FD;&#x4EA7;&#x7B97;&#x6CD5;&#xFF0C;&#x4E00;&#x822C;&#x56FD;&#x4F01;&#x8981;&#x6C42;</li>
</ul>
</li>
<li>&#x975E;&#x5BF9;&#x79F0;&#x52A0;&#x5BC6;&#xFF1A;&#x52A0;&#x5BC6;&#x548C;&#x89E3;&#x5BC6;&#x5BC6;&#x94A5;&#x4E0D;&#x540C;&#xFF1A;&#x79C1;&#x94A5;&#x52A0;&#x5BC6;&#xFF0C;&#x516C;&#x94A5;&#x89E3;&#x5BC6;&#x662F;&#x7B7E;&#x540D;&#xFF0C;&#x786E;&#x8BA4;&#x8EAB;&#x4EFD;&#x7684;&#xFF1B;&#x516C;&#x94A5;&#x52A0;&#x5BC6;&#xFF0C;&#x79C1;&#x94A5;&#x89E3;&#x5BC6;&#x662F;&#x6570;&#x636E;&#x52A0;&#x5BC6;
<ul>
<li>RSA: &#x8D28;&#x6570;&#x8BA1;&#x7B97;</li>
<li>ECC(Elliptic Curve Cryptography): &#x692D;&#x5706;&#x66F2;&#x7EBF;</li>
<li>&#x56FD;&#x5BC6;SM2: &#x4E5F;&#x662F;&#x692D;&#x5706;&#x66F2;&#x7EBF;</li>
</ul>
</li>
<li>hash &#x7B97;&#x6CD5;&#xFF0C;&#x628A;&#x6D88;&#x606F; Mapping &#x5230;&#x4E00;&#x4E2A;&#x6709;&#x9650;&#x96C6;&#x8BA1;&#x7B97; hash &#x503C;&#xFF0C;&#x4E0D;&#x53EF;&#x9006;&#xFF0C;&#x4E00;&#x822C;&#x7528;&#x4F5C;&#x6821;&#x9A8C;
<ul>
<li>MD5(Message-Digest Algorithm 5): &#x5DF2;&#x88AB;&#x7834;&#x89E3;</li>
<li>SHA(Secure Hash Algorithm): &#x63A8;&#x8350;&#x7528; SHA-256&#x53CA;&#x4EE5;&#x4E0A;</li>
<li>&#x56FD;&#x5BC6;SM3(SM3 Cryptographic Algorithm): &#x548C; SHA-256&#x5F3A;&#x5EA6;&#x5DEE;&#x4E0D;&#x591A;</li>
</ul>
</li>
</ul>
<p>&#x9664;&#x4E86;&#x5BC6;&#x7801;&#x5B66;&#x5916;&#xFF0C;&#x5728;&#x5B9E;&#x9645;&#x7684;&#x843D;&#x5730;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x8BA4;&#x8BC1;&#x95EE;&#x9898;&#x5B58;&#x5728;&#x7684;&#x95EE;&#x9898;&#x6709;&#x54EA;&#x4E9B;&#xFF1F; &#x8BA4;&#x8BC1;&#x7684;&#x98CE;&#x9669;&#x6709;&#x6BD4;&#x5982;&#x5F31;&#x53E3;&#x4EE4;&#xFF0C;&#x5BC6;&#x7801;&#x6CC4;&#x9732;&#x7B49;&#x7B49;&#x3002;&#x800C;&#x5728;&#x5B9E;&#x9645;&#x4E2D;&#x8BA4;&#x8BC1;&#x901A;&#x5E38;&#x7528;&#x7684;&#x7CFB;&#x7EDF;&#x662F;&#x5355;&#x70B9;&#x767B;&#x5F55;&#x7CFB;&#x7EDF;&#xFF0C;&#x7279;&#x522B;&#x662F;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x548C;&#x591A;&#x5E94;&#x7528;&#x5E73;&#x53F0;&#x7684;&#x7CFB;&#x7EDF;&#x3002;&#x800C;&#x9488;&#x5BF9;&#x5185;&#x90E8;&#x8BA4;&#x8BC1;&#x4E00;&#x822C;&#x662F; LDAP &#x7528;&#x7684;&#x6BD4;&#x8F83;&#x591A;&#x3002;&#x5178;&#x578B;&#x7684; SSO &#x6709;&#xFF1A;</p>
<ul>
<li>CAS</li>
<li>JWT</li>
<li>OAuth</li>
<li>OpenID</li>
</ul>
<p>&#x9664;&#x4E86;&#x8BA4;&#x8BC1;&#x8981;&#x505A;&#x597D;&#x4E4B;&#x5916;&#xFF0C;&#x6388;&#x6743;&#x4E5F;&#x8981;&#x505A;&#x597D;&#x3002;&#x6388;&#x6743;&#x65E0;&#x975E;&#x662F;&#x5BF9; subjective&#xFF08;&#x4E3B;&#x4F53;&#xFF09; &#x5BF9; objective&#xFF08;&#x5BA2;&#x4F53;&#xFF09; &#x7684; verb&#xFF08;&#x52A8;&#x8BCD;&#xFF09; &#x5141;&#x8BB8;&#x6216;&#x62D2;&#x7EDD;&#xFF0C;&#x800C;&#x9488;&#x5BF9;&#x8FD9;&#x4E24;&#x8005;&#x4E4B;&#x95F4;&#xFF0C;&#x4E0D;&#x540C;&#x7684;&#x573A;&#x666F;&#x5C31;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x6A21;&#x578B;&#x4E86;&#xFF0C;&#x5E38;&#x89C1;&#x7684;&#x6709;&#xFF1A;</p>
<ul>
<li>DAC(Discretionary Access Control) &#x81EA;&#x4E3B;&#x8BBF;&#x95EE;&#x63A7;&#x5236;:  objective &#x7684;&#x6240;&#x6709;&#x8005;&#x51B3;&#x5B9A;&#x8BBF;&#x95EE;&#x7684;&#x6743;&#x9650;&#xFF0C;&#x6BD4;&#x5982; linux &#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</li>
<li>role-BAC: &#x57FA;&#x4E8E;&#x89D2;&#x8272;&#x7684;&#x8BBF;&#x95EE;&#x63A7;&#x5236;&#xFF0C;&#x6BD4;&#x5982; kubernetes &#x4E2D;&#xFF0C;serviceaccount &#x7684;&#x6743;&#x9650;&#x7531;&#x4ED6; rolebinding &#x5230;&#x7684; role &#x51B3;&#x5B9A;</li>
<li>rule-BAC: &#x57FA;&#x4E8E;&#x89C4;&#x5219;&#x7684;&#x8BBF;&#x95EE;&#x63A7;&#x5236;&#xFF0C;&#x6BD4;&#x5982; iptables,&#x4E0D;&#x7B26;&#x5408;&#x89C4;&#x5219;&#x5C31; deny</li>
<li>MAC(Mandatory Access Control): &#x5F3A;&#x5236;&#x8BBF;&#x95EE;&#x63A7;&#x5236;&#xFF0C;&#x5BF9; subject &#x548C; object &#x90FD;&#x6253;&#x6807;&#x7B7E;&#xFF0C;&#x6839;&#x636E;&#x6807;&#x7B7E;&#x5236;&#x5B9A;&#x8BBF;&#x95EE;&#x63A7;&#x5236;&#x7B56;&#x7565;&#xFF0C;&#x6BD4;&#x5982; selinux &#x4F7F;&#x7528;&#x7684;&#x5C31;&#x662F;&#x8FD9;&#x4E2A;</li>
</ul>
<p>3A &#x539F;&#x5219;&#x7684;&#x6700;&#x540E;&#x4E00;&#x70B9;&#x5219;&#x662F; Audit&#xFF0C;&#x9700;&#x8981;&#x8BB0;&#x5F55;&#x4E0B;&#x6211;&#x4EEC;&#x5230;&#x5E95;&#x505A;&#x4E86;&#x4EC0;&#x4E48;&#xFF0C;&#x6BD4;&#x5982;&#x8FD0;&#x7EF4;&#x4E2D;&#x5FC5;&#x5907;&#x7684; ELK&#x4E00;&#x5957;&#x65E5;&#x5FD7;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x5C31;&#x662F;&#x8D77;&#x5230;&#x5BA1;&#x8BA1;&#x7684;&#x4F5C;&#x7528;&#x3002;&#x53E6;&#x5916;&#x73B0;&#x5728;&#x8FD0;&#x7EF4;&#x5E38;&#x63D0;&#x7684; AIOps&#xFF0C;&#x4E5F;&#x4F1A;&#x7528;&#x5230;&#x673A;&#x5668;&#x5B66;&#x4E60;&#x7684;&#x4E00;&#x4E9B;&#x624B;&#x6BB5;&#x5BF9;&#x65E5;&#x5FD7;&#x8FDB;&#x884C;&#x5F02;&#x5E38;&#x5206;&#x6790;&#x548C;&#x505A;&#x4E1A;&#x52A1;&#x98CE;&#x63A7;&#xFF0C;&#x8FD9;&#x4E9B;&#x90FD;&#x662F;&#x5C5E;&#x4E8E; Audit&#x3002;</p>
<h2 id="0x013">0x013 &#x5A01;&#x80C1;&#x8BC4;&#x4F30;</h2>
<p>&#x5728;&#x6211;&#x4EEC;&#x4E86;&#x89E3;&#x4E86;&#x5B89;&#x5168;&#x7684;&#x672C;&#x8D28;&#x662F;&#x6570;&#x636E;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x8981;&#x5982;&#x4F55;&#x4FDD;&#x62A4;&#x5462;&#xFF1F;&#x8FD9;&#x4E9B;&#x6570;&#x636E;&#x53C8;&#x9762;&#x4E34;&#x7740;&#x54EA;&#x4E9B;&#x98CE;&#x9669;&#xFF1F;&#x8FD9;&#x5C31;&#x9700;&#x8981;&#x5A01;&#x80C1;&#x98CE;&#x9669;&#x8BC4;&#x4F30;&#x7684;&#x5FC5;&#x8981;&#x3002;&#x5A01;&#x80C1;&#x8BC4;&#x4F30;&#x6709;&#x4E09;&#x4E2A;&#x6B65;&#x9AA4;&#xFF1A;</p>
<ul>
<li>&#x8BC6;&#x522B;&#x6570;&#x636E;&#xFF1A;&#x6211;&#x4EEC;&#x9996;&#x5148;&#x8981;&#x77E5;&#x9053;&#x6570;&#x636E;&#x5728;&#x54EA;&#x91CC;&#xFF0C;&#x6BD4;&#x5982;&#x6211;&#x4EEC;&#x7684;  Web &#x670D;&#x52A1;&#x5668;&#xFF0C;&#x8FD9;&#x53F0;&#x673A;&#x5668;&#x4E0A;&#x653E;&#x7740;&#x7740;&#x6211;&#x4EEC;&#x7684;&#x4E1A;&#x52A1;&#xFF0C;&#x90A3;&#x4E48;&#x8FD9;&#x53F0;&#x670D;&#x52A1;&#x5668;&#x5C31;&#x662F;&#x6211;&#x4EEC;&#x7684;&#x8D44;&#x4EA7;&#xFF0C;&#x540C;&#x65F6;&#x6211;&#x4EEC;&#x4E5F;&#x6839;&#x636E;&#x8D44;&#x4EA7;&#x7684;&#x4E0D;&#x540C;&#x7B49;&#x7EA7;&#x6765;&#x5B9E;&#x65BD;&#x4E0D;&#x540C;&#x7684;&#x4FDD;&#x62A4;&#x63AA;&#x65BD;</li>
<li>&#x8BC6;&#x522B;&#x653B;&#x51FB;&#xFF1A;&#x9ED1;&#x5BA2;&#x4F1A;&#x901A;&#x8FC7;&#x54EA;&#x4E9B;&#x624B;&#x6BB5;&#x6765;&#x8FDB;&#x884C;&#x653B;&#x51FB;&#xFF0C;&#x66B4;&#x529B;&#x7834;&#x89E3;&#xFF0C;&#x6CE8;&#x5165;&#x8FD8;&#x662F;&#x793E;&#x5DE5;&#xFF1F;&#x6211;&#x4EEC;&#x8FD9;&#x53F0;&#x670D;&#x52A1;&#x5668;&#x7684;&#x66B4;&#x9732;&#x9762;&#x5728;&#x54EA;&#x91CC;&#xFF1F;&#x4E0A;&#x9762;&#x5F00;&#x542F;&#x7684;&#x54EA;&#x4E9B;&#x7AEF;&#x53E3;&#xFF0C;&#x9ED1;&#x5BA2;&#x4F1A;&#x600E;&#x4E48;&#x653B;&#x8FDB;&#x6765;&#xFF1F;</li>
<li>&#x8BC6;&#x522B;&#x6F0F;&#x6D1E;&#xFF1A;&#x8FD9;&#x53F0;&#x670D;&#x52A1;&#x5668;&#x5B58;&#x5728;&#x54EA;&#x4E9B;&#x6F0F;&#x6D1E;&#xFF0C;&#x6211;&#x4EEC;&#x7528;&#x5230;&#x4E86;&#x4EC0;&#x4E48;&#x7EC4;&#x4EF6;&#xFF1F;struts2 &#x8FD8;&#x662F; spring&#xFF1F;&#x6709;&#x6CA1;&#x6709;&#x5B57;&#x7B26;&#x4E32;&#x62FC;&#x63A5;SQL&#x8BED;&#x53E5;&#xFF1F;&#x8FD9;&#x4E9B;&#x90FD;&#x662F;&#x53EF;&#x80FD;&#x5B58;&#x5728;&#x7684;&#x6F0F;&#x6D1E;</li>
</ul>
<p>&#x5728;&#x5BF9;&#x9762;&#x4E34;&#x7684;&#x5A01;&#x80C1;&#x6709;&#x4E86;&#x4E00;&#x4E2A;&#x5927;&#x6982;&#x7684;&#x8BC4;&#x4F30;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x624D;&#x597D;&#x63A8;&#x52A8;&#x5B89;&#x5168;&#x548C;&#x89E3;&#x51B3;&#x98CE;&#x9669;&#xFF0C;&#x53E6;&#x5916;&#x5982;&#x679C;&#x8BF4;&#x7684;&#x76F4;&#x63A5;&#x4E00;&#x70B9;&#xFF0C;&#x6211;&#x4EEC;&#x5FC5;&#x987B;&#x6709;&#x5BF9;&#x6574;&#x4E2A;&#x8D44;&#x4EA7;&#x9762;&#x4E34;&#x7684;&#x98CE;&#x9669;&#x7684;&#x628A;&#x63A7;&#x80FD;&#x529B;&#xFF0C;&#x624D;&#x597D;&#x62FF;&#x5230;&#x9884;&#x7B97;&#x5E76;&#x505A;&#x597D;&#x516C;&#x53F8;&#x7684;&#x5B89;&#x5168;&#x9884;&#x6848;&#xFF0C;&#x6BD5;&#x7ADF;&#x94B1;&#x591A;&#x597D;&#x529E;&#x4E8B;&#x5450;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Linux 性能分析总结之网络（六）]]></title><description><![CDATA[Linux 网络 I/O 学习分析笔记]]></description><link>https://nomansky.top/linux-xing-neng-fen-xi-zong-jie-zhi-wang-luo-liu/</link><guid isPermaLink="false">5dfdb32ec9c64a000149b583</guid><category><![CDATA[Linux性能]]></category><category><![CDATA[TCP/IP]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Sat, 21 Dec 2019 05:56:36 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="0x00">0x00 &#x524D;&#x8A00;</h1>
<p>&#x5728;&#x4E0A;&#x7BC7;&#x5B66;&#x4E60;&#x7B14;&#x8BB0;&#x4E2D;&#x6211;&#x603B;&#x7ED3;&#x4E86; I/O &#x5B66;&#x4E60;&#x7B14;&#x8BB0;&#xFF0C;&#x672C;&#x7BC7;&#x4F1A;&#x603B;&#x7ED3; Linux &#x7F51;&#x7EDC;&#x7684;&#x6027;&#x80FD;&#x4F18;&#x5316;&#x5B66;&#x4E60;&#x7B14;&#x8BB0;&#x3002;&#x5728;&#x4E0A;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#x6211;&#x4EEC;&#x63D0;&#x5230;&#x4E86;&#x8BF4;&#x78C1;&#x76D8; I/O &#x5C31;&#x662F;&#x8BA1;&#x7B97;&#x673A;&#x7684;&#x6700;&#x7EC8;&#x6570;&#x636E;&#x6301;&#x4E45;&#x5316;&#x7684;&#x5730;&#x65B9;&#xFF0C;&#x5982;&#x4E0B;&#x56FE;&#x5728;&#x51AF;&#x8BFA;&#x4F9D;&#x66FC;&#x67B6;&#x6784;&#x4E2D;&#x4E5F;&#x5C31;&#x662F;&#x5BF9;&#x5E94;&#x8F93;&#x5165;&#x8F93;&#x51FA;&#x7684;&#x8BBE;&#x5907;&#xFF0C;&#x800C;&#x5B58;&#x50A8;&#x5668;&#x5219;&#x5C31;&#x662F;&#x5185;&#x5B58;&#x3002;<br>
<img src="http://img.nomansky.top/pic/20191221/1.jpg" alt="&#x51AF;&#x8BFA;&#x4F9D;&#x66FC;&#x67B6;&#x6784;" loading="lazy"><br>
&#x5728;&#x5355;&#x53F0;&#x8BA1;&#x7B97;&#x673A;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EF;&#x4EE5;&#x8BF4;&#x8BA1;&#x7B97;&#x8FC7;&#x7A0B;&#x5C31;&#x662F;&#x5148;&#x4ECE;&#x8F93;&#x5165;&#x8BBE;&#x5907;&#x83B7;&#x53D6;&#x6307;&#x4EE4;&#x548C;&#x6570;&#x636E;&#xFF0C;&#x5728;&#x7ECF;&#x8FC7;&#x8FD0;&#x7B97;&#x5668;&#x7684;&#x5904;&#x7406;&#x540E;&#xFF0C;&#x6700;&#x7EC8;&#x5C06;&#x8FD0;&#x7B97;&#x7ED3;&#x679C;&#x8F93;&#x51FA;&#x5230;&#x8F93;&#x51FA;&#x8BBE;&#x5907;&#x4E0A;&#xFF0C;&#x800C; I/O &#x7684;&#x4EA7;&#x751F;&#x5219;&#x662F;&#x5728;&#x548C;&#x8F93;&#x5165;&#x548C;&#x8F93;&#x51FA;&#x8BBE;&#x5907;&#x6253;&#x4EA4;&#x9053;&#x4E86;&#x3002;&#x5982;&#x679C;&#x662F;&#x591A;&#x53F0;&#x8BA1;&#x7B97;&#x673A;&#xFF0C;&#x8BA1;&#x7B97;&#x673A;&#x4E4B;&#x95F4;&#x5982;&#x4F55;&#x4E92;&#x76F8;&#x6C9F;&#x901A;&#x5462;&#xFF1F;&#x90A3;&#x4E48;&#x5C31;&#x9700;&#x8981;&#x901A;&#x8FC7;&#x7F51;&#x7EDC;&#x6765;&#x8FDE;&#x63A5;&#x5404;&#x4E2A;&#x8BA1;&#x7B97;&#x673A;&#x4E86;&#x3002;</p>
<p>&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x4E4B;&#x95F4;&#x7684;&#x6C9F;&#x901A;&#xFF0C;&#x65E0;&#x975E;&#x4E5F;&#x5C31;&#x662F;&#x6307;&#x4EE4;&#x548C;&#x6570;&#x636E;&#x5C31;&#x662F;&#x8FD9;&#x4E24;&#x79CD;&#x3002;&#x6BD4;&#x5982;&#x6211;&#x8BBF;&#x95EE;&#x4E00;&#x4E2A; Web &#x7F51;&#x7AD9;&#xFF0C;&#x672C;&#x8D28;&#x4E0A;&#x4E0D;&#x5C31;&#x662F;&#x4ECE;&#x7F51;&#x7AD9;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#x83B7;&#x53D6;&#x6570;&#x636E;&#x5417;&#xFF1F;&#x53C8;&#x6BD4;&#x5982;&#x5728;&#x5206;&#x5E03;&#x5F0F;&#x7684;&#x8BA1;&#x7B97;&#x96C6;&#x7FA4;&#x4E2D;&#xFF0C;master &#x8282;&#x70B9;&#x5411; slave &#x8282;&#x70B9;&#x4E0B;&#x53D1;&#x8BA1;&#x7B97;&#x4EFB;&#x52A1;&#xFF0C;&#x8FD9;&#x5C31;&#x8F93;&#x51FA;&#x6307;&#x4EE4;&#x5440;&#x3002;&#x662F;&#x4E0D;&#x662F;&#x611F;&#x89C9;&#x7F51;&#x7EDC;&#x548C;&#x78C1;&#x76D8; I/O &#x5F88;&#x76F8;&#x4F3C;&#xFF1F;&#x6CA1;&#x9519;&#xFF0C;&#x4ED6;&#x4EEC;&#x5728;&#x51AF;&#x8BFA;&#x4F9D;&#x66FC;&#x7ED3;&#x679C;&#x4E2D;&#x90FD;&#x662F;&#x4F5C;&#x4E3A;&#x8F93;&#x5165;&#x8F93;&#x51FA;&#x8BBE;&#x5907;&#xFF0C;&#x6240;&#x4EE5;&#x4ED6;&#x4EEC;&#x6709;&#x5F88;&#x591A;&#x76F8;&#x4F3C;&#x4E4B;&#x5904;&#xFF0C;&#x6BD4;&#x5982;&#x5728; Linux &#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;&#x7F51;&#x7EDC; I/O &#x7684;&#x64CD;&#x4F5C;&#x548C;&#x6587;&#x4EF6;&#x64CD;&#x4F5C;&#x5F88;&#x76F8;&#x4F3C;&#xFF0C;&#x4F46;&#x7F51;&#x7EDC;&#x7684;&#x5C42;&#x6B21;&#x6BD4;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF; I/O &#x66F4;&#x591A;&#xFF0C;&#x6240;&#x4EE5;&#x4F1A;&#x66F4;&#x52A0;&#x590D;&#x6742;&#xFF0C;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x65E0;&#x6CD5;&#x6982;&#x8FF0;&#xFF0C;&#x672C;&#x7B14;&#x8BB0;&#x53EA;&#x662F;&#x8BB0;&#x5F55;&#x4E00;&#x4E9B;&#x8981;&#x70B9;&#x3002;</p>
<h1 id="0x01">0x01 &#x7F51;&#x7EDC;&#x57FA;&#x7840;</h1>
<h2 id="0x0100">0x0100 &#x6536;&#x53D1;&#x6D41;&#x7A0B;</h2>
<p>&#x7F51;&#x7EDC;&#x548C;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x4E00;&#x6837;&#xFF0C;&#x4E3A;&#x4E86;&#x89E3;&#x8026;&#x5F02;&#x6784;&#x8BBE;&#x5907;&#xFF0C;&#x90FD;&#x662F;&#x5206;&#x5C42;&#x7684;&#xFF0C;&#x5206;&#x5C42;&#x5728;&#x7F51;&#x7EDC;&#x4E2D;&#x4E3B;&#x8981;&#x5206;&#x4E3A; OSI &#x548C; TCP/IP &#x6A21;&#x578B;&#x3002;&#x5982;&#x4E0B;&#x6240;&#x793A;<br>
<img src="http://img.nomansky.top/pic/20191221/2.png" alt loading="lazy"><br>
&#x800C;&#x81EA;&#x7136;&#x548C;&#x78C1;&#x76D8;&#x4E00;&#x6837;&#xFF0C;Linux &#x5185;&#x6838;&#x5728;&#x5904;&#x7406;&#x7F51;&#x7EDC;&#x5305;&#x7684;&#x65F6;&#x5019;&#x5BF9;&#x4E0D;&#x540C;&#x7684;&#x5C42;&#x4F1A;&#x8FDB;&#x884C;&#x4E0D;&#x540C;&#x7684;&#x5904;&#x7406;&#x3002;<br>
<img src="http://img.nomansky.top/pic/20191221/3.png" alt loading="lazy"></p>
<ul>
<li>&#x5E94;&#x7528;&#x5C42;&#xFF1A; &#x5185;&#x6838;&#x6001;&#x7CFB;&#x7EDF;&#x8C03;&#x7528;&#xFF0C;&#x901A;&#x8FC7; socket &#x6765;&#x53D1;&#x5305;</li>
<li>&#x4F20;&#x8F93;&#x5C42;&#xFF1A; &#x5BF9;&#x5E94;&#x7528;&#x5C42;&#x7684;&#x5305;&#x8FDB;&#x884C;&#x5C01;&#x88C5;&#xFF0C;&#x662F;&#x4E94;&#x5143;&#x7EC4;&#x7684;&#x62BD;&#x8C61;</li>
<li>IP&#x5C42;&#xFF1A;  IP &#x62A5;&#x6587;&#x53D1;&#x9001;&#xFF0C;&#x8DEF;&#x7531;</li>
<li>&#x94FE;&#x8DEF;&#x5C42;&#xFF1A; &#x5C01;&#x5E27;&#xFF0C;mac &#x5BFB;&#x5740;</li>
<li>&#x7F51;&#x5361;&#x9A71;&#x52A8;&#xFF1A; &#x6536;&#x53D1;&#x5305;&#xFF0C;&#x7F51;&#x5361;&#x9A71;&#x52A8;&#x6536;&#x53D1;&#x5305;&#x4F1A;&#x901A;&#x8FC7;&#x786C;&#x4E2D;&#x65AD;&#x548C;&#x5185;&#x6838;&#x4EA4;&#x4E92;</li>
</ul>
<h3 id="0x0101">0x0101 &#x6536;&#x5305;</h3>
<ol>
<li>&#x7F51;&#x5361; DMA&#xFF08;&#x53EF;&#x4EE5;&#x7406;&#x89E3;&#x4E3A;&#x76F4;&#x63A5;&#x8BFB; I/O &#x5230;&#x5185;&#x5B58;&#xFF0C;&#x51CF;&#x5C11; cpu &#x7684;&#x4ECB;&#x5165;&#xFF09; &#x628A;&#x6536;&#x5230;&#x7684;&#x7F51;&#x7EDC;&#x5E27;&#x653E;&#x5230;&#x6536;&#x5305;&#x961F;&#x5217;&#xFF08;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#xFF09;&#xFF0C;&#x786C;&#x4E2D;&#x65AD;&#x901A;&#x77E5;&#x4E2D;&#x65AD;&#x7A0B;&#x5E8F;&#x5904;&#x7406;</li>
<li>&#x4E2D;&#x65AD;&#x7A0B;&#x5E8F;&#x5206;&#x914D;&#x4E00;&#x4E2A;&#x53EB; sk_buff  &#x7684; socket buffer&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;&#x62F7;&#x8D1D;&#x7F51;&#x7EDC;&#x5E27;&#x5230;&#x8FD9;&#x4E2A;&#x7ED3;&#x6784;&#xFF0C;&#x7136;&#x540E;&#x8F6F;&#x4E2D;&#x65AD;&#x901A;&#x77E5;&#x5185;&#x6838;&#x6765;&#x5904;&#x7406;&#x7F51;&#x7EDC;&#x5E27;&#x4E86;</li>
<li>&#x5185;&#x6838;&#x83B7;&#x5F97;&#x7F51;&#x7EDC;&#x5E27;&#x540E;&#xFF0C;&#x5C31;&#x8DDF;&#x5265;&#x6D0B;&#x8471;&#x4E00;&#x6837;&#xFF0C;&#x4E00;&#x5C42;&#x5C42;&#x7684;&#x5265;&#x5F00;
<ol>
<li>&#x6570;&#x636E;&#x94FE;&#x8DEF;&#x5C42;&#xFF1A;&#x68C0;&#x67E5;&#x62A5;&#x6587;&#xFF0C;&#x53BB;&#x6389;&#x5E27;&#x5934;&#x5E27;&#x5C3E;&#xFF0C;&#x770B; ip &#x5C42;&#x662F;&#x4EC0;&#x4E48;&#x62A5;&#x6587;&#xFF0C;&#x5982;&#x679C;&#x662F; 6 &#x5C31;&#x4EA4;&#x7ED9;&#x4E0A;&#x5C42; ipv6 &#x5BF9;&#x5E94;&#x7684;&#x534F;&#x8BAE;&#x5904;&#x7406;&#xFF0C;&#x5982;&#x679C;&#x662F; 4 &#x5C31;&#x4EA4;&#x7ED9; 4</li>
<li>IP&#x5C42;&#xFF1A; &#x5224;&#x65AD;&#x7F51;&#x7EDC;&#x5305;&#x8D70;&#x5411;&#xFF0C;&#x662F;&#x8F6C;&#x53D1;&#x8FD8;&#x662F;&#x4EA4;&#x7ED9;&#x4E0A;&#x5C42;&#x5904;&#x7406;&#x3002;&#x6BD4;&#x5982; iptable &#x4E2D;&#x7684; forward &#x94FE;&#x5C31;&#x662F;&#x8F6C;&#x53D1;&#x94FE;&#xFF0C;&#x5982;&#x679C;&#x8981;&#x4EA4;&#x7ED9;&#x4E0A;&#x5C42;&#x5219;&#x786E;&#x5B9A;&#x4E0A;&#x5C42;&#x534F;&#x8BAE;&#x662F; tcp/udp &#x7B49;&#xFF0C;&#x5E76;&#x53BB;&#x6389;&#x5934;&#x5C3E;</li>
<li>&#x4F20;&#x8F93;&#x5C42;&#xFF1A;&#x6839;&#x636E; tcp/udp &#x5934;&#xFF0C;&#x6839;&#x636E;&#x56DB;&#x5143;&#x7EC4;&#x627E;&#x5230;&#x5BF9;&#x5E94;&#x7684; socket&#xFF0C;&#x7136;&#x540E;&#x628A;&#x6570;&#x636E;&#x62F7;&#x8D1D;&#x5230; socket &#x91CC;</li>
<li>&#x5E94;&#x7528;&#x5C42;&#xFF1A;&#x64CD;&#x4F5C; socket &#x8BFB;&#x53D6;&#x6570;&#x636E;</li>
</ol>
</li>
</ol>
<h3 id="0x0102">0x0102 &#x53D1;&#x5305;</h3>
<ol>
<li>&#x5E94;&#x7528;&#x5C42;&#xFF1A;&#x901A;&#x8FC7;&#x7CFB;&#x7EDF;&#x8C03;&#x7528;&#xFF0C;&#x628A;&#x6570;&#x636E;&#x5305;&#x5199;&#x5230; socket &#x91CC;</li>
<li>&#x4F20;&#x8F93;&#x5C42;&#xFF1A;&#x589E;&#x52A0; tcp &#x5934;</li>
<li>ip &#x5C42;&#xFF1A;&#x589E;&#x52A0; ip &#x5934;&#xFF0C;&#x8DEF;&#x7531;&#x5BFB;&#x5740;&#xFF0C;&#x627E;&#x5230;&#x4E0B;&#x4E00;&#x8DF3;&#xFF0C;&#x6839;&#x636E; MTU &#x5206;&#x7247;</li>
<li>&#x6570;&#x636E;&#x94FE;&#x8DEF;&#x5C42;&#xFF1A;&#x6839;&#x636E; mac &#x5730;&#x5740;&#x5BFB;&#x5740;&#xFF0C;&#x627E;&#x5230;&#x4E0B;&#x4E00;&#x8DF3;&#x7684; mac&#xFF0C;&#x589E;&#x52A0;&#x5934;&#x5C3E;&#xFF0C;&#x653E;&#x5230;&#x53D1;&#x5305;&#x961F;&#x5217;&#xFF0C;&#x8F6F;&#x4E2D;&#x65AD;&#x901A;&#x77E5;&#x4E2D;&#x65AD;&#x7A0B;&#x5E8F;&#x9A71;&#x52A8;</li>
<li>&#x7269;&#x7406;&#x5C42;&#xFF1A;&#x9A71;&#x52A8;&#x7A0B;&#x5E8F; DMA &#x8BFB;&#x53D6;&#x7F51;&#x7EDC;&#x5E27;&#xFF0C;&#x901A;&#x8FC7;&#x7269;&#x7406;&#x7F51;&#x5361;&#x901A;&#x8FC7;&#x8109;&#x51B2;&#x4FE1;&#x53F7;&#x6216;&#x5149;&#x4FE1;&#x53F7;&#x53D1;&#x5305;</li>
</ol>
<h2 id="0x0110">0x0110 &#x6027;&#x80FD;&#x6307;&#x6807;</h2>
<ol>
<li>&#x5E26;&#x5BBD;&#xFF1A; &#x6700;&#x5927;&#x4F20;&#x8F93;&#x901F;&#x7387;</li>
<li>&#x541E;&#x5410;&#x91CF;&#xFF1A; &#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x91CF;</li>
<li>&#x5EF6;&#x65F6;&#xFF1A; &#x53D1;&#x51FA;&#x8BF7;&#x6C42;&#x5230;&#x6536;&#x5230;&#x54CD;&#x5E94;&#x7684;&#x65F6;&#x95F4;</li>
<li>PPS&#xFF1A; Packet Per Second&#xFF0C;&#x6BCF;&#x79D2;&#x53D1;&#x5305;&#x91CF;</li>
<li>&#x7F51;&#x7EDC;&#x53EF;&#x7528;&#x6027;</li>
<li>&#x5E76;&#x53D1;&#x6570;</li>
<li>&#x4E22;&#x5305;&#x7387;</li>
<li>&#x91CD;&#x4F20;&#x7387;</li>
</ol>
<h1 id="0x02io">0x02 &#x7F51;&#x7EDC; I/O &#x539F;&#x7406;</h1>
<p>I/O&#x901A;&#x77E5;&#x65B9;&#x5F0F;&#xFF1A;</p>
<ol>
<li>&#x6C34;&#x5E73;&#x89E6;&#x53D1;&#xFF1A; &#x5E94;&#x7528;&#x7A0B;&#x5E8F; &#x53EF;&#x4EE5;&#x968F;&#x65F6;&#x8BFB;fd</li>
<li>&#x8FB9;&#x7F18;&#x89E6;&#x53D1;&#xFF1A; &#x53EA;&#x80FD;&#x5728; fd &#x53D1;&#x751F;&#x53D8;&#x5316;&#x662F;&#x624D;&#x53EF;&#x4EE5;&#x8BFB;</li>
</ol>
<p>I/O &#x591A;&#x8DEF;&#x590D;&#x7528;&#xFF1A;</p>
<ol>
<li>&#x975E;&#x963B;&#x585E; I/O &#x6C34;&#x5E73;&#x89E6;&#x53D1;&#xFF1A;
<ul>
<li>select&#xFF1A; fd &#x6570;&#x91CF;&#x6709;&#x9650;&#x5236;&#xFF0C;&#x8F6E;&#x8BE2;&#x68C0;&#x67E5; fd&#x3002;O(n)</li>
<li>poll&#xFF1A; &#x65E0; fd &#x9650;&#x5236;&#xFF0C;&#x8F6E;&#x8BE2;&#x68C0;&#x67E5;fd&#x3002;O(n)</li>
</ul>
</li>
<li>&#x975E;&#x963B;&#x585E; I/O&#x8FB9;&#x7F18;&#x89E6;&#x53D1;&#xFF1A;
<ul>
<li>epoll&#xFF1A; &#x5185;&#x6838;&#x7EA2;&#x9ED1;&#x6811;&#x7BA1;&#x7406; fd&#xFF0C;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;</li>
</ul>
</li>
<li>&#x5F02;&#x6B65; I/O&#xFF1A;&#x5F02;&#x6B65;&#x901A;&#x77E5;&#xFF0C;&#x901A;&#x8FC7;&#x4FE1;&#x53F7;&#x6216;&#x8005;&#x56DE;&#x8C03;</li>
</ol>
<p>&#x5DE5;&#x4F5C;&#x6A21;&#x578B;&#xFF1A;</p>
<ul>
<li>&#x4E3B;&#x8FDB;&#x7A0B; + &#x591A;&#x4E2A; workder &#x5B50;&#x8FDB;&#x7A0B;&#xFF1A;nginx
<ul>
<li>&#x4E3B; bind + listen &#x521D;&#x59CB;&#x5316; socket</li>
<li>&#x5B50; accept + epoll_wait &#x90FD;&#x7ED1;&#x5B9A;&#x8FD9;&#x4E2A; socket</li>
<li>&#x6709;&#x60CA;&#x7FA4;&#x95EE;&#x9898;&#xFF0C;&#x9700;&#x8981;&#x9501;&#x673A;&#x5236;&#x6765;&#x786E;&#x4FDD;&#x53EA;&#x6709;&#x4E00;&#x4E2A; worker &#x8282;&#x70B9;&#x5524;&#x9192;</li>
</ul>
</li>
<li>&#x591A;&#x8FDB;&#x7A0B;&#x76D1;&#x542C;&#x540C;&#x4E2A;&#x7AEF;&#x53E3;&#xFF0C;&#x9700;&#x8981;&#x5F00;&#x542F;&#x7AEF;&#x53E3;&#x91CD;&#x7528;&#xFF0C;&#x7B49;&#x4E8E;&#x662F;&#x5185;&#x6838;&#x5C06;&#x8BE5;&#x7AEF;&#x53E3;&#x7684;&#x8BF7;&#x6C42;&#x5206;&#x53D1;&#x5230;&#x4E0D;&#x540C;&#x7684; worker &#x8FDB;&#x7A0B;&#x4E0A;</li>
</ul>
<p>&#x9AD8;&#x6027;&#x80FD;&#x7F51;&#x7EDC;&#x6A21;&#x578B;&#xFF1A;</p>
<ul>
<li>DPDK&#xFF1A;&#x8DF3;&#x8FC7;&#x5185;&#x6838;&#x7F51;&#x7EDC;&#x534F;&#x8BAE;&#x6808;&#xFF0C;&#x76F4;&#x63A5;&#x7528;&#x6237;&#x6001;&#x8F6E;&#x8BE2;</li>
<li>XDP&#xFF1A;&#x5728;&#x5185;&#x6838;&#x7F51;&#x7EDC;&#x534F;&#x8BAE;&#x6808;&#x524D;&#x5904;&#x7406;&#x7F51;&#x7EDC;&#x5305;</li>
</ul>
<h1 id="0x03">0x03 &#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x65B9;&#x5F0F;</h1>
<p>&#x7F51;&#x7EDC;&#x4E5F;&#x662F;&#x5206;&#x5C42;&#x7684;&#xFF0C;&#x4E0D;&#x540C;&#x7684;&#x5C42;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x4F18;&#x5316;&#x624B;&#x6BB5;</p>
<ol>
<li>&#x5E94;&#x7528;&#x5C42;&#xFF1A;
<ul>
<li>&#x4F18;&#x5316; I/O &#x6A21;&#x578B;</li>
<li>&#x957F;&#x8FDE;&#x63A5;</li>
<li>DNS &#x7F13;&#x5B58;</li>
</ul>
</li>
<li>socket&#xFF1A; &#x8C03;&#x6574;&#x5185;&#x6838;&#x53C2;&#x6570;</li>
<li>&#x4F20;&#x8F93;&#x5C42;&#xFF1A; &#x4F18;&#x5316;&#x4F20;&#x8F93;&#x5C42;&#x534F;&#x8BAE;</li>
<li>&#x7F51;&#x7EDC;&#x5C42;&#xFF1A;&#x8DEF;&#x7531;&#x7B49;</li>
<li>&#x94FE;&#x8DEF;&#x5C42;&#xFF1A;&#x6536;&#x53D1;&#x5305;</li>
</ol>
<p>&#x57FA;&#x672C;&#x4E0A;&#x5C31;&#x662F;&#xFF1A;</p>
<ol>
<li>&#x5148;&#x67E5;&#x770B;&#x4E00;&#x6CE2;&#x7F51;&#x7EDC;&#x6027;&#x80FD;&#x6307;&#x6807;&#xFF1A; sar&#xFF0C;ip,ss &#x7B49;&#x5DE5;&#x5177;</li>
<li>tcpdump,wireshark&#x6293;&#x5305;&#xFF0C;&#x5206;&#x6790;&#x5F02;&#x5E38;&#x7F51;&#x7EDC;&#x6D41;&#x91CF;&#x60C5;&#x51B5;</li>
<li>&#x8C03;&#x6574;&#x5BF9;&#x5E94;&#x5185;&#x6838;&#x53C2;&#x6570;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x53EF;&#x4EE5;&#x89E3;&#x51B3; 80% &#x7684;&#x95EE;&#x9898;</li>
</ol>
<h1 id="0x04">0x04 &#x603B;&#x7ED3;</h1>
<p>&#x867D;&#x7136;&#x6211;&#x662F;&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;&#x4E13;&#x4E1A;&#x6BD5;&#x4E1A;&#xFF0C;&#x4F46;&#x662F;&#x60F3;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x5199;&#x5B8C;&#x6240;&#x6709;&#x7684;&#x4F18;&#x5316;&#x70B9;&#x8FD8;&#x662F;&#x592A;&#x96BE;&#x4E86;&#xFF0C;&#x6BD5;&#x7ADF;&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;&#x662F;&#x4E00;&#x95E8;&#x5355;&#x72EC;&#x7684;&#x5B66;&#x79D1;&#xFF0C;&#x53EA;&#x80FD;&#x628A;&#x7B80;&#x5355;&#x5730;&#x628A;&#x7F51;&#x7EDC;&#x539F;&#x7406;&#x548C;&#x4F18;&#x5316;&#x601D;&#x8DEF;&#x8BB0;&#x5F55;&#x4E0B;&#xFF0C;&#x5728;&#x5B9E;&#x9645;&#x4F7F;&#x7528;&#x7684;&#x65F6;&#x5019;&#x8FD8;&#x662F;&#x8981;&#x6839;&#x636E;&#x5177;&#x4F53;&#x7684;&#x60C5;&#x51B5;&#x6765;&#x6392;&#x67E5;&#x95EE;&#x9898;&#xFF0C;&#x53E6;&#x5916;&#x6709;&#x5F88;&#x591A;&#x7EC6;&#x8282;&#x6211;&#x6BD4;&#x8F83;&#x719F;&#x6089;&#xFF0C;&#x89C9;&#x5F97;&#x592A;&#x7B80;&#x5355;&#x4E86;&#x5C31;&#x4E0D;&#x4E00;&#x4E00;&#x8BB0;&#x5F55;&#x4E86;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Linux 性能分析总结之I/O（五）]]></title><description><![CDATA[linux I/O 性能分析与调优]]></description><link>https://nomansky.top/linux-io-performance/</link><guid isPermaLink="false">5df48bd3c9c64a000149b571</guid><category><![CDATA[Linux性能]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Sat, 14 Dec 2019 07:14:34 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="0x00">0x00 &#x524D;&#x8A00;</h1>
<p>&#x5728;&#x4E0A;&#x4E00;&#x7BC7;&#x7B14;&#x8BB0;&#x4E2D;&#x6211;&#x4EEC;&#x4E86;&#x89E3;&#x5230;&#x4E86;&#x5185;&#x5B58;&#x672C;&#x8D28;&#x4E0A;&#x5B83;&#x7684;&#x4F5C;&#x7528;&#x5C31;&#x662F;&#x4F5C;&#x4E3A;&#x5916;&#x90E8;&#x5B58;&#x50A8;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x800C;&#x6570;&#x636E;&#x7684;&#x6301;&#x4E45;&#x5316;&#x548C;&#x672A;&#x547D;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x7B49;&#x6700;&#x7EC8;&#x8FD8;&#x662F;&#x9700;&#x8981;&#x5916;&#x90E8;&#x5B58;&#x50A8;&#x5982;&#x78C1;&#x76D8;&#xFF0C;&#x90A3;&#x4E48;&#x81EA;&#x7136;&#x5C31;&#x9700;&#x8981;&#x9891;&#x7E41;&#x7684; I/O &#x64CD;&#x4F5C;&#xFF0C;&#x8FD9;&#x7BC7;&#x7B14;&#x8BB0;&#x5C31;&#x662F;&#x4ECB;&#x7ECD;&#x78C1;&#x76D8;&#x7684;&#x5DE5;&#x4F5C;&#x539F;&#x7406;&#x548C; I/O &#x7684;&#x4F18;&#x5316;&#x624B;&#x6BB5;&#x3002;</p>
<h1 id="0x10">0x10 &#x539F;&#x7406;</h1>
<p>&#x8001;&#x60EF;&#x4F8B;&#xFF0C;&#x5728;&#x8981;&#x5B66;&#x4E60; I/O &#x7684;&#x6027;&#x80FD;&#x5206;&#x6790;&#x548C;&#x4F18;&#x5316;&#x624B;&#x6BB5;&#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x4EEC;&#x8981;&#x5148;&#x5B66;&#x4E60;&#x5916;&#x90E8;&#x5B58;&#x50A8;&#x7684;&#x539F;&#x7406;&#x3002;&#x4ECE;&#x4E0A;&#x7BC7;&#x5185;&#x5B58;&#x7BC7;&#x7B14;&#x8BB0;&#x4E2D;&#x6211;&#x4EEC;&#x77E5;&#x9053;&#x5185;&#x5B58;&#x4E3B;&#x8981;&#x6709; buff/cache &#x5206;&#x522B;&#x4E3A;&#x78C1;&#x76D8; I/O &#x548C;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF; I/O &#x8FDB;&#x884C;&#x7F13;&#x5B58;&#xFF0C;&#x78C1;&#x76D8;&#x8BFB;&#x5199;&#x5373;&#x4E3A;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;&#x78C1;&#x76D8;&#x5757;&#x8BBE;&#x5907;&#xFF0C;&#x53C8;&#x79F0;&#x4E3A;&#x88F8; I/O&#xFF0C;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x5219;&#x662F;&#x5EFA;&#x7ACB;&#x5728;&#x78C1;&#x76D8;&#x4E0A;&#x7684;&#x4E00;&#x79CD;&#x6587;&#x4EF6;&#x7684;&#x7BA1;&#x7406;&#x548C;&#x7EC4;&#x7EC7;&#x65B9;&#x5F0F;&#xFF0C;&#x5B83;&#x662F;&#x5904;&#x4E8E;&#x5728;&#x5757;&#x8BBE;&#x5907;&#x4E4B;&#x4E0A;&#x7684;&#x3002;&#x6211;&#x4EEC;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x6709;&#x7684;&#x662F;&#x901A;&#x8FC7;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF; I/O &#x8FDB;&#x884C;&#x8BBF;&#x95EE;&#xFF0C;&#x6709;&#x7684;&#x5219;&#x662F;&#x76F4;&#x63A5;&#x88F8; I/O &#x8BBF;&#x95EE;&#x7684;&#x78C1;&#x76D8;&#xFF0C;&#x9488;&#x5BF9;&#x4E0D;&#x540C;&#x7684;&#x8BBF;&#x95EE;&#x65B9;&#x5F0F;&#xFF0C;&#x6211;&#x4EEC;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x4F18;&#x5316;&#x624B;&#x6BB5;&#x3002;&#x53E6;&#x5916;&#x901A;&#x5E38;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x4ECE;&#x4E0A;&#x5230;&#x4E0B; I/O &#x6808;&#x4E3B;&#x8981;&#x5206;&#x4E3A;&#x4E09;&#x5C42;&#xFF1A;</p>
<ul>
<li>&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x5C42;&#xFF1A; &#x5305;&#x62EC;&#x865A;&#x62DF;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x5C42;&#xFF0C;&#x4E3A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x63D0;&#x4F9B;&#x6587;&#x4EF6;&#x8BBF;&#x95EE;&#x63A5;&#x53E3;&#x548C;&#x7BA1;&#x7406;&#x78C1;&#x76D8;&#x6570;&#x636E;</li>
<li>&#x901A;&#x7528;&#x5757;&#x5C42;&#xFF1A;&#x5305;&#x62EC;&#x8BBE;&#x5907; I/O &#x961F;&#x5217;&#x548C; I/O &#x8C03;&#x5EA6;&#x5668;&#xFF0C;&#x5BF9; I/O &#x8FDB;&#x884C;&#x7BA1;&#x7406;&#x548C;&#x8C03;&#x5EA6;&#xFF0C;&#x518D;&#x53D1;&#x7ED9;&#x4E0B;&#x4E00;&#x7EA7;&#x8BBE;&#x5907;</li>
<li>&#x8BBE;&#x5907;&#x5C42;&#xFF1A;&#x5305;&#x62EC;&#x5B58;&#x50A8;&#x8BBE;&#x5907;&#x548C;&#x5B58;&#x50A8;&#x9A71;&#x52A8;&#xFF0C;&#x8D1F;&#x8D23;&#x6700;&#x7EC8;&#x7684; I/O</li>
</ul>
<h2 id="0x11">0x11 &#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</h2>
<p>&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x662F;&#x4E00;&#x79CD;&#x6587;&#x4EF6;&#x7684;&#x7EC4;&#x7EC7;&#x548C;&#x7BA1;&#x7406;&#x673A;&#x5236;&#xFF0C;&#x800C;&#x4E0D;&#x540C;&#x7684;&#x7BA1;&#x7406;&#x673A;&#x5236;&#x5C31;&#x662F;&#x4E0D;&#x540C;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#xFF0C;&#x5982; ext4,xfs, ntfs &#x7B49;&#x7B49;&#x3002;&#x5728;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x4E0D;&#x4EC5;&#x4EC5;&#x53EA;&#x662F;&#x5B58;&#x50A8;&#x5728;&#x78C1;&#x76D8;&#x4E0A;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x8FD9;&#x4E9B;&#x6570;&#x636E;&#x4F1A;&#x6709;&#x9644;&#x5E26;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x3002;&#x5C31;&#x597D;&#x50CF;&#x4E00;&#x4E2A;&#x201C;&#x4EBA;&#x201D;&#x9664;&#x4E86;&#x672C;&#x8EAB;&#x7684;&#x751F;&#x7406;&#x8EAF;&#x4F53;&#x5916;&#xFF0C;&#x4ED6;&#x8FD8;&#x6709;&#x540D;&#x5B57;&#x3001;&#x51FA;&#x751F;&#x65E5;&#x671F;&#x3001;&#x8EAB;&#x4EFD;&#x8BC1;&#x53F7;&#x7801;&#x548C;&#x5BB6;&#x5EAD;&#x4F4F;&#x5740;&#x7B49;&#x5F88;&#x591A;&#x4FE1;&#x606F;&#x624D;&#x80FD;&#x88AB;&#x79F0;&#x4E3A;&#x4E00;&#x4E2A;&#x4EBA;&#xFF0C;&#x4ED6;&#x624D;&#x80FD;&#x88AB;&#x6807;&#x8BC6;&#x548C;&#x5BFB;&#x5740;&#x3002;&#x5728; Linux &#x4E0A;&#xFF0C;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x4E3A;&#x4E86;&#x7BA1;&#x7406;&#x4F1A;&#x4E3A;&#x6BCF;&#x4E2A;&#x6587;&#x4EF6;&#x90FD;&#x5206;&#x914D;&#x4E24;&#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x6765;&#x8BB0;&#x5F55;&#x6587;&#x4EF6;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x548C;&#x76EE;&#x5F55;&#x7ED3;&#x6784;&#xFF1A;</p>
<ul>
<li>&#x7D22;&#x5F15;&#x8282;&#x70B9;&#xFF1A;inode(index node)
<ol>
<li>&#x8BB0;&#x5F55;&#x6587;&#x4EF6;&#x5143;&#x6570;&#x636E;&#xFF0C;inode &#x7F16;&#x53F7;&#xFF0C;&#x6587;&#x4EF6;&#x5927;&#x5C0F;&#xFF0C;&#x6743;&#x9650;&#xFF0C;&#x4FEE;&#x6539;&#x65E5;&#x5FD7;&#x7B49;</li>
<li>inode &#x548C;&#x6587;&#x4EF6;&#x4E00;&#x4E00;&#x5BF9;&#x5E94;&#xFF0C;&#x5C31;&#x50CF;&#x6BCF;&#x4E2A;&#x4EBA;&#x5BF9;&#x5E94;&#x4E00;&#x4E2A; id card</li>
<li>&#x5B58;&#x50A8;&#x5728;&#x78C1;&#x76D8;&#xFF0C;&#x9700;&#x8981;&#x5360;&#x7528;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;</li>
</ol>
</li>
<li>&#x76EE;&#x5F55;&#x9879;&#xFF1A; dentry(directory entry)
<ol>
<li>&#x8BB0;&#x5F55;&#x6587;&#x4EF6;&#x7684;&#x540D;&#x5B57;&#xFF0C;inode</li>
<li>&#x8BB0;&#x5F55;&#x6587;&#x4EF6;&#x548C;&#x5176;&#x4ED6;&#x6587;&#x4EF6;&#x7684;&#x5173;&#x8054;&#x5173;&#x7CFB;&#xFF0C;&#x5C31;&#x50CF;&#x5BB6;&#x8C31;&#x4E00;&#x6837;</li>
<li>&#x7531;&#x5185;&#x6838;&#x7EF4;&#x62A4;&#x5E76;&#x5B58;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x4E5F;&#x53EB;&#x76EE;&#x5F55;&#x9879;&#x7F13;&#x7F13;&#x5B58;</li>
<li>&#x548C;inode &#x662F;&#x591A;&#x5BF9;&#x4E00;&#x7684;&#x5173;&#x7CFB;&#xFF0C;&#x53EF;&#x4EE5;&#x7406;&#x89E3;&#x4E3A;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x6709;&#x591A;&#x4E2A;&#x522B;&#x540D;&#xFF0C;&#x5C31;&#x597D;&#x50CF;&#x4E00;&#x4E2A;&#x4EBA;&#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;&#x8EAB;&#x4EFD;&#xFF0C;&#x65E2;&#x53EF;&#x4EE5;&#x662F;&#x4E00;&#x4E2A;&#x4EBA;&#x7684;&#x7238;&#x7238;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;&#x53E6;&#x4E00;&#x4E2A;&#x4EBA;&#x7684;&#x513F;&#x5B50;</li>
</ol>
</li>
</ul>
<p>&#x7D22;&#x5F15;&#x8282;&#x70B9;&#x548C;&#x76EE;&#x5F55;&#x9879;&#x7684;&#x5173;&#x7CFB;&#x5982;&#x4E0B;&#x56FE;&#x6240;&#x793A;&#xFF1A;<br>
<img src="http://img.nomansky.top/pic/20191214/1.png" alt loading="lazy"><br>
&#x4ECE;&#x8FD9;&#x4E2A;&#x56FE;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5F97;&#x77E5;&#x4EE5;&#x4E0B;&#x51E0;&#x70B9;&#xFF1A;</p>
<ol>
<li>&#x6BCF;&#x4E2A; dentry &#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x91CC;&#x9762;&#x5305;&#x542B;&#x4E86; inode&#xFF0C;&#x6587;&#x4EF6;&#x540D;&#x548C;&#x5176;&#x4ED6;&#x5173;&#x8054;&#x7684; dentry &#x5730;&#x5740;&#x7B49;</li>
<li>&#x5176;&#x4E2D; inode &#x662F;&#x5B58;&#x50A8;&#x5728;&#x78C1;&#x76D8;&#x7684;&#xFF0C;dentry &#x662F;&#x5185;&#x5B58;&#x7F13;&#x5B58;</li>
<li>&#x7531;&#x4E0A;&#x7BC7;&#x5185;&#x5B58;&#x7B14;&#x8BB0;&#x53EF;&#x4EE5;&#x63A8;&#x6D4B;&#xFF0C;inode &#x4E5F;&#x4F1A;&#x7F13;&#x5B58;&#x5230;&#x5185;&#x5B58;&#x4E2D;</li>
<li>dentry &#x4E4B;&#x95F4;&#x7C7B;&#x4F3C;&#x6811;&#x5F62;&#x7ED3;&#x6784;</li>
<li>inode &#x548C;&#x6587;&#x4EF6;&#x6570;&#x636E;&#x662F;&#x5B58;&#x50A8;&#x5728;&#x4E0D;&#x540C;&#x7684;&#x78C1;&#x76D8; block &#x7684;</li>
</ol>
<p>&#x6839;&#x636E;&#x7B2C;&#x516D;&#x70B9;&#xFF0C;&#x6211;&#x4EEC;&#x53C8;&#x53EF;&#x4EE5;&#x5F15;&#x7533;&#x51FA;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x77E5;&#x8BC6;&#x70B9;&#xFF0C;&#x90A3;&#x5C31;&#x662F;&#x7ED9;&#x78C1;&#x76D8;&#x683C;&#x5F0F;&#x5316;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F1A;&#x628A;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x5206;&#x4E3A;&#x4E09;&#x4E2A; block&#xFF1A;</p>
<ul>
<li>&#x8D85;&#x7EA7;&#x5757;&#xFF1A; &#x5B58;&#x50A8;&#x6574;&#x4E2A;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x7684;&#x72B6;&#x6001;</li>
<li>inode block&#xFF1A; &#x5B58;&#x50A8; inode &#x8282;&#x70B9;</li>
<li>&#x6570;&#x636E;&#x5757;&#xFF1A;&#x5B58;&#x50A8;&#x6587;&#x4EF6;&#x6570;&#x636E;</li>
</ul>
<p>&#x800C;&#x673A;&#x68B0;&#x786C;&#x76D8;&#x7684;&#x6700;&#x5C0F;&#x6247;&#x533A;&#x662F;512B&#xFF0C;&#x800C;&#x6BCF;&#x6B21;&#x8BFB;&#x8FD9;&#x4E48;&#x5C0F;&#x6548;&#x7387;&#x4F4E;&#xFF0C;&#x6240;&#x4EE5;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x8FD8;&#x4F1A;&#x628A;&#x6247;&#x533A;&#x7EC4;&#x7EC7;&#x6210;4KB&#x7684;&#x903B;&#x8F91;&#x5757;&#xFF0C;&#x5982;&#x4E0A;&#x56FE;&#x5DE6;&#x8FB9;&#x6240;&#x793A;&#xFF0C;&#x6570;&#x636E;&#x5757;&#x88AB;&#x5206;&#x4E3A;&#x4E86;&#x4E00;&#x4E2A;&#x4E2A;&#x903B;&#x8F91;&#x5757;</p>
<h3 id="0x1100">0x1100 &#x865A;&#x62DF;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</h3>
<p>&#x6240;&#x6709;&#x7684;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x7684;&#x56DB;&#x5927;&#x57FA;&#x672C;&#x8981;&#x7D20;&#xFF1A;</p>
<ul>
<li>dentry</li>
<li>inode</li>
<li>&#x903B;&#x8F91;&#x5757;</li>
<li>&#x8D85;&#x7EA7;&#x5757;</li>
</ul>
<p>&#x800C;&#x4E0D;&#x540C;&#x7684;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x7EC4;&#x7EC7;&#x65B9;&#x5F0F;&#xFF0C;Linux &#x5185;&#x6838;&#x5728;&#x7528;&#x6237;&#x8FDB;&#x7A0B;&#x548C;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x4E4B;&#x95F4;&#x5F15;&#x5165;&#x62BD;&#x8C61;&#x5C42; VFS&#xFF08;Virtual File System&#xFF09;&#xFF0C;&#x5C31;&#x597D;&#x50CF; Java &#x91CC;&#x9762;&#x7684;&#x5B9E;&#x73B0;&#x62BD;&#x8C61;&#x65B9;&#x6CD5;&#x4E00;&#x6837;&#xFF0C; VFS &#x662F;&#x62BD;&#x8C61;&#x7C7B;&#xFF0C;&#x5177;&#x4F53;&#x7684;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x5219;&#x5B9E;&#x73B0;&#x62BD;&#x8C61;&#x7C7B;&#x5B9A;&#x4E49;&#x7684;&#x63A5;&#x53E3;&#x3002;</p>
<p>&#x5982;&#x4E0B;&#x56FE;&#x6240;&#x793A;&#xFF1A;<br>
<img src="http://img.nomansky.top/pic/20191214/2.png" alt loading="lazy"><br>
&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230; Linux &#x652F;&#x6301;&#x7684;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x53EF;&#x5206;&#x4E3A;&#xFF1A;</p>
<ol>
<li>&#x78C1;&#x76D8;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</li>
<li>&#x7F51;&#x7EDC;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</li>
<li>&#x5185;&#x5B58;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</li>
</ol>
<p>&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x5148;&#x8981;&#x5728; VFS &#x4E2D;&#x627E;&#x4E2A;&#x6302;&#x8F7D;&#x70B9;&#x6302;&#x8F7D;&#xFF0C;&#x7136;&#x540E;&#x7528;&#x6237;&#x8FDB;&#x7A0B;&#x5C31;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; VFS &#x7684;&#x6587;&#x4EF6;&#x63A5;&#x53E3;&#x8BBF;&#x95EE;&#x5176;&#x4E2D;&#x7684;&#x6587;&#x4EF6;&#x4E86;</p>
<h3 id="0x1101io">0x1101 &#x6587;&#x4EF6;&#x7CFB;&#x7EDF; I/O</h3>
<p>&#x901A;&#x8FC7;&#x6587;&#x4EF6;&#x63A5;&#x53E3;&#x53EF;&#x4EE5;&#x5BF9;&#x6587;&#x4EF6;&#x8FDB;&#x884C;&#x8BFB;&#x5199;&#x7B49;&#x64CD;&#x4F5C;&#xFF0C;&#x8BFB;&#x5199;&#x65B9;&#x5F0F;&#x7684;&#x5DEE;&#x5F02;&#x5BFC;&#x81F4; I/O &#x6709;&#x5F88;&#x591A;&#x5206;&#x7C7B;&#x3002;&#x4E3B;&#x8981;&#x6709;&#x56DB;&#x79CD;&#xFF1A;</p>
<ul>
<li>&#x662F;&#x5426;&#x6807;&#x51C6;&#x5E93;&#x7F13;&#x51B2;&#xFF08;&#x7F13;&#x51B2;&#x7531;&#x6807;&#x51C6;&#x5E93;&#x5185;&#x90E8;&#x5B9E;&#x73B0;&#xFF09;&#xFF1A;
<ol>
<li>&#x7F13;&#x51B2; I/O&#xFF1A;&#x4F7F;&#x7528;&#x6807;&#x51C6;&#x5E93;&#x7F13;&#x5B58;&#x52A0;&#x901F;&#x6587;&#x4EF6;&#x8BBF;&#x95EE;</li>
<li>&#x975E;&#x7F13;&#x51B2; I/O&#xFF1A;&#x76F4;&#x63A5;&#x901A;&#x8FC7;&#x7CFB;&#x7EDF;&#x8C03;&#x7528;&#x8BBF;&#x95EE;</li>
</ol>
</li>
<li>&#x76F4;&#x63A5;/&#x975E;&#x76F4;&#x63A5; I/O:
<ol>
<li>&#x76F4;&#x63A5; I/O &#x8DF3;&#x8FC7;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x9875;&#x7F13;&#x5B58;&#xFF08;cache&#xFF09;&#xFF0C;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x3002;&#x4F7F;&#x7528; <code>O_DIRECT</code>&#x6807;&#x5FD7;</li>
<li>&#x975E;&#x76F4;&#x63A5; I/O &#x4F7F;&#x7528; cache</li>
</ol>
</li>
<li>&#x963B;&#x585E;/&#x975E;&#x963B;&#x585E; I/O&#xFF08;&#x8C03;&#x7528;&#x8005;&#x89C6;&#x89D2;&#xFF0C;&#x5173;&#x6CE8;&#x662F;&#x5426;&#x7B49;&#x5F85;&#x8C03;&#x7528;&#x7ED3;&#x679C;&#xFF09;&#xFF1A;
<ol>
<li>&#x8C03;&#x7528;&#x8005;&#x6267;&#x884C; I/O &#x64CD;&#x4F5C;&#xFF0C;&#x5982;&#x679C;&#x88AB;&#x8C03;&#x7528;&#x8005;&#x6CA1;&#x6709;&#x54CD;&#x5E94;&#xFF0C;&#x5219;&#x8C03;&#x7528;&#x8005;&#x7EBF;&#x7A0B;&#x963B;&#x585E;&#xFF0C;&#x4E0D;&#x80FD;&#x5E72;&#x522B;&#x7684;&#x4E8B;&#x4E86;&#x3002;</li>
<li>&#x8C03;&#x7528;&#x8005;&#x6267;&#x884C; I/O &#x64CD;&#x4F5C;&#xFF0C;&#x5982;&#x679C;&#x88AB;&#x8C03;&#x7528;&#x8005;&#x6CA1;&#x6709;&#x54CD;&#x5E94;&#xFF0C;&#x8C03;&#x7528;&#x8005;&#x7EBF;&#x7A0B;&#x4E5F;&#x4E0D;&#x4F1A;&#x88AB;&#x963B;&#x585E;&#xFF0C;&#x53EF;&#x4EE5;&#x53BB;&#x5E72;&#x522B;&#x7684;&#x4E8B;&#x3002;&#x540E;&#x7EED;&#x8C03;&#x7528;&#x8005;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x8F6E;&#x8BE2;&#xFF08;&#x8C03;&#x7528;&#x8005;&#x8FC7;&#x6BB5;&#x65F6;&#x95F4;&#x5C31;&#x53BB;&#x770B;&#x4E0B;&#x597D;&#x4E86;&#x6CA1;&#xFF09;&#x6216;&#x5219;&#x4E8B;&#x4EF6;&#x901A;&#x77E5;&#xFF08;&#x88AB;&#x8C03;&#x7528;&#x8005;&#x597D;&#x4E86;&#x540E;&#x4E3B;&#x52A8;&#x901A;&#x77E5;&#x8C03;&#x7528;&#x8005;&#xFF09;&#x7684;&#x65B9;&#x5F0F;&#x83B7;&#x53D6;&#x5230;&#x54CD;&#x5E94;&#x3002;</li>
</ol>
</li>
<li>&#x540C;&#x6B65;/&#x5F02;&#x6B65; I/O&#xFF08;&#x88AB;&#x8C03;&#x7528;&#x8005;&#x89C6;&#x89D2;&#xFF0C;&#x5173;&#x6CE8;&#x7684;&#x662F;&#x6D88;&#x606F;&#x7684;&#x901A;&#x77E5;&#x673A;&#x5236;&#xFF09;&#xFF1A;
<ol>
<li>&#x540C;&#x6B65;&#x662F;&#x88AB;&#x8C03;&#x7528;&#x8005;&#x76F4;&#x5230; I/O &#x64CD;&#x4F5C;&#x6267;&#x884C;&#x5B8C;&#x624D;&#x4F1A;&#x8FD4;&#x56DE;&#x7ED3;&#x679C;&#x7ED9;&#x8C03;&#x7528;&#x8005;&#x3002;&#x5982;&#x679C;&#x8C03;&#x7528;&#x8005;&#x662F;&#x963B;&#x585E;&#x7684;&#xFF0C;&#x90A3;&#x4E48;&#x8C03;&#x7528;&#x8005;&#x5C31;&#x53EA;&#x80FD;&#x4E00;&#x76F4;&#x7B49;&#x7740;&#x88AB;&#x8C03;&#x7528;&#x8005;&#x6267;&#x884C;&#x5B8C;&#x4E86;&#xFF1B;&#x5982;&#x679C;&#x8C03;&#x7528;&#x8005;&#x662F;&#x975E;&#x963B;&#x585E;&#x7684;&#xFF0C;&#x8C03;&#x7528;&#x8005;&#x5C31;&#x5148;&#x8DD1;&#x4E86;&#xFF0C;&#x4ED6;&#x53EF;&#x80FD;&#x8FC7;&#x6BB5;&#x65F6;&#x95F4;&#x518D;&#x6765;&#x770B;&#x4E0B;&#x662F;&#x4E0D;&#x662F;&#x597D;&#x4E86;&#xFF08;&#x8F6E;&#x8BE2;&#xFF09;&#x6216;&#x8005;&#x6253;&#x7535;&#x8BDD;&#x7ED9;&#x4ED6;&#xFF08;&#x4E8B;&#x4EF6;&#x901A;&#x77E5;&#xFF09;</li>
<li>&#x5F02;&#x6B65;&#x662F;&#x88AB;&#x8C03;&#x7528;&#x8005;&#x9A6C;&#x4E0A;&#x8FD4;&#x56DE; I/O &#x64CD;&#x4F5C;&#x7ED9;&#x8C03;&#x7528;&#x8005;&#xFF0C;&#x8BA9;&#x8C03;&#x7528;&#x8005;&#x5148;&#x53BB;&#x5E72;&#x522B;&#x7684;&#x4E8B;&#xFF0C;&#x597D;&#x4E86;&#x518D;&#x901A;&#x77E5;&#x4ED6;&#x3002;</li>
</ol>
</li>
</ul>
<h3 id="0x1102">0x1102 &#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x6027;&#x80FD;&#x89C2;&#x5BDF;</h3>
<ul>
<li>&#x5BB9;&#x91CF;&#xFF1A; df &#x547D;&#x4EE4;</li>
<li>&#x7F13;&#x5B58;&#xFF1A;
<ul>
<li>&#x67E5;&#x770B;<code>/proc/memeinfo</code>Slab,<code>/proc/slabinfo</code>&#x6587;&#x4EF6;&#x67E5;&#x770B; dentry &#x548C; inode &#x7F13;&#x5B58;</li>
<li>slabtop &#x5DE5;&#x5177;</li>
</ul>
</li>
</ul>
<h2 id="0x12io">0x12 &#x78C1;&#x76D8; I/O</h2>
<p>&#x78C1;&#x76D8;&#x4E3B;&#x8981;&#x5206;&#x4E3A;&#x673A;&#x68B0;&#x78C1;&#x76D8;&#x548C;&#x56FA;&#x6001;&#x78C1;&#x76D8;&#xFF0C;&#x78C1;&#x76D8;&#x7684;&#x8FDE;&#x7EED;&#x8BFB;&#x5199;&#x901F;&#x5EA6;&#x6BD4;&#x968F;&#x673A;&#x8BFB;&#x5199;&#x901F;&#x5EA6;&#x66F4;&#x5FEB;&#xFF0C;&#x5728; Linux &#x4E2D;&#xFF0C;&#x78C1;&#x76D8;&#x662F;&#x4F5C;&#x4E3A;&#x5757;&#x8BBE;&#x5907;&#x4F7F;&#x7528;&#x7684;&#x3002;&#x4E3A;&#x4E86;&#x51CF;&#x5C0F;&#x4E0D;&#x540C;&#x78C1;&#x76D8;&#x8BBE;&#x5907;&#x5E26;&#x6765;&#x7684;&#x5DEE;&#x5F02;&#xFF0C;Linux &#x901A;&#x8FC7;&#x901A;&#x7528;&#x5757;&#x5C42;&#x6765;&#x7BA1;&#x7406;&#x4E0D;&#x540C;&#x7684;&#x5757;&#x8BBE;&#x5907;&#x3002;&#x901A;&#x7528;&#x5757;&#x5C42;&#x7684;&#x4E3B;&#x8981;&#x529F;&#x80FD;&#x5982;&#x4E0B;&#xFF1A;</p>
<ul>
<li>&#x627F;&#x4E0A;&#x542F;&#x4E0B;&#xFF0C;&#x4E3A;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x63D0;&#x4F9B;&#x7EDF;&#x4E00;&#x7684;&#x6807;&#x51C6;&#x63A5;&#x53E3;&#x548C;&#x63D0;&#x4F9B;&#x7EDF;&#x4E00;&#x6846;&#x67B6;&#x7BA1;&#x7406;&#x5757;&#x8BBE;&#x5907;&#x7684;&#x9A71;&#x52A8;&#x7A0B;&#x5E8F;</li>
<li>&#x5BF9;&#x4E0A;&#x5C42;&#x7684; I/O &#x8BF7;&#x6C42;&#x6392;&#x961F;&#x5E76;&#x8FDB;&#x884C;&#x8C03;&#x5EA6;&#xFF0C;&#x63D0;&#x9AD8;&#x78C1;&#x76D8;&#x8BFB;&#x5199;&#x6548;&#x7387;&#xFF0C;Linux &#x652F;&#x6301; 4 &#x79CD;&#x8C03;&#x5EA6;&#x7B97;&#x6CD5;
<ul>
<li>NONE: &#x4E0D;&#x4F7F;&#x7528;&#x4EFB;&#x4F55;&#x8C03;&#x5EA6;&#xFF0C;&#x5E38;&#x7528;&#x4E8E; vm</li>
<li>NOOP: &#x5148;&#x5165;&#x5148;&#x51FA;&#x7684;&#x961F;&#x5217;&#xFF0C;&#x5E38;&#x7528;&#x4E8E; ssd</li>
<li>CFQ&#xFF08;Completely Fair Scheduler&#xFF09;: &#x5B8C;&#x5168;&#x516C;&#x5E73;&#x8C03;&#x5EA6;&#x5668;&#xFF0C;&#x57FA;&#x4E8E;&#x65F6;&#x95F4;&#x7247;&#x6BB5;&#x6765;&#x5206;&#x5E03;&#x6BCF;&#x4E2A;&#x8FDB;&#x7A0B;&#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x652F;&#x6301;&#x8C03;&#x5EA6;&#x4F18;&#x5148;&#x7EA7;&#xFF0C;&#x9002;&#x5408;&#x5927;&#x91CF;&#x8FDB;&#x7A0B;&#x7684;&#x7CFB;&#x7EDF;&#xFF0C;&#x5982; desktop&#xFF0C;media</li>
<li>DeadLine: &#x8BFB;&#x5199;&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x7684; I/O &#x961F;&#x5217;&#xFF0C;&#x591A;&#x7528;&#x4E8E; I/O &#x538B;&#x529B;&#x6BD4;&#x8F83;&#x91CD;&#x7684;&#x573A;&#x666F;&#xFF0C;&#x5982;&#x6570;&#x636E;&#x5E93;</li>
</ul>
</li>
</ul>
<h3 id="0x1200">0x1200 &#x78C1;&#x76D8;&#x6027;&#x80FD;&#x6307;&#x6807;</h3>
<ul>
<li>&#x4F7F;&#x7528;&#x7387;&#xFF1A;&#x5904;&#x7406; I/O &#x7684;&#x65F6;&#x95F4;&#x767E;&#x5206;&#x6BD4;&#xFF08;&#x53EA;&#x8003;&#x8651; I/O &#x6570;&#x91CF;&#xFF0C;&#x4E0D;&#x8003;&#x8651; I/O &#x5927;&#x5C0F;&#xFF09;</li>
<li>&#x9971;&#x548C;&#x5EA6;&#xFF1A;&#x5904;&#x7406; I/O &#x7684;&#x7E41;&#x5FD9;&#x7A0B;&#x5EA6;&#xFF0C;100%&#x65F6;&#x65E0;&#x6CD5;&#x63A5;&#x53D7; I/O &#x8BF7;&#x6C42;</li>
<li>IOPS(Input/Output Per Second)&#xFF1A; &#x6BCF;&#x79D2;&#x63A5;&#x53D7;&#x7684; I/O &#x8BF7;&#x6C42;</li>
<li>&#x541E;&#x5410;&#x91CF;&#xFF1A;&#x6BCF;&#x79D2;&#x7684; I/O &#x8BF7;&#x6C42;&#x5927;&#x5C0F;</li>
<li>&#x54CD;&#x5E94;&#x65F6;&#x95F4;&#xFF1A;I/O &#x8BF7;&#x6C42;&#x53D1;&#x51FA;&#x5230;&#x54CD;&#x5E94;&#x7684;&#x65F6;&#x95F4;</li>
</ul>
<h3 id="0x1201">0X1201 &#x6027;&#x80FD;&#x89C2;&#x6D4B;</h3>
<ul>
<li>&#x6574;&#x4F53;&#xFF1A;iostat</li>
<li>&#x5355;&#x4E2A;&#x8FDB;&#x7A0B;&#xFF1A;pidstat,iostop</li>
<li>&#x78C1;&#x76D8;&#x6027;&#x80FD;&#x5EA6;&#x91CF;&#xFF1A;fio</li>
</ul>
<h1 id="0x20">0x20 &#x6027;&#x80FD;&#x8C03;&#x4F18;</h1>
<p>&#x5728;&#x4E86;&#x89E3;&#x4E86; I/O &#x6808;&#x7684;&#x539F;&#x7406;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x5206;&#x6790;&#x6027;&#x80FD;&#x74F6;&#x9888;&#x7684;&#x8DEF;&#x6570;&#x5927;&#x6982;&#x90FD;&#x662F;</p>
<ol>
<li>iostat &#x89C2;&#x5BDF;&#x6574;&#x4F53;&#x7684;&#x78C1;&#x76D8;&#x60C5;&#x51B5;&#xFF0C;&#x5206;&#x6790;&#x5404;&#x9879;&#x6307;&#x6807;</li>
<li>pidstat &#x89C2;&#x5BDF;&#x5177;&#x4F53;&#x8FDB;&#x7A0B;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5206;&#x6790;&#x5404;&#x9879;&#x6307;&#x6807;</li>
<li>strace&#x5206;&#x6790;&#x8FDB;&#x7A0B;&#x7684; I/O &#x884C;&#x4E3A;</li>
<li>&#x7ED3;&#x5408;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#xFF0C;&#x5206;&#x6790;I/O &#x6765;&#x81EA;&#x54EA;&#x91CC;&#xFF0C;&#x662F;&#x5426;&#x6B63;&#x5E38;</li>
</ol>
<p>&#x5176;&#x4E2D;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x548C; I/O &#x6307;&#x6807;&#x548C;&#x78C1;&#x76D8;&#x7684; I/O &#x6307;&#x6807;&#x9700;&#x8981;&#x5206;&#x5F00;&#x6765;&#x5206;&#x6790;&#xFF0C;&#x53E6;&#x5916;&#x5728;&#x5206;&#x6790;&#x8FD9;&#x4E9B;&#x6307;&#x6807;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x9700;&#x8981;&#x6839;&#x636E;&#x5177;&#x4F53;&#x7684; I/O &#x573A;&#x666F;&#x6765;&#x8FDB;&#x884C;&#x5206;&#x6790;&#xFF0C;&#x9664;&#x4E86;&#x5206;&#x6790; I/O &#x6307;&#x6807;&#xFF0C;&#x5185;&#x5B58;&#x7F13;&#x5B58;&#x4E5F;&#x662F;&#x9700;&#x8981;&#x5206;&#x6790;&#x7684;&#x3002;</p>
<p>&#x5982;&#x679C;&#x8981;&#x5BF9; I/O &#x8FDB;&#x884C;&#x8C03;&#x4F18;&#xFF0C;&#x5219;&#x6BCF;&#x5C42;&#x90FD;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x624B;&#x6BB5;&#xFF1A;</p>
<ul>
<li>
<p>&#x5E94;&#x7528;&#x5C42;</p>
<ul>
<li>&#x8FDE;&#x7EED;&#x8BFB;&#x5199;&#x4EE3;&#x66FF;&#x968F;&#x673A;&#x8BFB;&#x5199;</li>
<li>&#x591A;&#x4F7F;&#x7528;&#x7CFB;&#x7EDF;&#x7F13;&#x5B58;</li>
<li>&#x4F7F;&#x7528;&#x5916;&#x90E8;&#x7F13;&#x5B58;&#xFF0C;&#x5982; MySQL &#x524D;&#x653E; Redis</li>
<li>&#x8BFB;&#x5199;&#x540C;&#x4E00;&#x5757;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F7F;&#x7528; mmap&#xFF08;&#x5185;&#x5B58;&#x6587;&#x4EF6;&#x6620;&#x5C04;&#xFF09;</li>
<li>&#x540C;&#x6B65;&#x5199;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8BF7;&#x6C42;&#x5408;&#x5E76;&#xFF0C;&#x51CF;&#x5C11;&#x8BBF;&#x95EE; I/O &#x6B21;&#x6570;</li>
<li>&#x5982;&#x679C;&#x6709;&#x591A;&#x4E2A;&#x8FDB;&#x7A0B;&#x65F6;&#xFF0C;&#x53EF;&#x4EE5;&#x7528; cgroup &#x9650;&#x5236; I/O</li>
<li>&#x5728; CFQ &#x4E2D;&#x4F7F;&#x7528; ionice &#x8C03;&#x6574;&#x8FDB;&#x7A0B;&#x7684; I/O &#x4F18;&#x5148;&#x7EA7;</li>
</ul>
</li>
<li>
<p>&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x5C42;</p>
<ul>
<li>&#x4F7F;&#x7528;&#x5408;&#x9002;&#x7684;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</li>
<li>&#x4F18;&#x5316;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x914D;&#x7F6E;&#x9009;&#x9879;</li>
<li>&#x4F18;&#x5316;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x7F13;&#x5B58;</li>
<li>&#x4E0D;&#x9700;&#x8981;&#x6301;&#x4E45;&#x5316;&#x53EF;&#x4F7F;&#x7528; tmpfs</li>
</ul>
</li>
<li>
<p>&#x78C1;&#x76D8;</p>
<ul>
<li>&#x7528; SSD</li>
<li>&#x7EC4; RAID</li>
<li>&#x9009;&#x62E9;&#x5408;&#x9002;&#x7684; I/O &#x8C03;&#x5EA6;&#x7B97;&#x6CD5;</li>
<li>&#x4E0D;&#x540C;&#x8FDB;&#x7A0B;&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x7684;&#x78C1;&#x76D8;</li>
<li>&#x9488;&#x5BF9;&#x987A;&#x5E8F;&#x8BFB;&#x573A;&#x666F;&#x589E;&#x5927;&#x9884;&#x8BFB;&#x6570;&#x636E;</li>
<li>&#x4F18;&#x5316;&#x5185;&#x6838;&#xFF0C;&#x5982;&#x8C03;&#x6574; I/O &#x961F;&#x5217;&#x957F;&#x5EA6;</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[【译】在Docker容器上使用CNI]]></title><description><![CDATA[介绍如何为 Docker 创建的容器使用 CNI 接口配置网络]]></description><link>https://nomansky.top/yi-zai-dockerrong-qi-shang-shi-yong-cni/</link><guid isPermaLink="false">5dea5078d0a9eb000113f779</guid><category><![CDATA[Cloud Network]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Fri, 06 Dec 2019 13:00:50 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="0x00">0x00 &#x524D;&#x8A00;</h1>
<p>&#x6B64;&#x7BC7;&#x6587;&#x7AE0;&#x662F;&#x4E0A;&#x7BC7;<a href="https://nomansky.top/li-jie-cni-rong-qi-wang-luo-jie-kou/">&#x7406;&#x89E3;CNI&#xFF08;&#x5BB9;&#x5668;&#x7F51;&#x7EDC;&#x63A5;&#x53E3;&#xFF09;</a>&#x7684;&#x540E;&#x7EED;</p>
<blockquote>
<p>&#x539F;&#x4F5C;&#x8005;&#xFF1A;Jon Langemak<br>
&#x539F;&#x6587;&#x5730;&#x5740;&#xFF1A;<a href="http://www.dasblinkenlichten.com/using-cni-docker/?ref=nomansky.top">Using CNI with Docker</a><br>
&#x8BD1;&#x8005;: n0mansky</p>
</blockquote>
<h1 id="0x11">0x11 &#x6B63;&#x6587;</h1>
<p>&#x5728;<a href="https://nomansky.top/li-jie-cni-rong-qi-wang-luo-jie-kou/">&#x7406;&#x89E3;CNI&#xFF08;&#x5BB9;&#x5668;&#x7F51;&#x7EDC;&#x63A5;&#x53E3;&#xFF09;</a>&#xFF08;&#x5982;&#x679C;&#x6CA1;&#x8BFB;&#x5EFA;&#x8BAE;&#x5148;&#x8BFB;&#x4E0B;&#xFF09;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x901A;&#x8FC7;&#x4E00;&#x4E2A;&#x793A;&#x4F8B;&#x4ECB;&#x7ECD;&#x4E86;CNI&#x5982;&#x4F55;&#x5C06;&#x7F51;&#x7EDC;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x8FDE;&#x63A5;&#x5230; bridge &#x63A5;&#x53E3;&#xFF0C;CNI&#x8D1F;&#x8D23;&#x521B;&#x5EFA; bridge &#x7F51;&#x5361;&#x5E76;&#x4F7F;&#x7528; VETH pair &#x8FDE;&#x63A5; bridge &#x548C;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x3002;&#x5728;&#x672C;&#x6587;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x5C06;&#x63A2;&#x8BA8;&#x5982;&#x4F55;&#x4E3A; Docker &#x521B;&#x5EFA;&#x7684;&#x5BB9;&#x5668;&#x8FDE;&#x63A5;&#x5230; bridge&#xFF0C;&#x5177;&#x4F53;&#x6B65;&#x9AA4;&#x548C;&#x4E0A;&#x7BC7;&#x6587;&#x7AE0;&#x8BA8;&#x8BBA;&#x7684;&#x5DEE;&#x4E0D;&#x591A;&#xFF0C;&#x8BA9;&#x6211;&#x4EEC;&#x5F00;&#x59CB;&#x5427;&#x3002;</p>
<p>&#x672C;&#x6587;&#x5047;&#x5B9A;&#x60A8;&#x5DF2;&#x6309;&#x7167;&#x7B2C;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;<a href="https://nomansky.top/li-jie-cni-rong-qi-wang-luo-jie-kou/">&#x7406;&#x89E3;CNI&#xFF08;&#x5BB9;&#x5668;&#x7F51;&#x7EDC;&#x63A5;&#x53E3;&#xFF09;</a>&#x4E2D;&#x7684;&#x6B65;&#x9AA4;&#x52A8;&#x624B;&#x64CD;&#x4F5C;&#x8FC7;&#x4E86;&#xFF0C;&#x5E76;&#x5DF2;&#x7ECF;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x5305;&#x542B;CNI&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x7684;&apos;cni&apos;&#x76EE;&#x5F55;&#xFF08;<code>~/cni</code>&#xFF09;&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#xFF0C;&#x8BF7;&#x8FD4;&#x56DE;&#x4E0A;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#xFF0C;&#x5E76;&#x6309;&#x7167;&#x6B65;&#x9AA4;&#x4E0B;&#x8F7D;CNI&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x3002;&#x540C;&#x65F6;&#x60A8;&#x9700;&#x8981;&#x5B89;&#x88C5;Docker&#xFF0C;&#x6211;&#x4F7F;&#x7528;&#x7684;&#x662F;Docker 1.12&#x7248;&#x3002;&#xFF08;&#x8BD1;&#x8005;&#x6CE8;&#xFF1A;Docker &#x7248;&#x672C;&#x5927;&#x4E8E; 1.12 &#x4E5F;&#x662F;&#x53EF;&#x4EE5;&#x7684;&#xFF0C;&#x6211;&#x7684;&#x662F; 18.09 &#xFF09;</p>
<p>&#x9996;&#x5148;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x6267;&#x884C;&#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x6765;&#x521B;&#x5EFA;&#x4E00;&#x4E2A; Docker &#x5BB9;&#x5668;</p>
<pre><code>user@ubuntu-2:~/cni$ sudo docker run --name cnitest --net=none -d jonlangemak/web_server_1
835583cdf382520283c709b5a5ee866b9dccf4861672b95eccbc7b7688109b56
user@ubuntu-2:~/cni$
</code></pre>
<p>&#x6211;&#x4EEC;&#x6CE8;&#x610F;&#x5230;&#x5F53;&#x6267;&#x884C;&#x4E0A;&#x8FF0;&#x547D;&#x4EE4;&#x65F6;&#xFF0C;&#x8BBE;&#x7F6E;&#x7684;&#x7F51;&#x7EDC;&#x4E3A; <strong>none</strong>&#x3002;&#x5F53;&#x4F7F;&#x7528;none&#x65F6;&#xFF0C;Docker &#x5C06;&#x4E3A;&#x8BE5;&#x5BB9;&#x5668;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x4E0D;&#x4F1A;&#x8FDE;&#x63A5;&#x4EFB;&#x4F55;&#x7F51;&#x7EDC;&#x7684;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x3002;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x67E5;&#x770B;&#x5BB9;&#x5668;&#xFF0C;&#x6211;&#x4EEC;&#x5E94;&#x8BE5;&#x770B;&#x5230;&#x5B83;&#x53EA;&#x4F1A;&#x6709;&#x4E00;&#x4E2A;&#x73AF;&#x56DE;&#x63A5;&#x53E3;&#x2026;</p>
<pre><code>user@ubuntu-2:~/cni$ sudo docker exec cnitest ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
user@ubuntu-2:~/cni$
</code></pre>
<p>&#x63A5;&#x4E0B;&#x6765;&#x6211;&#x4EEC;&#x8981;&#x4F7F;&#x7528;CNI&#x5C06;&#x8BE5;&#x5BB9;&#x5668;&#x8FDE;&#x63A5;&#x5230;&#x7F51;&#x7EDC;&#x3002;&#x5728;&#x6B64;&#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x7ED9;CNI&#x4F7F;&#x7528;&#x7684;&#x5B9A;&#x4E49;&#x548C;&#x7ED9;&#x5BB9;&#x5668;&#x7F51;&#x7EDC;&#x672C;&#x8EAB;&#x7684;&#x4E00;&#x4E9B;&#x5B9A;&#x4E49;&#x3002;&#x5BF9;&#x4E8E;CNI&#x5B9A;&#x4E49;&#xFF0C;&#x6211;&#x4EEC;&#x5C06;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x5B9A;&#x4E49;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x5E76;&#x6307;&#x5B9A;&#x4E00;&#x4E9B;&#x9009;&#x9879;&#x89C2;&#x5BDF;&#x5176;&#x5DE5;&#x4F5C;&#x65B9;&#x5F0F;&#x3002;&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x4E0B;&#x9762;&#x547D;&#x4EE4;&#x521B;&#x5EFA;&#x914D;&#x7F6E;&#xFF08;&#x5047;&#x8BBE;&#x60A8;&#x662F;&#x5728;<code>~/cni</code>&#x4E2D;&#x521B;&#x5EFA;&#x8BE5;&#x6587;&#x4EF6;&#xFF09;...</p>
<pre><code>cat &gt; mybridge2.conf &lt;&lt;&quot;EOF&quot;
{
    &quot;cniVersion&quot;: &quot;0.2.0&quot;,
    &quot;name&quot;: &quot;mybridge&quot;,
    &quot;type&quot;: &quot;bridge&quot;,
    &quot;bridge&quot;: &quot;cni_bridge1&quot;,
    &quot;isGateway&quot;: true,
    &quot;ipMasq&quot;: true,
    &quot;ipam&quot;: {
        &quot;type&quot;: &quot;host-local&quot;,
        &quot;subnet&quot;: &quot;10.15.30.0/24&quot;,
        &quot;routes&quot;: [
            { &quot;dst&quot;: &quot;0.0.0.0/0&quot; },
            { &quot;dst&quot;: &quot;1.1.1.1/32&quot;, &quot;gw&quot;:&quot;10.15.30.1&quot;}
        ],
        &quot;rangeStart&quot;: &quot;10.15.30.100&quot;,
        &quot;rangeEnd&quot;: &quot;10.15.30.200&quot;,
        &quot;gateway&quot;: &quot;10.15.30.99&quot;
    }
}
EOF
</code></pre>
<p>&#x9664;&#x4E86;&#x4E0A;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#x770B;&#x5230;&#x7684;&#x53C2;&#x6570;&#x5916;&#xFF0C;&#x6211;&#x4EEC;&#x8FD8;&#x6DFB;&#x52A0;&#x4E86;&#x4EE5;&#x4E0B;&#x5185;&#x5BB9;&#x2026;&#x2026;</p>
<ul>
<li><strong>rangeStart</strong>&#xFF1A;&#x5B9A;&#x4E49;CNI&#x7ED9;&#x5BB9;&#x5668;&#x5206;&#x914D;&#x5B50;&#x7F51; IP &#x7684;&#x8D77;&#x59CB;&#x5730;&#x5740;</li>
<li><strong>rangeEnd</strong>&#xFF1A;&#x5B9A;&#x4E49;CNI&#x7ED9;&#x5BB9;&#x5668;&#x5206;&#x914D;&#x5B50;&#x7F51; IP &#x7684;&#x7ED3;&#x675F;&#x5730;&#x5740;</li>
<li><strong>gateway</strong>&#xFF1A;&#x5B9A;&#x4E49;&#x7F51;&#x5173;&#x5730;&#x5740;&#x3002;&#x5728;&#x4E0A;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#x6211;&#x4EEC;&#x6CA1;&#x6709;&#x5B9A;&#x4E49;&#xFF0C;&#x56E0;&#x6B64;CNI&#x5728; bridge &#x63A5;&#x53E3;&#x4E0A;&#x7528;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;IP&#x4F5C;&#x4E3A;&#x7F51;&#x5173;&#x3002;</li>
</ul>
<p>&#x60A8;&#x53EF;&#x80FD;&#x4F1A;&#x6CE8;&#x610F;&#x5230;&#xFF0C;&#x6B64;&#x914D;&#x7F6E;&#x4E2D;&#x7F3A;&#x5C11;&#x5173;&#x4E8E; DNS &#x7684;&#x914D;&#x7F6E;&#xFF0C;&#x8FD9;&#x4E2A;&#x6211;&#x4EEC;&#x5148;&#x4E0D;&#x63D0;&#xFF0C;&#x4E0B;&#x7BC7;&#x6587;&#x7AE0;&#x4F1A;&#x8BF4;&#x3002;</p>
<p>&#x76EE;&#x524D;&#x6211;&#x4EEC;&#x5DF2;&#x7ECF;&#x5B9A;&#x4E49;&#x597D;&#x4E86;&#x7F51;&#x7EDC;&#xFF0C;&#x6211;&#x4EEC;&#x8FD8;&#x9700;&#x8981;&#x5BB9;&#x5668;&#x7F51;&#x7EDC;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x7684;&#x8DEF;&#x5F84;&#x548C;&#x5BB9;&#x5668;ID&#x3002;&#x8981;&#x83B7;&#x53D6;&#x8BE5;&#x4FE1;&#x606F;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x7528;<code>docker inspect</code>&#x547D;&#x4EE4;&#x3002;</p>
<pre><code>user@ubuntu-1:~/cni$ sudo docker inspect cnitest | grep -E &apos;SandboxKey|Id&apos;
        &quot;Id&quot;: &quot;1018026ebc02fa0cbf2be35325f4833ec1086cf6364c7b2cf17d80255d7d4a27&quot;,
            &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/2e4813b1a912&quot;,
user@ubuntu-1:~/cni$
</code></pre>
<p>&#x5728;&#x6B64;&#x793A;&#x4F8B;&#x4E2D;&#xFF0C;&#x6211;&#x7528;<code>grep -E</code>&#x6B63;&#x5219;&#x6A21;&#x5F0F;&#x6765;&#x5339;&#x914D;&#x67E5;&#x627E;&#x5BB9;&#x5668;ID &#x548C; SandboxKey&#x3002;&#x5728; Docker &#x4E2D;&#xFF0C;&#x7F51;&#x7EDC;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x6587;&#x4EF6;&#x4F4D;&#x7F6E;&#x79F0;&#x4E3A;&#x201C; SandboxKey&#x201D;&#xFF0C;&#x800C;&#x201C; Id&#x201D;&#x662F; Docker  &#x4E3A;&#x5BB9;&#x5668;&#x5206;&#x914D;&#x7684;ID&#x3002;&#x6709;&#x4E86;&#x8FD9;&#x4E9B;&#x4FE1;&#x606F;&#x6211;&#x4EEC;&#x5C31;&#x53EF;&#x4EE5;&#x6784;&#x5EFA;&#x8C03;&#x7528;CNI&#x63D2;&#x4EF6;&#x7684;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x4E86;&#xFF0C;&#x5982;&#x4E0B;&#x6240;&#x793A;&#xFF1A;</p>
<ul>
<li><strong>CNI_COMMAND</strong>= ADD</li>
<li><strong>CNI_CONTAINERID</strong>= 1018026ebc02fa0cbf2be35325f4833ec1086cf6364c7b2cf17d80255d7d4a27</li>
<li><strong>CNI_NETNS</strong>= /var/run/docker/netns/2e4813b1a912</li>
<li><strong>CNI_IFNAME</strong>= eth0</li>
<li><strong>CNI_PATH</strong>=`pwd`</li>
</ul>
<p>&#x6211;&#x4EEC;&#x5C06;&#x6240;&#x6709;&#x5185;&#x5BB9;&#x653E;&#x5230;&#x4E00;&#x6761;&#x547D;&#x4EE4;&#x4E2D;&#xFF0C;&#x5982;&#x4E0B;&#x6240;&#x793A;&#xFF1A;</p>
<pre><code>sudo CNI_COMMAND=ADD CNI_CONTAINERID=1018026ebc02fa0cbf2be35325f4833ec1086cf6364c7b2cf17d80255d7d4a27 CNI_NETNS=/var/run/docker/netns/2e4813b1a912 CNI_IFNAME=eth0 CNI_PATH=`pwd` ./bridge &lt; mybridge2.conf
</code></pre>
<p>&#x7136;&#x540E;&#x8FD0;&#x884C;&#x63D2;&#x4EF6;...&#x548C;&#x6211;&#x4EEC;&#x5728;&#x4E0A;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#x770B;&#x5230;&#x7684;&#x4E00;&#x6837;&#xFF0C;&#x63D2;&#x4EF6;&#x6267;&#x884C;&#x540E;&#x4F1A;&#x5C06;&#x64CD;&#x4F5C;&#x7684;&#x7ED3;&#x679C;&#x4EE5;JSON&#x8FD4;&#x56DE;</p>
<pre><code>user@ubuntu-1:~/cni$ sudo CNI_COMMAND=ADD CNI_CONTAINERID=1018026ebc02fa0cbf2be35325f4833ec1086cf6364c7b2cf17d80255d7d4a27 CNI_NETNS=/var/run/docker/netns/2e4813b1a912 CNI_IFNAME=eth0 CNI_PATH=`pwd` ./bridge &lt; mybridge2.conf
{
    &quot;ip4&quot;: {
        &quot;ip&quot;: &quot;10.15.30.100/24&quot;,
        &quot;gateway&quot;: &quot;10.15.30.99&quot;,
        &quot;routes&quot;: [
            {
                &quot;dst&quot;: &quot;0.0.0.0/0&quot;
            },
            {
                &quot;dst&quot;: &quot;1.1.1.1/32&quot;,
                &quot;gw&quot;: &quot;10.15.30.1&quot;
            }
        ]
    },
    &quot;dns&quot;: {}
}user@ubuntu-1:~/cni$
</code></pre>
<p>&#x8BA9;&#x6211;&#x4EEC;&#x518D;&#x6B21;&#x67E5;&#x770B;&#x5BBF;&#x4E3B;&#x673A;&#x548C;&#x5BB9;&#x5668;&#x7F51;&#x7EDC;&#xFF0C;&#x770B;&#x770B;&#x6709;&#x4EC0;&#x4E48;&#x53D8;&#x5316;...</p>
<pre><code>user@ubuntu-1:~/cni$ ifconfig
cni_bridge0 Link encap:Ethernet  HWaddr 0a:58:0a:0f:14:01
          inet addr:10.15.20.1  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::a464:72ff:fe98:2652/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:536 (536.0 B)  TX bytes:648 (648.0 B)

cni_bridge1 Link encap:Ethernet  HWaddr 0a:58:0a:0f:1e:63
          inet addr:10.15.30.99  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::88f:bbff:fed9:118f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:536 (536.0 B)  TX bytes:648 (648.0 B)

docker0   Link encap:Ethernet  HWaddr 02:42:65:43:f5:a7
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ens32     Link encap:Ethernet  HWaddr 00:0c:29:3e:49:51
          inet addr:10.20.30.71  Bcast:10.20.30.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe3e:4951/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2568909 errors:0 dropped:67 overruns:0 frame:0
          TX packets:2057136 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:478331698 (478.3 MB)  TX bytes:1336636840 (1.3 GB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:5519471 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5519471 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:2796275357 (2.7 GB)  TX bytes:2796275357 (2.7 GB)

veth719c8174 Link encap:Ethernet  HWaddr aa:bb:6e:c7:cc:d8
          inet6 addr: fe80::a8bb:6eff:fec7:ccd8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:648 (648.0 B)  TX bytes:1206 (1.2 KB)

vethb125661a Link encap:Ethernet  HWaddr fa:54:99:46:65:08
          inet6 addr: fe80::f854:99ff:fe46:6508/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:648 (648.0 B)  TX bytes:1206 (1.2 KB)

user@ubuntu-1:~/cni$
</code></pre>
<p>&#x4ECE;&#x5BBF;&#x4E3B;&#x673A;&#x89D2;&#x5EA6;&#x6765;&#x770B;&#xFF0C;&#x6211;&#x4EEC;&#x73B0;&#x5728;&#x6709;&#x5F88;&#x591A;&#x7F51;&#x7EDC;&#x63A5;&#x53E3;&#x3002;cni_bridge0&#x63A5;&#x53E3;&#x548C;&#x5B83;&#x5173;&#x8054;&#x7684; VETH pair&#x662F;&#x4E0A;&#x7BC7;&#x6587;&#x7AE0;&#x64CD;&#x4F5C;&#x7559;&#x4E0B;&#x7684;&#xFF0C;&#x800C;cni_bridge1&#x53CA;&#x5176;&#x5173;&#x8054;&#x7684;VETH pair&#x63A5;&#x53E3;&#x5219;&#x662F;&#x6211;&#x4EEC;&#x521A;&#x521A;&#x521B;&#x5EFA;&#x7684;&#x3002;&#x60A8;&#x53EF;&#x4EE5;&#x770B;&#x5230;cni_bridge1&#x63A5;&#x53E3;&#x7684; IP &#x662F;&#x6211;&#x4EEC;&#x5728;CNI&#x7F51;&#x7EDC;&#x914D;&#x7F6E;&#x4E2D;&#x201C;gateway&#x201D;&#x90E8;&#x5206;&#x7684;IP&#x5730;&#x5740;&#x3002;&#x60A8;&#x8FD8;&#x4F1A;&#x6CE8;&#x610F;&#x5230;&#x6709;&#x4E00;&#x4E2A;docker0&#x63A5;&#x53E3;&#xFF0C;&#x5B83;&#x662F;&#x5728;&#x5B89;&#x88C5; Docker &#x65F6;&#x9ED8;&#x8BA4;&#x521B;&#x5EFA;&#x7684;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x7684;&#x5BB9;&#x5668;&#x6709;&#x4F55;&#x53D8;&#x5316;&#x5462;&#xFF1F;&#x8BA9;&#x6211;&#x4EEC;&#x770B;&#x770B;&#x5427;...</p>
<pre><code>user@ubuntu-1:~/cni$ sudo docker exec cnitest ifconfig
eth0      Link encap:Ethernet  HWaddr 0a:58:0a:0f:1e:64
          inet addr:10.15.30.100  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::f09e:73ff:fe3e:838c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1206 (1.2 KB)  TX bytes:648 (648.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

user@ubuntu-1:~/cni$ sudo docker exec cnitest ip route
default via 10.15.30.99 dev eth0
1.1.1.1 via 10.15.30.1 dev eth0
10.15.30.0/24 dev eth0  proto kernel  scope link  src 10.15.30.100
user@ubuntu-1:~/cni$
</code></pre>
<p>&#x5982;&#x60A8;&#x6240;&#x89C1;&#xFF0C;&#x5BB9;&#x5668;&#x7684;&#x7F51;&#x7EDC;&#x914D;&#x7F6E;&#x548C;&#x6211;&#x4EEC;&#x7684;&#x9884;&#x671F;&#x4E00;&#x81F4;...</p>
<ul>
<li>IP&#x5730;&#x5740;&#x5728;&#x5B9A;&#x4E49;&#x7684;&#x8303;&#x56F4;&#x5185;&#xFF08;10.15.30.100&#xFF09;</li>
<li>&#x5176;&#x63A5;&#x53E3;&#x540D;&#x4E3A;&#x201C; eth0&#x201D;</li>
<li>&#x9ED8;&#x8BA4;&#x8DEF;&#x7531;&#x6307;&#x5411;&#x7F51;&#x5173;IP&#x5730;&#x5740;10.15.30.99</li>
<li>&#x6211;&#x4EEC;&#x989D;&#x5916;&#x52A0;&#x7684;1.1.1.1/32&#x7684;&#x4E0B;&#x4E00;&#x8DF3;&#x8DEF;&#x7531;&#x4E3A;10.15.30.1</li>
</ul>
<p>&#x6700;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5C1D;&#x8BD5;&#x4ECE;&#x5BBF;&#x4E3B;&#x673A;&#x8BBF;&#x95EE;&#x5BB9;&#x5668;&#x4E2D;&#x7684;&#x670D;&#x52A1;...</p>
<pre><code>user@ubuntu-1:~/cni$ curl http://10.15.30.100
&lt;body&gt;
&lt;html&gt;
&lt;h1&gt;&lt;span &gt;Web Server #1 - Running on port 80&lt;/span&gt;&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
user@ubuntu-1:~/cni$
</code></pre>
<p>&#x6B63;&#x5982;&#x6211;&#x4EEC;&#x6240;&#x793A;&#xFF0C;&#x8FDE;&#x63A5;Docker&#x5BB9;&#x5668;&#x4E0E;&#x4E0A;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#x76F4;&#x63A5;&#x8FDE;&#x63A5;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x6CA1;&#x6709;&#x592A;&#x5927;&#x4E0D;&#x540C;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x53EF;&#x4EE5;&#x8BA4;&#x4E3A;&#x8FC7;&#x7A0B;&#x662F;&#x76F8;&#x540C;&#x7684;&#xFF0C;&#x6211;&#x4EEC;&#x53EA;&#x9700;&#x8981;&#x77E5;&#x9053;Docker&#x628A;&#x5BB9;&#x5668;&#x7684;&#x7F51;&#x7EDC;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x7684;&#x5B9A;&#x4E49;&#x5B58;&#x5728;&#x54EA;&#x91CC;&#x5C31;&#x884C;&#x4E86;&#x3002;&#x5728;&#x6211;&#x4EEC;&#x7684;&#x4E0B;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x5C06;&#x8BA8;&#x8BBA;&#x5982;&#x4F55;&#x901A;&#x8FC7; CNI &#x4E3A;&#x5BB9;&#x5668;&#x8FDB;&#x884C;DNS&#x76F8;&#x5173;&#x8BBE;&#x7F6E;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[运维开发必知——容器诊断工具集合]]></title><description><![CDATA[Docker 容器和 kubernetes 的诊断工具使用介绍]]></description><link>https://nomansky.top/yun-wei-kai-fa-bi-zhi-rong-qi-zhen-duan-gong-ju-ji-he/</link><guid isPermaLink="false">5de35e31d0a9eb000113f733</guid><category><![CDATA[Kubernetes]]></category><dc:creator><![CDATA[n0mansky]]></dc:creator><pubDate>Sun, 01 Dec 2019 06:35:50 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="0x00">0x00 &#x524D;&#x8A00;</h1>
<p>&#x968F;&#x7740;&#x5FAE;&#x670D;&#x52A1;&#x67B6;&#x6784;&#x548C;&#x4E91;&#x8BA1;&#x7B97;&#x7684;&#x666E;&#x53CA;&#xFF0C;&#x8D8A;&#x6765;&#x8D8A;&#x591A;&#x4F01;&#x4E1A;&#x7684;&#x5E94;&#x7528;&#x90FD;&#x4E0A;&#x4E86;&#x4E91;&#xFF0C;&#x4E0D;&#x4EC5;&#x662F;&#x4E91;&#x57FA;&#x7840;&#x8BBE;&#x65BD; IaaS &#xFF0C;&#x5982; kubernetes &#x7B49; PaaS &#x9879;&#x76EE;&#x4E5F;&#x662F;&#x8D8A;&#x6765;&#x8D8A;&#x70ED;&#x95E8;&#x3002;&#x4F46;&#x65B0;&#x7684;&#x6280;&#x672F;&#x4F1A;&#x5E26;&#x6765;&#x65B0;&#x7684;&#x67B6;&#x6784;&#x590D;&#x6742;&#xFF0C;&#x540C;&#x65F6;&#x4E5F;&#x4F1A;&#x4F7F;&#x6392;&#x67E5;&#x95EE;&#x9898;&#x66F4;&#x52A0;&#x56F0;&#x96BE;&#xFF0C;&#x56E0;&#x6B64;&#x5F88;&#x591A;&#x8FD0;&#x7EF4;&#x548C;&#x5F00;&#x53D1;&#x540C;&#x5B66;&#x90FD;&#x89C9;&#x5F97;&#x7528;&#x5E73;&#x65F6;&#x7528;&#x7684;&#x987A;&#x624B;&#x7684;&#x5DE5;&#x5177;&#x548C;&#x624B;&#x6BB5;&#x5728;&#x5BB9;&#x5668;&#x91CC;&#x6392;&#x67E5;&#x95EE;&#x9898;&#x4E0D;&#x597D;&#x4F7F;&#x4E86;&#x3002;&#x5DE5;&#x6B32;&#x5584;&#x5176;&#x4E8B;&#x5FC5;&#x5148;&#x5229;&#x5176;&#x5668;&#xFF0C;&#x6B63;&#x662F;&#x7531;&#x4E8E;&#x8FD9;&#x6837;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x6392;&#x67E5;&#x5BB9;&#x5668;&#x95EE;&#x9898;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x9700;&#x8981;&#x5F15;&#x5165;&#x65B0;&#x7684;&#x5DE5;&#x5177;&#x548C;&#x624B;&#x6BB5;&#x3002;</p>
<h1 id="0x10">0x10 &#x5BB9;&#x5668;&#x57FA;&#x7840;</h1>
<p>&#x5728;&#x5B66;&#x4E60;&#x5DE5;&#x5177;&#x7684;&#x4F7F;&#x7528;&#x524D;&#xFF0C;&#x6211;&#x4EEC;&#x9996;&#x5148;&#x9700;&#x8981;&#x7B80;&#x5355;&#x7684;&#x4E86;&#x89E3;&#x4E0B;&#x5BB9;&#x5668;&#x7684;&#x539F;&#x7406;&#x3002;&#x5047;&#x5982;&#x4E00;&#x53F0;&#x673A;&#x5668;&#x662F;&#x4E00;&#x95F4;&#x623F;&#x5B50;&#xFF0C;&#x90A3;&#x4E48;&#x8FDB;&#x7A0B;&#x5C31;&#x662F;&#x4F4F;&#x5728;&#x91CC;&#x9762;&#x7684;&#x4E00;&#x4E2A;&#x4E2A;&#x7684;&#x4EBA;&#xFF0C;&#x5728;&#x5355;&#x4F53;&#x5E94;&#x7528;&#x7684;&#x65F6;&#x4EE3;&#xFF0C;&#x6240;&#x6709;&#x4EBA;&#x90FD;&#x4F4F;&#x5728;&#x4E00;&#x95F4;&#x623F;&#x5B50;&#x91CC;&#xFF0C;&#x800C;&#x5BB9;&#x5668;&#x6280;&#x672F;&#x5C31;&#x662F;&#x901A;&#x8FC7;&#x4E00;&#x4E9B;&#x624B;&#x6BB5;&#x628A;&#x8FD9;&#x4E9B;&#x4EBA;&#x90FD;&#x9694;&#x5F00;&#xFF0C;&#x8BA9;&#x6BCF;&#x4E2A;&#x4EBA;&#x90FD;&#x4EE5;&#x4E3A;&#x81EA;&#x5DF1;&#x4F4F;&#x4E0A;&#x6709;&#x72EC;&#x536B;&#xFF08;&#x7F51;&#x7EDC;&#xFF0C;IPC&#xFF0C;namespace &#x7B49;&#x8D44;&#x6E90;&#xFF09;&#x7684;&#x5355;&#x95F4;&#x3002;&#x800C;<br>
&#x8FD9;&#x4E9B;&#x9694;&#x79BB;&#x548C;&#x9650;&#x5236;&#x7684;&#x4E3B;&#x8981;&#x4F7F;&#x7528;&#x7684;&#x5982;&#x4E0B;&#x6280;&#x672F;&#xFF1A;</p>
<ul>
<li>cgroups &#x8D44;&#x6E90;&#x9650;&#x5236;</li>
<li>namespace &#x8D44;&#x6E90;&#x9694;&#x79BB;</li>
<li>rootfs  &#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x9694;&#x79BB;</li>
</ul>
<p>&#x5728;&#x5355;&#x4F53;&#x5E94;&#x7528;&#x7684;&#x65F6;&#x4EE3;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x8FDB;&#x7A0B;&#x90FD;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x91CC;&#xFF0C;&#x4E14;&#x542F;&#x52A8;&#x7684;&#x8FDB;&#x7A0B;&#x90FD;&#x6CA1;&#x6709;&#x9694;&#x79BB;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#xFF0C;&#x90A3;&#x4E48;&#x81EA;&#x7136;&#x8C03;&#x8BD5;&#x5DE5;&#x5177;&#x8FDB;&#x7A0B;&#x4E5F;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#xFF0C;&#x4E5F;&#x5C31;&#x53EF;&#x4EE5; debug &#x5176;&#x4ED6;&#x8FDB;&#x7A0B;&#x3002;&#x800C;&#x5BB9;&#x5668;&#x6280;&#x672F;&#x7531;&#x4E8E;&#x5206;&#x5272;&#x6210;&#x4E00;&#x4E2A;&#x4E2A;&#x7684;&#x5C0F;&#x623F;&#x95F4;&#xFF0C;&#x5982;&#x679C;&#x60F3;&#x8981;&#x67E5;&#x770B;&#x5355;&#x4E2A;&#x623F;&#x95F4;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x867D;&#x7136;&#x5728;&#x5927;&#x7BA1;&#x5BB6;&#xFF08;&#x5BBF;&#x4E3B;&#x673A;&#xFF09;&#x7684;&#x4E0A;&#x5E1D;&#x89C6;&#x89D2;&#x4E00;&#x6837;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C; &#x4F46;&#x4E3A;&#x4E86;&#x51CF;&#x5C11;&#x5E72;&#x6270;&#x5E76;&#x66F4;&#x52A0;&#x7B26;&#x5408;&#x6211;&#x4EEC;&#x5E73;&#x65F6;&#x7684;&#x4F7F;&#x7528;&#x4E60;&#x60EF;&#xFF0C;&#x6211;&#x4EEC;&#x5C31;&#x9700;&#x8981;&#x8FDB;&#x5165;&#x5230;&#x623F;&#x95F4;&#xFF08;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#xFF09;&#x91CC;&#x9762;&#x67E5;&#x770B;&#x3002;</p>
<p>&#x4F8B;&#x5982;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; <code>docker inspect CONTAINER_ID</code> &#x83B7;&#x53D6;&#x5230;&#x67D0;&#x4E2A;&#x5BB9;&#x5668;&#x8D44;&#x6E90;&#x9694;&#x79BB;&#x7684;&#x6587;&#x4EF6;&#x7684;&#x5730;&#x5740;&#xFF0C;&#x5982;&#x4E0B;<code>&quot;SandboxKey&quot;: &quot;/var/run/docker/netns/50def85bf6e2&quot;</code>&#x5C31;&#x662F;&#x3002;</p>
<pre><code>@ubuntu &#x279C; k8s-debug  docker inspect 0dde03166e02
...
            &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/50def85bf6e2&quot;,
            &quot;SecondaryIPAddresses&quot;: null,
            &quot;SecondaryIPv6Addresses&quot;: null,
            &quot;EndpointID&quot;: &quot;7faa1e764317cdfadf7f31b7ed2fecff62b458211f79fadb3362c8e22755f326&quot;,
            &quot;Gateway&quot;: &quot;172.17.0.1&quot;,                    
...
</code></pre>
<p>&#x800C;&#x5BB9;&#x5668;&#x7684;&#x8BCA;&#x65AD;&#x5DE5;&#x5177;&#x5C31;&#x662F;&#x81EA;&#x5E26;&#x4E86;&#x90E8;&#x5206;&#x8C03;&#x8BD5;&#x5DE5;&#x5177;&#x7684;&#x955C;&#x50CF;&#xFF0C;&#x5E76;&#x80FD;&#x6839;&#x636E;&#x5BB9;&#x5668; ID &#x5E2E;&#x6211;&#x4EEC;&#x81EA;&#x52A8;&#x5730;&#x8FDB;&#x5165;&#x5230;&#x623F;&#x95F4;&#xFF08;&#x7F51;&#x7EDC;&#xFF0C;IPC &#x547D;&#x540D;&#x7A7A;&#x95F4;&#x7B49;&#xFF09;&#x3002;<br>
&#x5728;&#x521D;&#x6B65;&#x4E86;&#x89E3;&#x4E86;&#x5BB9;&#x5668;&#x7684;&#x539F;&#x7406;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x4FBF;&#x53EF;&#x8FDB;&#x5165;&#x5DE5;&#x5177;&#x7684;&#x4ECB;&#x7ECD;&#x4E86;&#x3002;</p>
<h1 id="0x20netshoot">0x20 netshoot</h1>
<p>&#x9996;&#x5148;&#x4ECB;&#x7ECD;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x5DE5;&#x5177;&#x662F;<a href="https://github.com/nicolaka/netshoot?ref=nomansky.top">netshoot</a>&#xFF0C;netshoot &#x7684;&#x81EA;&#x6211;&#x5B9A;&#x4F4D;&#x5C31;&#x662F;&#x5BB9;&#x5668;&#x7F51;&#x7EDC;&#x8BCA;&#x65AD;&#x7684;&#x745E;&#x58EB;&#x519B;&#x5200;&#xFF0C;&#x7B80;&#x5355;&#x6765;&#x8BF4;&#xFF0C;netshoot &#x5176;&#x5B9E;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x88C5;&#x6EE1;&#x4E86;&#x5404;&#x79CD;&#x5DE5;&#x5177;&#x7684;&#x955C;&#x50CF;&#xFF0C;&#x4ED6;&#x7528;&#x8D77;&#x6765;&#x4E5F;&#x5F88;&#x7B80;&#x5355;&#x3002;</p>
<ul>
<li>&#x6267;&#x884C;<code>docker run -it --net container:&lt;container_name|container_id&gt; nicolaka/netshoot</code> &#x5C31;&#x884C;&#xFF0C;&#x8FD9;&#x91CC;&#x7684;<code>--net</code>&#x662F; docker &#x547D;&#x4EE4;&#x6307;&#x5B9A;&#x8BE5;&#x5BB9;&#x5668;&#x8981;&#x8054;&#x7ED3;&#x5230;&#x54EA;&#x4E2A;&#x5BB9;&#x5668;&#x7684;&#x7F51;&#x7EDC;&#x547D;&#x540D;&#x7A7A;&#x95F4;</li>
<li>&#x5982;&#x679C;&#x8981;&#x8FDB;&#x5165;&#x5BBF;&#x4E3B;&#x673A;&#x7684;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x5219;&#x6307;&#x5B9A;<code>--net host</code>&#x5C31;&#x884C;&#x4E86;</li>
<li>&#x5982;&#x679C;&#x8981;&#x8BCA;&#x65AD; docker NIC&#x8BBE;&#x5907;&#x7684;&#x7F51;&#x7EDC; &#x60C5;&#x51B5;&#xFF0C;&#x5219;&#x53EF;&#x4EE5;&#x7528;&#x5DE5;&#x5177;<code>nsenter</code>&#x8FDB;&#x5165;NIC &#x8BBE;&#x5907;&#x7684;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x6392;&#x67E5;&#xFF0C;&#x540E;&#x9762;&#x6211;&#x4F1A;&#x4ECB;&#x7ECD;&#x8FD9;&#x4E2A;&#x5DE5;&#x5177;</li>
</ul>
<p>&#x53E6;&#x5916;&#xFF0C;&#x5982;&#x679C;&#x662F;&#x5728; kubernetes &#x91CC;&#x9762;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x6267;&#x884C;<code>kubectl run test-lab --generator=run-pod/v1 --rm -i --tty --overrides=&apos;{&quot;spec&quot;: {&quot;hostNetwork&quot;: true}}&apos; --image nicolaka/netshoot -- /bin/bash</code> &#x8FD9;&#x4E2A;&#x547D;&#x4EE4;&#x8FDB;&#x5165;&#x5BBF;&#x4E3B;&#x673A;&#x7684;&#x7F51;&#x7EDC;&#x3002;&#x522B;&#x6015;&#x8FD9;&#x4E2A;&#x547D;&#x4EE4;&#x957F;&#xFF0C;&#x6211;&#x6765;&#x4E00;&#x4E00;&#x89E3;&#x91CA;&#x4E0B;&#x8FD9;&#x6761;&#x547D;&#x4EE4;&#x7684;&#x5404;&#x4E2A;&#x9009;&#x9879;&#x7684;&#x4F5C;&#x7528;</p>
<ul>
<li><code>kubectl run test_lab --generator=pod/v1 --rm -i --tty</code>&#x610F;&#x601D;&#x662F;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x4E00;&#x6B21;&#x6027;&#x7684;&#x540D;&#x53EB;<code>test_lab</code>&#x7684; Pod &#x8D44;&#x6E90;&#x5E76;&#x4E14;&#x4F7F;&#x7528;&#x6807;&#x51C6;&#x8F93;&#x5165;&#x8F93;&#x51FA;&#x4EA4;&#x4E92;</li>
<li><code>--overrides=&apos;{&quot;spec&quot;: {&quot;hostNetwork&quot;: true}}&apos;</code>&#x610F;&#x601D;&#x662F;&#x4F7F;&#x7528;&#x5BBF;&#x4E3B;&#x673A;&#x7F51;&#x7EDC;&#xFF0C;&#x5177;&#x4F53;&#x54EA;&#x53F0;&#x5BBF;&#x4E3B;&#x673A;&#x8981;&#x770B;&#x8FD9;&#x4E2A; Pod &#x8C03;&#x5EA6;&#x5230;&#x54EA;&#x4E2A;&#x8282;&#x70B9;&#x3002;</li>
<li><code>--image nicolaka/netshoot</code>&#x6307;&#x5B9A; Pod &#x7684;&#x955C;&#x50CF;</li>
<li><code>--</code> &#x8FD9;&#x662F; bash &#x7684;&#x5185;&#x7F6E;&#x547D;&#x4EE4;&#x9009;&#x9879;&#xFF0C;&#x662F;&#x6807;&#x5FD7;&#x547D;&#x4EE4;&#x7684;&#x7ED3;&#x675F;&#x7684;&#x610F;&#x601D;&#xFF0C;&#x4E3E;&#x4E2A;&#x4F8B;&#x5B50;&#xFF1A;&#x5982;&#x679C;&#x6211;&#x60F3;&#x8981;&#x5728;&#x6587;&#x4EF6;&#x91CC;&#x7528;<code>grep</code>&#x641C;&#x7D22;<code>-v</code>&#x5B57;&#x7B26;&#x4E32;&#xFF0C;<code>grep -v filename</code>&#x4E2D;<code>-v</code>&#x4F1A;&#x88AB;&#x89C6;&#x4E3A;&#x9009;&#x9879;&#xFF0C;&#x4F46;&#x6211;&#x5982;&#x679C;&#x4F7F;&#x7528;<code>grep -- -v filename</code>&#x90A3;&#x4E48;&#x5C31;&#x53EF;&#x4EE5;&#x6B63;&#x5E38;&#x641C;&#x7D22;&#x4E86;</li>
</ul>
<h2 id="0x21">0x21 &#x6F14;&#x793A;</h2>
<p>&#x4E0B;&#x9762;&#x6211;&#x6765;&#x6F14;&#x793A;&#x51E0;&#x4E2A;&#x4F8B;&#x5B50;:</p>
<ol>
<li>&#x4F7F;&#x7528; tcpdump &#x6293;&#x5BB9;&#x5668;&#x7684;&#x5305;&#x5E76;&#x62F7;&#x8D1D; pcap &#x6587;&#x4EF6;&#x51FA;&#x6765;&#xFF0C;&#x4FBF;&#x4E8E;&#x7528; wireshark &#x5206;&#x6790;<pre><code>@ubuntu &#x279C; k8s-debug  mkdir -p /tmp/netshoot
@ubuntu &#x279C; k8s-debug  docker ps
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS                                          NAMES
0dde03166e02        jumpserver/jms_all:1.5.4   &quot;entrypoint.sh&quot;     3 weeks ago         Up 3weeks          ...   mystifying_williamson
@ubuntu &#x279C; k8s-debug  docker run -it -v /tmp/netshoot:/tmp --net container:0dde03166e02  nicolaka/netshoot
Welcome to Netshoot! (github.com/nicolaka/netshoot)               
root @ / 
[1]   &#x2192; tcpdump -nn -i any -w /tmp/pkg.pcap
[2]   &#x2192; exit
</code></pre>
&#x5177;&#x4F53;&#x547D;&#x4EE4;&#x4F7F;&#x7528;&#x4E0E;&#x4E4B;&#x524D;&#x7684;&#x5DEE;&#x4E0D;&#x591A;&#xFF0C;&#x53EA;&#x4E0D;&#x8FC7;&#x628A;&#x5BBF;&#x4E3B;&#x673A;&#x4E0A;&#x7684;<code>/tmp/netshoot</code>&#x76EE;&#x5F55; bind-mount &#x5230;&#x4E86;&#x5BB9;&#x5668;&#x7684;<code>/tmp</code>&#x76EE;&#x5F55;</li>
<li>&#x6709;&#x65F6;&#x5019;&#x6211;&#x4EEC;&#x8FD8;&#x9700;&#x8981;&#x8C03;&#x8BD5; bridge &#x6216;&#x8005; overlay &#x7F51;&#x7EDC;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; nsenter&#xFF0C;nsenter &#x53EF;&#x4EE5;&#x8FDB;&#x5165;&#x4EFB;&#x4F55;&#x547D;&#x540D;&#x7A7A;&#x95F4;<pre><code>@ubuntu &#x279C; ~  docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
...
0ipu2p43c6jh        ingress             overlay             swarm
697402c52a87        none                null                local
@ubuntu &#x279C; ~   docker run -it --rm -v /var/run/docker/netns:/var/run/docker/netns --privileged=true nicolaka/netshoot
Welcome to Netshoot! (github.com/nicolaka/netshoot)
root @ /
[1] &#x1F433;  &#x2192; ls /var/run/docker/netns/
1-0ipu2p43c6  50def85bf6e2  83f9ffa847d7  default       ingress_sbox
root @ /var/run/docker/netns
[6] &#x1F433;  &#x2192; nsenter --net=/var/run/docker/netns/1-0ipu2p43c6 sh
root @ /run/docker/netns
[#] &#x1F433;  &#x2192; ifconfig
br0     Link encap:Ethernet  HWaddr 02:61:F2:E4:26:3B
        inet addr:10.255.0.1  Bcast:10.255.255.255  Mask:255.255.0.0
        UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
...
vxlan0  Link encap:Ethernet  HWaddr 02:61:F2:E4:26:3B
        UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
        RX packets:0 errors:0 dropped:0 overruns:0 frame:0
        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0
        RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
root @ /run/docker/netns
[#] &#x1F433;  &#x2192; bridge fdb show br0
33:33:00:00:00:01 dev br0 self permanent
01:00:5e:00:00:01 dev br0 self permanent
02:61:f2:e4:26:3b dev vxlan0 master br0 permanent
...
</code></pre>
&#x4E0A;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x9996;&#x5148;&#x6211;&#x4EEC;&#x662F;&#x8FDB;&#x5165;&#x4E86;<code>1-0ipu2p43c6</code>&#x7684;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#xFF0C;&#x5373;&#x90A3;&#x4E2A;&#x53EB; ingress &#x7684; overlay &#x7F51;&#x7EDC;&#xFF0C;&#x7136;&#x540E;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x67E5;&#x770B;&#x8FD9;&#x4E2A; NIC &#x8BBE;&#x5907;&#x4E0A;&#x7684;fdb &#x8868;</li>
<li>&#x6211;&#x4EEC;&#x4E5F;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x6302;&#x8F7D; docker &#x7684; unix sock &#x6587;&#x4EF6;&#x67E5;&#x770B;&#x5BB9;&#x5668;&#x7684; metrics<pre><code>docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock nicolaka/netshoot ctop
</code></pre>
&#x5982;&#x4E0B;&#x56FE;&#x6240;&#x793A;<br>
<img src="http://img.nomansky.top/pic/20191201/1.png?imageMogr2/auto-orient/thumbnail/800x/blur/1x0/quality/75%7Cimageslim" alt="1.png" loading="lazy"><br>
netshoot &#x5DE5;&#x5177;&#x975E;&#x5E38;&#x5F3A;&#x5927;&#xFF0C;&#x8FD8;&#x6709;&#x5F88;&#x591A;&#x529F;&#x80FD;&#x53EF;&#x4EE5;&#x81EA;&#x884C;&#x53BB;&#x63A2;&#x7D22;&#xFF0C;<a href="https://github.com/nicolaka/netshoot?ref=nomansky.top">netshoot</a>&#x4E0A;&#x6709;&#x8BE6;&#x7EC6;&#x7684;&#x8BF4;&#x660E;&#x3002;</li>
</ol>
<h1 id="0x30dockerdebug">0x30 docker-debug</h1>
<p>&#x4E0A;&#x9762;&#x4ECB;&#x7ECD;&#x7684; netshoot &#x4E3B;&#x8981;&#x5B9A;&#x4F4D;&#x4E8E; docker &#x7F51;&#x7EDC;&#x7684;&#x8BCA;&#x65AD;&#xFF0C;&#x4ECE;&#x540D;&#x5B57;&#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#x6765;&#x3002;&#x800C;&#x6211;&#x4EEC;&#x73B0;&#x5728;&#x4ECB;&#x7ECD;&#x7684;&#x5DE5;&#x5177; <a href="https://github.com/zeromake/docker-debug?ref=nomansky.top">docker-debug</a>&#x53EF;&#x4EE5;&#x8BF4;&#x662F; netshoot &#x7684;&#x5347;&#x7EA7;&#x7248;&#xFF0C;&#x4ED6;&#x4E0D;&#x4EC5;&#x53EF;&#x4EE5;&#x8FDB;&#x5165;&#x76EE;&#x6807;&#x5BB9;&#x5668;&#x7684;&#x7F51;&#x7EDC;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x8FDB;&#x5165; pid,user,filesystem,ipc &#x7684;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x64CD;&#x4F5C;&#x7684;&#x7A7A;&#x95F4;&#x5C31;&#x66F4;&#x5927;&#x4E86;&#x3002;&#x8BDD;&#x4E0D;&#x591A;&#x8BF4;&#xFF0C;&#x6211;&#x4EEC;&#x5F00;&#x59CB;&#x6F14;&#x793A;&#x3002;</p>
<h2 id="0x31">0x31 &#x5B89;&#x88C5;</h2>
<p>&#x9996;&#x5148;&#x6211;&#x4EEC;&#x8981;&#x4E0B;&#x8F7D; docker-debug &#x7684;&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;</p>
<pre><code>@ubuntu &#x279C; docker-debug  wget docker-debug https://github.com/zeromake/docker-debug/releases/download/0.6.2/docker-debug-linux-amd64 -O docker-debug
@ubuntu &#x279C; docker-debug  chmod +x docker-debug
@ubuntu &#x279C; docker-debug  mv docker-debug /usr/bin
@ubuntu &#x279C; docker-debug  docker-debug info
Version:	0.6.2
Platform:	TravisLinux
Commit:		cf4cc41
Time:		2019-06-20 05:40:52 +0000
</code></pre>
<p>&#x7136;&#x540E;&#x6211;&#x8D4B;&#x4E88;&#x4E86;&#x6587;&#x4EF6;&#x6267;&#x884C;&#x6743;&#x9650;&#x5E76;&#x79FB;&#x52A8;&#x5230;<code>/usr/bin</code>&#x76EE;&#x5F55;&#x4E0B;&#xFF0C;&#x5982;&#x679C;&#x6267;&#x884C;<code>docker-debug info</code>&#x770B;&#x5230;&#x6709;&#x6B63;&#x786E;&#x8F93;&#x51FA;&#xFF0C;&#x5219;&#x8BF4;&#x660E;&#x5B89;&#x88C5;&#x6210;&#x529F;&#x4E86;</p>
<h2 id="0x32">0x32 &#x4F7F;&#x7528;</h2>
<p>&#x4F7F;&#x7528;&#x5C31;&#x5F88;&#x7B80;&#x5355;&#x4E86;&#xFF0C;&#x9996;&#x5148;&#x6211;&#x4EEC;&#x83B7;&#x53D6;&#x5230;&#x5BB9;&#x5668;&#x7684;&#x540D;&#x5B57;&#x6216;&#x8005;&#x5BB9;&#x5668; ID</p>
<pre><code>@ubuntu &#x279C; docker-debug  docker ps
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS                                          NAMES
0dde03166e02        jumpserver/jms_all:1.5.4   &quot;entrypoint.sh&quot;     3 weeks ago         Up 3 weeks          ...   mystifying_williamson
</code></pre>
<p>&#x7136;&#x540E;&#x6267;&#x884C;<code>docker-debug &lt;CONTAINER_ID|CONTAINER_NAME&gt; COMMAND</code>&#x5C31;&#x53EF;&#x4EE5;&#x4E86;</p>
<pre><code>@ubuntu &#x279C; docker-debug  docker-debug 0dde03166e02 bash
bash-5.0# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
...
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      52/python3.6
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      110/java
...
bash-5.0# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:32776325 errors:0 dropped:0 overruns:0 frame:0
...
bash-5.0# ls /mnt/container/
anaconda-post.log  dev                lib                mnt                root               srv                usr
bin                etc                lib64              opt                run                sys                var
config             home               media              proc               sbin               tmp
</code></pre>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5DF2;&#x7ECF;&#x8FDB;&#x5165;&#x4E86;&#x76EE;&#x6807;&#x5BB9;&#x5668;&#x7684; ipc,network,filesystem,pid &#x7684;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x4E86;&#xFF0C;&#x800C;&#x76EE;&#x6807;&#x5BB9;&#x5668;&#x7684;root&#x5219;&#x6302;&#x8F7D;&#x5728;&#x4E86;<code>/mnt/container</code>&#x76EE;&#x5F55;&#x4E0B;&#x3002;<br>
&#x6B64;&#x5916;&#xFF0C;&#x6211;&#x4EEC;&#x8FD8;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x8BBE;&#x7F6E; docker-debug &#x5728;<code>~/.docker-debug/config.toml</code>&#x7684;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4F7F;&#x7528;&#x81EA;&#x5B9A;&#x4E49;&#x7684;&#x8BCA;&#x65AD;&#x955C;&#x50CF;</p>
<pre><code>version = &quot;0.6.1&quot;
image = &quot;nicolaka/netshoot:latest&quot;
mount_dir = &quot;/mnt/container&quot;
timeout = 10000000000
config_default = &quot;default&quot;

[config]
  [config.default]
    host = &quot;unix:///var/run/docker.sock&quot;
    tls = false
    cert_dir = &quot;&quot;
    cert_password = &quot;&quot;
</code></pre>
<p>&#x5176;&#x4ED6;&#x5C31;&#x4E0D;&#x505A;&#x8FC7;&#x591A;&#x4ECB;&#x7ECD;&#x4E86;</p>
<h1 id="0x40kubectldebug">0x40 kubectl-debug</h1>
<p>&#x5728;&#x4ECB;&#x7ECD;&#x4E86; docker &#x7684; debug &#x7684;&#x5DE5;&#x5177;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x4E86;&#x89E3;&#x4E86;&#x5BB9;&#x5668;&#x8BCA;&#x65AD;&#x5DE5;&#x5177;&#x7684;&#x539F;&#x7406;&#x548C;&#x4F7F;&#x7528;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x6211;&#x4EEC;&#x8981;&#x5B66;&#x4E60; kubernetes &#x7684;&#x5BB9;&#x5668;&#x8BCA;&#x65AD;&#x5DE5;&#x5177;&#x3002;&#x867D;&#x7136; kubernetes &#x4E0A;&#x4E5F;&#x53EF;&#x4EE5;&#x7528;&#x6211;&#x4E0A;&#x9762;&#x4ECB;&#x7ECD;&#x7684;&#x90A3;&#x4E9B;&#x5DE5;&#x5177;&#xFF0C;&#x4F46; kubernetes &#x4E0A;&#x7684;&#x5BB9;&#x5668;&#x6BD5;&#x7ADF;&#x8FD0;&#x884C;&#x5728;&#x4E0D;&#x540C;&#x7684; node &#x4E0A;&#xFF0C;&#x7528;&#x8D77;&#x6765;&#x5C31;&#x4E0D;&#x592A;&#x65B9;&#x4FBF;&#xFF0C;&#x6240;&#x4EE5;&#x5C31;&#x8981;&#x7528;&#x5230; <a href="https://github.com/aylei/kubectl-debug?ref=nomansky.top">kubectl-debug</a> &#x8FD9;&#x4E2A;&#x5DE5;&#x5177;&#x4E86;&#x3002;</p>
<p>kubectl-debug &#x5176;&#x5B9E;&#x5C31;&#x662F;&#x4E00;&#x4E2A; kubectl &#x7684;&#x63D2;&#x4EF6;&#xFF0C;&#x4ED6;&#x7684;&#x539F;&#x7406;&#x548C; docker &#x5BB9;&#x5668;&#x8BCA;&#x65AD;&#x5DE5;&#x5177;&#x5927;&#x540C;&#x5C0F;&#x5F02;&#x3002;kubectl-debug &#x53EF;&#x4EE5;&#x5E2E;&#x6211;&#x4EEC;&#x5728; &#x67D0;&#x4E2A; Pod &#x7684;&#x8282;&#x70B9;&#x4E0A;&#x8D77;&#x4E00;&#x4E2A;&#x5BB9;&#x5668;&#xFF0C;&#x5E76;&#x5C06;&#x8FD9;&#x4E2A;&#x5BB9;&#x5668;&#x52A0;&#x5165;&#x5230;&#x76EE;&#x6807;&#x5BB9;&#x5668;&#x7684;pid,network,user,icp &#x7684;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x3002;kubectl-debug &#x67B6;&#x6784;&#x4E3B;&#x8981;&#x53EF;&#x4EE5;&#x5206;&#x4E3A;&#x4E24;&#x90E8;&#x5206;&#xFF1A;</p>
<ul>
<li>&#x5BA2;&#x6237;&#x7AEF;&#xFF1A;kubectl-debug &#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;</li>
<li>&#x670D;&#x52A1;&#x7AEF;&#xFF1A;agent &#x5BB9;&#x5668;<br>
&#x5BA2;&#x6237;&#x7AEF;&#x901A;&#x8FC7;&#x63A7;&#x5236; node &#x4E0A;&#x7684; agent &#x670D;&#x52A1;&#x7AEF;&#x4E0E;&#x5BB9;&#x5668;&#x8FD0;&#x884C;&#x65F6;&#x901A;&#x4FE1;&#xFF0C;&#x4ECE;&#x800C;&#x542F;&#x52A8;&#x4E00;&#x4E2A;&#x5BB9;&#x5668;&#x5E76;&#x8FDB;&#x5165;&#x5230;&#x6307;&#x5B9A; Pod &#x7684;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#xFF0C;&#x53EF;&#x4EE5;&#x8BF4; agent &#x5C31;&#x662F;&#x4E00;&#x4E2A; debug &#x5BB9;&#x5668;&#x4E0E;&#x5BA2;&#x6237;&#x7AEF;&#x4E4B;&#x95F4;&#x7684;&#x4E2D;&#x7EE7;&#x3002;&#x800C;&#x4ECE; kubectl-debug &#x7684;&#x5DE5;&#x4F5C;&#x6A21;&#x5F0F;&#x6765;&#x770B;&#xFF0C;&#x53EF;&#x4EE5;&#x5206;&#x4E3A;&#x4E24;&#x79CD;&#x6A21;&#x5F0F;&#xFF1A;</li>
<li>&#x975E;&#x5E38;&#x9A7B;&#x670D;&#x52A1;&#x7AEF;&#xFF1A;agentless</li>
<li>&#x5E38;&#x9A7B;&#x670D;&#x52A1;&#x7AEF;&#xFF1A; DaemonSet<br>
&#x7B80;&#x5355;&#x6765;&#x8BF4;&#x5C31;&#x662F; agentless &#x6A21;&#x5F0F;&#x53EA;&#x6709;&#x5728;&#x6BCF;&#x6B21; kubectl-debug &#x8FDB;&#x884C;&#x8C03;&#x8BD5; Pod &#x7684;&#x65F6;&#x5019;&#x624D;&#x4F1A;&#x542F;&#x52A8;&#x4E00;&#x4E2A; agent &#x670D;&#x52A1;&#x7AEF;&#xFF0C;&#x8C03;&#x8BD5;&#x5B8C;&#x6210;&#x540E;&#x81EA;&#x52A8;&#x6E05;&#x7406; agent&#xFF0C;&#x6B64;&#x6A21;&#x5F0F;&#x7684;&#x4F18;&#x70B9;&#x662F;&#x4E0D;&#x90A3;&#x4E48;&#x5360;&#x7528; kubernetes &#x96C6;&#x7FA4;&#x8D44;&#x6E90;&#xFF0C;&#x800C; DaemonSet &#x6A21;&#x5F0F;&#x5C31;&#x662F;&#x5728;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x4E0A;&#x90FD;&#x4F1A;&#x5E38;&#x9A7B;&#x4E00;&#x4E2A; DaemonSet &#x7684;  agent&#xFF0C; &#x597D;&#x5904;&#x5C31;&#x662F;&#x542F;&#x52A8;&#x5FEB;&#x3002;<br>
&#x6B64;&#x5916;&#x9488;&#x5BF9; node &#x8282;&#x70B9;&#x65E0;&#x6CD5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;&#x7684;&#x60C5;&#x51B5;&#xFF0C;kubectl-debug &#x8FD8;&#x6709;&#x4E00;&#x4E2A; port-forward &#x6A21;&#x5F0F;&#xFF0C;&#x8FD9;&#x91CC;&#x5C31;&#x4E0D;&#x591A;&#x4ECB;&#x7ECD;&#x4E86;&#x3002;</li>
</ul>
<p>&#x7531;&#x4E8E; kubectl-debug &#x53EF;&#x80FD;&#x8FD8;&#x4E0D;&#x592A;&#x5B8C;&#x5584;&#xFF0C;agentless &#x6A21;&#x5F0F;&#x6211;&#x8FD9;&#x91CC;&#x7528;&#x4E0D;&#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x7528;&#x7684;&#x662F; DaemonSet &#x6A21;&#x5F0F;&#xFF0C;&#x4E0B;&#x9762;&#x5F00;&#x59CB;&#x6F14;&#x793A;&#x3002;</p>
<h2 id="0x41">0x41 &#x5B89;&#x88C5;&#x5BA2;&#x6237;&#x7AEF;</h2>
<p>&#x5B89;&#x88C5;&#x8FC7;&#x7A0B;&#x548C; docker-debug &#x5DEE;&#x4E0D;&#x591A;</p>
<ol>
<li>&#x4E0B;&#x8F7D;&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;: <code>wget https://github.com/aylei/kubectl-debug/releases/download/v0.1.0/kubectl-debug_0.1.0_linux_amd64.tar.gz -O kubectl-debug.tar.gz</code></li>
<li>&#x89E3;&#x538B;&#x6587;&#x4EF6;: <code>tar -zxvf kubectl-debug.tar.gz kubectl-debug</code></li>
</ol>
<h2 id="0x42agent">0x42 &#x5B89;&#x88C5; agent &#x670D;&#x52A1;&#x7AEF;</h2>
<ol>
<li>&#x4E0B;&#x8F7D; DaemonSet &#x7684; yaml &#x6587;&#x4EF6;&#xFF1A;<code>wget -f https://raw.githubusercontent.com/aylei/kubectl-debug/master/scripts/agent_daemonset.yml</code></li>
<li>&#x4FEE;&#x6539;<code>agent_daemonset.yml</code> &#x6587;&#x4EF6;<pre><code>  ...
  18       hostNetwork: true  # &#x9700;&#x8981;&#x52A0;&#x4E0A; hostNetwork: true&#xFF0C;hostPort&#xFF1A;10027 &#x624D;&#x4F1A;&#x751F;&#x6548;
  19       hostPID: true
  20       tolerations:
  21         - key: node-role.kubernetes.io/master
  22           effect: NoSchedule
  23       containers:
  24         - name: debug-agent
  25           image: aylei/debug-agent:v0.1.1 # &#x8001;&#x7248;&#x672C;&#x955C;&#x50CF;&#x6709;&#x95EE;&#x9898;&#xFF0C;&#x4F7F;&#x7528; v0.1.1&#x65B0;&#x7248;&#x672C;
  ...
  39           ports:
  40             - containerPort: 10027
  41               hostPort: 10027
  ...
</code></pre>
</li>
<li>&#x521B;&#x5EFA; DaemonSet&#xFF1A;<code>kubectl apply -f agent_daemonset.yaml</code>, &#x63A5;&#x4E0B;&#x6765;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x4E0A;&#x90FD;&#x521B;&#x5EFA;&#x4E86; debug-agent &#x7684; DaemonSet&#xFF0C;&#x5E76;&#x4E14;&#x5BBF;&#x4E3B;&#x673A;&#x4E0A;&#x90FD;&#x76D1;&#x542C;&#x4E86;10027&#x7AEF;&#x53E3;&#x3002;<pre><code> root @ master &#x279C;  k8s-debug   kubectl get pods
 NAME                                   READY     STATUS    RESTARTS   AGE
 debug-agent-5gfk6                      1/1       Running   0          22h
 ...
 root @ master &#x279C;  k8s-debug  netstat -lntp | grep 10027
 tcp6       0      0 :::10027                :::*                LISTEN      15510/debug-agent
</code></pre>
</li>
<li>&#x6267;&#x884C;&#x547D;&#x4EE4;<code>kubectl-debug &lt;POD_NAME&gt;</code>&#x5C31;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;&#x8C03;&#x8BD5;&#x4E86;</li>
</ol>
<pre><code>root @ master &#x279C;  k8s-debug  kubectl get pods
NAME                             READY     STATUS             RESTARTS   AGE
licai-gwapi-77465b4c66-hdjlb     1/1       Running            0          3d
...
root @ master &#x279C;  k8s-debug  kubectl-debug licai-gwapi-77465b4c66-hdjlb --agentless=false --port-forward=false
pulling image nicolaka/netshoot:latest...
...
bash-5.0# ps -ef | grep java
1 root     23:24 /usr/local/openjdk-8/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties...
192 root      0:00 grep java
bash-5.0# exit
exit
root @ master &#x279C;  k8s-debug
</code></pre>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5DF2;&#x7ECF;&#x8FDB;&#x5165;&#x4E86;&#x76EE;&#x6807;&#x5BB9;&#x5668;&#x7684;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x4E86;&#xFF0C;&#x800C;kubectl-debug &#x5BA2;&#x6237;&#x7AEF;&#x6B63;&#x662F;&#x4E0E;&#x6BCF;&#x4E2A; node &#x4E0A;&#x7684; 10027 &#x7AEF;&#x53E3;&#x901A;&#x4FE1;&#x6765;&#x63A7;&#x5236; agent &#x5BF9; Pod &#x7684;&#x8C03;&#x8BD5;&#x3002;<br>
&#x9664;&#x4E86;&#x8FD9;&#x4E9B;&#x4E4B;&#x5916;&#xFF0C;kubectl-debug &#x8FD8;&#x6709;&#x5F88;&#x591A;&#x914D;&#x7F6E;&#x53EF;&#x4EE5;&#x81EA;&#x5B9A;&#x4E49;&#xFF0C;<a href="https://github.com/aylei/kubectl-debug?ref=nomansky.top">kubectl-debug</a>&#x9875;&#x9762;&#x4E5F;&#x6709;&#x8BE6;&#x7EC6;&#x7684;&#x4ECB;&#x7ECD;&#xFF0C;&#x81F3;&#x6B64;&#x4ECE; docker &#x5230; kubernetes &#x7684;&#x8C03;&#x8BD5;&#x5DE5;&#x5177;&#x4ECB;&#x7ECD;&#x5B8C;&#x6210;&#x4E86;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>