<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>HAOTU-LAINUC</title>
	<atom:link href="http://haotu.macatung.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://haotu.macatung.com</link>
	<description>Wondering if it's the right direction...</description>
	<pubDate>Sat, 14 Feb 2026 06:42:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>restore kubernetes cluster</title>
		<link>https://haotu.macatung.com/?p=1035</link>
		<comments>https://haotu.macatung.com/?p=1035#comments</comments>
		<pubDate>Sat, 14 Feb 2026 06:39:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mẹo vặt của hiếu râu]]></category>

		<guid isPermaLink="false">https://haotu.macatung.com/?p=1035</guid>
		<description><![CDATA[kubeadm reset
kubeadm init  --config=kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: stable
apiServer:
certSANs:
- "k8s-ca"
- "k8s-ca-master3.macatung.com"
- "k8s-ca-master1.macatung.com"
- "k8s-ca-master2.macatung.com"
- "1.2.3.4"
etcd:
local:
serverCertSANs:
- "k8s-ca"
- "k8s-ca-master3.macatung.com"
- "k8s-ca-master1.macatung.com"
- "k8s-ca-master2.macatung.com"
- "1.2.3.4"
peerCertSANs:
- "k8s-ca"
- "k8s-ca-master3.macatung.com"
- "k8s-ca-master1.macatung.com"
- "k8s-ca-master2.macatung.com"
- "1.2.3.4"
controlPlaneEndpoint: "k8s-ca:6443"

scp -r /etc/kubernetes/pki secondary:/etc/kubernetes
kubeadm reset
kubeadm join
kubectl apply -f all.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
kubectl get deployments,statefulset,svc,configmaps,cronjob,secret,ingress,pvc,pv,clusterrole,clusterrolebinding -o yaml > /etc/kubernetes/all.yaml
]]></description>
			<content:encoded><![CDATA[<p>kubeadm reset</p>
<p><code>kubeadm init  --config=kubeadm-config.yaml</code></p>
<p><code>apiVersion: kubeadm.k8s.io/v1beta3<br />
kind: ClusterConfiguration<br />
kubernetesVersion: stable<br />
apiServer:<br />
certSANs:<br />
- "k8s-ca"<br />
- "k8s-ca-master3.macatung.com"<br />
- "k8s-ca-master1.macatung.com"<br />
- "k8s-ca-master2.macatung.com"<br />
- "1.2.3.4"<br />
etcd:<br />
local:<br />
serverCertSANs:<br />
- "k8s-ca"<br />
- "k8s-ca-master3.macatung.com"<br />
- "k8s-ca-master1.macatung.com"<br />
- "k8s-ca-master2.macatung.com"<br />
- "1.2.3.4"<br />
peerCertSANs:<br />
- "k8s-ca"<br />
- "k8s-ca-master3.macatung.com"<br />
- "k8s-ca-master1.macatung.com"<br />
- "k8s-ca-master2.macatung.com"<br />
- "1.2.3.4"<br />
controlPlaneEndpoint: "k8s-ca:6443"<br />
</code></p>
<p>scp -r /etc/kubernetes/pki secondary:/etc/kubernetes<br />
kubeadm reset<br />
kubeadm join</p>
<p>kubectl apply -f all.yaml</p>
<p>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml</p>
<p>kubectl get deployments,statefulset,svc,configmaps,cronjob,secret,ingress,pvc,pv,clusterrole,clusterrolebinding -o yaml > /etc/kubernetes/all.yaml</p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=1035</wfw:commentRss>
		</item>
		<item>
		<title>kubectl 3</title>
		<link>https://haotu.macatung.com/?p=1017</link>
		<comments>https://haotu.macatung.com/?p=1017#comments</comments>
		<pubDate>Sun, 09 Feb 2025 18:53:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mẹo vặt của hiếu râu]]></category>

		<guid isPermaLink="false">http://haotu.macatung.com/?p=1017</guid>
		<description><![CDATA[



kubectl get nodes --show-labels
kubectl label nodes &#60;your-node-name&#62; nodegroup=w45
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    nodegroup: w45



 



apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: [...]]]></description>
			<content:encoded><![CDATA[<div class="highlight" style="box-sizing: border-box; position: relative; display: flex; flex-direction: column; min-width: 0px; overflow-wrap: break-word; background-clip: border-box; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0.25rem; margin: 2rem 0px; padding: 0px; color: #222222; font-family: &quot;open sans&quot;, -apple-system, BlinkMacSystemFont, &quot;segoe ui&quot;, Roboto, &quot;helvetica neue&quot;, Arial, sans-serif, &quot;apple color emoji&quot;, &quot;segoe ui emoji&quot;, &quot;segoe ui symbol&quot;; font-size: 16px;">
<pre style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &quot;liberation mono&quot;, &quot;courier new&quot;, monospace; font-size: 14px; margin-top: 0px; margin-bottom: 0px; overflow: auto; overflow-wrap: normal; background-color: #eeeeee; padding: 1rem; tab-size: 4;"><code class="language-shell" style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &quot;liberation mono&quot;, &quot;courier new&quot;, monospace; color: inherit; overflow-wrap: break-word; word-break: normal; padding: 0px; margin: 0px; border: 0px; background-color: inherit !important;"><span style="box-sizing: border-box; display: flex;"><span style="box-sizing: border-box;">
</span><span style="box-sizing: border-box;">
</span><span style="box-sizing: border-box;">
<span style="box-sizing: border-box;">kubectl get nodes --show-labels
</span>kubectl label nodes &lt;your-node-name&gt; <span style="box-sizing: border-box; color: #b8860b;">nodegroup</span><span style="box-sizing: border-box; color: #666666;">=</span>w45
<pre style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &quot;liberation mono&quot;, &quot;courier new&quot;, monospace; font-size: 14px; margin-top: 0px; margin-bottom: 0px; overflow: auto; overflow-wrap: normal; padding: 1rem; tab-size: 4;"><code class="language-yaml" style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &quot;liberation mono&quot;, &quot;courier new&quot;, monospace; color: inherit; overflow-wrap: break-word; word-break: normal; padding: 0px; margin: 0px; border: 0px; background-color: inherit !important;"><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: green; font-weight: 700;">apiVersion</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>v1<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: green; font-weight: 700;">kind</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>Pod<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: green; font-weight: 700;">metadata</span>:<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span><span style="box-sizing: border-box; color: green; font-weight: 700;">name</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>nginx<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span><span style="box-sizing: border-box; color: green; font-weight: 700;">labels</span>:<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">    </span><span style="box-sizing: border-box; color: green; font-weight: 700;">env</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>test<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: green; font-weight: 700;">spec</span>:<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span><span style="box-sizing: border-box; color: green; font-weight: 700;">containers</span>:<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span>- <span style="box-sizing: border-box; color: green; font-weight: 700;">name</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>nginx<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">    </span><span style="box-sizing: border-box; color: green; font-weight: 700;">image</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>nginx<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">    </span><span style="box-sizing: border-box; color: green; font-weight: 700;">imagePullPolicy</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>IfNotPresent<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span><span style="box-sizing: border-box; color: green; font-weight: 700;">nodeSelector</span>:<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">    </span><span style="color: #b8860b; background-color: inherit;">nodegroup</span><span style="background-color: inherit; color: inherit;">:</span><span style="box-sizing: border-box; color: #bbbbbb;"> w45

</span></span></span></code></pre>
<p></span></span></code><code class="language-shell" style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &quot;liberation mono&quot;, &quot;courier new&quot;, monospace; color: inherit; overflow-wrap: break-word; word-break: normal; padding: 0px; margin: 0px; border: 0px; background-color: inherit !important;"><span style="box-sizing: border-box;"><br />
</span> </code></pre>
</div>
<div class="highlight" style="box-sizing: border-box; position: relative; display: flex; flex-direction: column; min-width: 0px; overflow-wrap: break-word; background-clip: border-box; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0.25rem; margin: 2rem 0px; padding: 0px; color: #222222; font-family: &quot;open sans&quot;, -apple-system, BlinkMacSystemFont, &quot;segoe ui&quot;, Roboto, &quot;helvetica neue&quot;, Arial, sans-serif, &quot;apple color emoji&quot;, &quot;segoe ui emoji&quot;, &quot;segoe ui symbol&quot;; font-size: 16px;">
<pre style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &quot;liberation mono&quot;, &quot;courier new&quot;, monospace; font-size: 14px; margin-top: 0px; margin-bottom: 0px; overflow: auto; overflow-wrap: normal; background-color: #eeeeee; padding: 1rem; tab-size: 4;"><code class="language-shell" style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &quot;liberation mono&quot;, &quot;courier new&quot;, monospace; color: inherit; overflow-wrap: break-word; word-break: normal; padding: 0px; margin: 0px; border: 0px; background-color: inherit !important;"><span style="box-sizing: border-box; display: flex;"><span style="box-sizing: border-box;">
<pre style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &quot;liberation mono&quot;, &quot;courier new&quot;, monospace; font-size: 14px; margin-top: 0px; margin-bottom: 0px; overflow: auto; overflow-wrap: normal; padding: 1rem; tab-size: 4;"><code class="language-yaml" style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, &quot;liberation mono&quot;, &quot;courier new&quot;, monospace; color: inherit; overflow-wrap: break-word; word-break: normal; padding: 0px; margin: 0px; border: 0px; background-color: inherit !important;"><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: green; font-weight: 700;">apiVersion</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>v1<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: green; font-weight: 700;">kind</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>Pod<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: green; font-weight: 700;">metadata</span>:<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span><span style="box-sizing: border-box; color: green; font-weight: 700;">name</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>nginx<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span><span style="box-sizing: border-box; color: green; font-weight: 700;">labels</span>:<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">    </span><span style="box-sizing: border-box; color: green; font-weight: 700;">env</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>test<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: green; font-weight: 700;">spec</span>:<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span><span style="box-sizing: border-box; color: green; font-weight: 700;">containers</span>:<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span>- <span style="box-sizing: border-box; color: green; font-weight: 700;">name</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>nginx<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">    </span><span style="box-sizing: border-box; color: green; font-weight: 700;">image</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>nginx<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="color: inherit; box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">    </span><span style="box-sizing: border-box; color: green; font-weight: 700;">imagePullPolicy</span>:<span style="box-sizing: border-box; color: #bbbbbb;"> </span>IfNotPresent<span style="box-sizing: border-box; color: #bbbbbb;">
</span></span></span><span style="box-sizing: border-box; height: 1.6em; display: flex;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; color: #bbbbbb;">  </span><span style="box-sizing: border-box; color: green; font-weight: 700;">nodeName</span><span style="color: rgba(0, 0, 0, 0);">:</span><span style="color: #bbbbbb;"> </span><span style="color: #b8860b;">worker3.domain.com</span></span></span></code></pre>
<p></span></span></code></pre>
</div>
<p><code><br />
spec:<br />
containers:<br />
- image: hieuvpn/lap:10<br />
imagePullPolicy: IfNotPresent<br />
name: lap<br />
ports:<br />
- containerPort: 80<br />
protocol: TCP<br />
resources: {}<br />
terminationMessagePath: /dev/termination-log<br />
terminationMessagePolicy: File<br />
volumeMounts:<br />
- mountPath: /var/www/html<br />
name: 100mb<br />
dnsPolicy: ClusterFirst<br />
nodeSelector:<br />
supportnodes: w45<br />
restartPolicy: Always<br />
schedulerName: default-scheduler<br />
securityContext: {}<br />
terminationGracePeriodSeconds: 30<br />
volumes:<br />
- hostPath:<br />
path: /_STORAGE/support-desk<br />
type: ""<br />
name: 100mb</code></p>
<p><code> </code></p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=1017</wfw:commentRss>
		</item>
		<item>
		<title>free ssl let&#8217;s encrypt</title>
		<link>https://haotu.macatung.com/?p=1011</link>
		<comments>https://haotu.macatung.com/?p=1011#comments</comments>
		<pubDate>Mon, 04 Mar 2024 19:28:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mẹo vặt của hiếu râu]]></category>

		<guid isPermaLink="false">http://haotu.macatung.com/?p=1011</guid>
		<description><![CDATA[
wget -O -  https://get.acme.sh &#124; sh -s email=my@example.com
./acme.sh
./acme.sh --issue -d ar.d.ca -w /home/www/d/d
cd /root/.acme.sh/
./acme.sh --issue --dns -d admin.d.ca --yes-I-know-dns-manual-mode-enough-go-ahead-please
dig TXT _acme-challenge.admin.d.ca
./acme.sh --renew -d admin.d.ca --yes-I-know-dns-manual-mode-enough-go-ahead-please

]]></description>
			<content:encoded><![CDATA[<p><code></p>
<p>wget -O -  https://get.acme.sh | sh -s email=my@example.com<br />
./acme.sh<br />
./acme.sh --issue -d ar.d.ca -w /home/www/d/d<br />
cd /root/.acme.sh/<br />
./acme.sh --issue --dns -d admin.d.ca --yes-I-know-dns-manual-mode-enough-go-ahead-please<br />
dig TXT _acme-challenge.admin.d.ca<br />
./acme.sh --renew -d admin.d.ca --yes-I-know-dns-manual-mode-enough-go-ahead-please</p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=1011</wfw:commentRss>
		</item>
		<item>
		<title>nodejs server</title>
		<link>https://haotu.macatung.com/?p=1005</link>
		<comments>https://haotu.macatung.com/?p=1005#comments</comments>
		<pubDate>Mon, 04 Mar 2024 19:01:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mẹo vặt của hiếu râu]]></category>

		<guid isPermaLink="false">http://haotu.macatung.com/?p=1005</guid>
		<description><![CDATA[
mkdir mailform
mv mailform.js mailform
cd mailform/
yum install npm
npm init -y
npm install express express-rate-limit
node mailform.js
while true; do date; node mailform.js ; sleep 1; done
const express = require('express');
const rateLimit = require('express-rate-limit');
const bodyParser = require('body-parser');
const https = require('https');
const fs = require('fs');
const app = express();
const options = {
  key: fs.readFileSync('private.key'),
  cert: fs.readFileSync('public.crt')
}
// Apply rate limiting middleware
const limiter = [...]]]></description>
			<content:encoded><![CDATA[<p><code></p>
<p>mkdir mailform<br />
mv mailform.js mailform<br />
cd mailform/<br />
yum install npm<br />
npm init -y<br />
npm install express express-rate-limit<br />
node mailform.js<br />
while true; do date; node mailform.js ; sleep 1; done</p>
<p>const express = require('express');<br />
const rateLimit = require('express-rate-limit');<br />
const bodyParser = require('body-parser');<br />
const https = require('https');<br />
const fs = require('fs');</p>
<p>const app = express();<br />
const options = {<br />
  key: fs.readFileSync('private.key'),<br />
  cert: fs.readFileSync('public.crt')<br />
}</p>
<p>// Apply rate limiting middleware<br />
const limiter = rateLimit({<br />
  windowMs: 5 * 60 * 1000, // 5 minutes<br />
  max: 2, // limit each IP to 2 requests per windowMs<br />
  message: 'Too many requests from this IP, please try again later.'<br />
});<br />
app.use(limiter);<br />
app.use(bodyParser.json());</p>
<p>app.options('*',(req,res) => {<br />
  res.status(200).end();<br />
} );</p>
<p>// Your webhook endpoint<br />
app.get('/bm/:email', (req, res) => {<br />
  // Handle webhook logic here<br />
  const requestBody = req.params.email;<br />
  console.log('Received webhook request:', requestBody);</p>
<p>// Options for the POST request<br />
const options = {<br />
  hostname: 'hostname.com', // Replace with your hostname<br />
  port: 443, // Replace with your port number</p>
<p>  path: '/hooks/catch/y/x/' , // '/your/post/endpoint', // Replace with your endpoint path<br />
  method: 'POST',<br />
  headers: {<br />
    'Content-Type': 'application/json',<br />
    'Content-Length': JSON.stringify({'email':requestBody}).length<br />
  }<br />
};</p>
<p>const zap = https.request(options, (zres) => {<br />
  console.log(`statusCode: ${zres.statusCode}`);</p>
<p>  zap.on('data', (chunk) => {<br />
    console.log('Zapier Response body:', chunk.toString());<br />
  });<br />
});</p>
<p>  // Send a custom response<br />
  res.status(200).json({ message: 'in : '+requestBody  });</p>
<p>// Handle request errors<br />
zap.on('error', (error) => {<br />
  console.error('Error sending zapier request:', error);<br />
});</p>
<p>// Write data to request body<br />
zap.write(JSON.stringify({'email':requestBody}));</p>
<p>// End the request<br />
zap.end();</p>
<p>});<br />
//--------END GET--------------</p>
<p>app.post('/contact', (req, res) => {<br />
  // Handle webhook logic here<br />
  let requestBody = ''; // Assuming JSON request body</p>
<p>  req.on('data', chunk => {<br />
                requestBody += chunk;<br />
                    });<br />
  req.on('end',() => {<br />
    console.log('Received contact request:', requestBody);</p>
<p>// Options for the POST request<br />
const options = {<br />
  hostname: 'hostname.com', // Replace with your hostname<br />
  port: 443, // Replace with your port number</p>
<p>  path: '/hooks/catch/a/b/' ,  // Replace with your endpoint path<br />
  method: 'POST',<br />
  headers: {<br />
    'Content-Type': 'application/json',<br />
    'Content-Length': requestBody.length<br />
  }<br />
};</p>
<p>const zap = https.request(options, (zres) => {<br />
  console.log(`statusCode: ${zres.statusCode}`);</p>
<p>  zap.on('data', (chunk) => {<br />
    console.log('Zapier Response body:', chunk.toString());<br />
  });<br />
});</p>
<p>  // Send a custom response<br />
  res.status(200).json({ message: 'zap contact : '+requestBody  });</p>
<p>// Handle request errors<br />
zap.on('error', (error) => {<br />
  console.error('Error sending zapier request:', error);<br />
});</p>
<p>// Write data to request body<br />
zap.write(requestBody);</p>
<p>// End the request<br />
zap.end();</p>
<p>  } );</p>
<p>});<br />
//=======END POST=========</p>
<p>const server = https.createServer(options,app);</p>
<p>// Start the server<br />
const port = process.env.PORT || 3000;<br />
server.listen(port, () => {<br />
  console.log(`Server is running on port ${port}`);<br />
});</p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=1005</wfw:commentRss>
		</item>
		<item>
		<title>kubectl #2</title>
		<link>https://haotu.macatung.com/?p=997</link>
		<comments>https://haotu.macatung.com/?p=997#comments</comments>
		<pubDate>Tue, 20 Feb 2024 22:30:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mẹo vặt của hiếu râu]]></category>

		<guid isPermaLink="false">http://haotu.macatung.com/?p=997</guid>
		<description><![CDATA[
    spec:
      containers:
      - args:
        - -c
        - rm -rf /var/www/html/* ; cp -r /_100MB/www/* /var/www/html ; echo "ErrorDocument
          [...]]]></description>
			<content:encoded><![CDATA[<p><code><br />
    spec:</p>
<p>      containers:<br />
      - args:<br />
        - -c<br />
        - rm -rf /var/www/html/* ; cp -r /_100MB/www/* /var/www/html ; echo "ErrorDocument<br />
          404 /index.html" >> /etc/httpd/conf/httpd.conf; /usr/sbin/httpd ; sleep<br />
          5; tail -f /var/log/httpd/access_log<br />
        command:<br />
        - /bin/bash<br />
        image: hieuvpn/lap:10<br />
        imagePullPolicy: IfNotPresent<br />
        name: lap<br />
        env:<br />
        - name: RITRUSTEDORIGINS<br />
          value: https://redis-prod.example.org<br />
        envFrom:<br />
        - configMapRef:<br />
          name: myconfigmap<br />
        ports:<br />
        - containerPort: 80<br />
          protocol: TCP<br />
        resources: {}<br />
        terminationMessagePath: /dev/termination-log<br />
        terminationMessagePolicy: File<br />
        volumeMounts:<br />
        - mountPath: /_100MB<br />
          name: 100mb<br />
          subPath: support-desk<br />
------------<br />
      terminationGracePeriodSeconds: 30<br />
      volumes:<br />
      - name: 100mb<br />
        persistentVolumeClaim:<br />
          claimName: v100</p>
<p>------------------<br />
apiVersion: v1<br />
kind: ConfigMap<br />
metadata:<br />
  name: myconfigmap<br />
data:<br />
  VARIABLE1: value1<br />
  VARIABLE2: value2<br />
  VARIABLE3: value3<br />
-------------------</p>
<p>sudo /bin/kubectl exec `sudo /bin/kubectl get pods | grep test-app | head -n 1 | cut -d' ' -f1` -- sh -c "rm -rf /_100MB/support-desk/www/*"<br />
        sudo /bin/kubectl cp /tmp/www `sudo /bin/kubectl get pods | grep test-app | head -n 1 | cut -d' ' -f1`:/_100MB/support-desk/<br />
        sudo /bin/kubectl rollout restart deployment support-desk<br />
</code><br />
<strong>Ingress-Nginx Controller</strong><br />
<code><br />
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml</p>
<p>kubectl create ingress support-desk --class=nginx   --rule="support.helpusdefend.org/*=support-desk:8090"</p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=997</wfw:commentRss>
		</item>
		<item>
		<title>Redis Cluster</title>
		<link>https://haotu.macatung.com/?p=990</link>
		<comments>https://haotu.macatung.com/?p=990#comments</comments>
		<pubDate>Sat, 10 Feb 2024 00:19:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mẹo vặt của hiếu râu]]></category>

		<guid isPermaLink="false">http://haotu.macatung.com/?p=990</guid>
		<description><![CDATA[
#
# Redis Cluster service
#
apiVersion: v1
kind: Service
metadata:
  name: redis-cluster
  labels:
    app: redis-cluster
    environment: dev
spec:
  publishNotReadyAddresses: true
  ports:
  - port: 6379
    targetPort: 6379
    name: client
  - port: 16379
    targetPort: 16379
    name: gossip
  [...]]]></description>
			<content:encoded><![CDATA[<p><code><br />
#<br />
# Redis Cluster service<br />
#<br />
apiVersion: v1<br />
kind: Service<br />
metadata:<br />
  name: redis-cluster<br />
  labels:<br />
    app: redis-cluster<br />
    environment: dev<br />
spec:<br />
  publishNotReadyAddresses: true<br />
  ports:<br />
  - port: 6379<br />
    targetPort: 6379<br />
    name: client<br />
  - port: 16379<br />
    targetPort: 16379<br />
    name: gossip<br />
  clusterIP: None<br />
  #type: ClusterIP<br />
  selector:<br />
    app: redis-cluster<br />
---<br />
apiVersion: policy/v1<br />
kind: PodDisruptionBudget<br />
metadata:<br />
  name: redis-cluster-pdb<br />
spec:<br />
  selector:<br />
    matchLabels:<br />
      app: redis-cluster<br />
  maxUnavailable: 0<br />
---<br />
#<br />
# Redis configuration file for clustered mode<br />
#<br />
apiVersion: v1<br />
kind: ConfigMap<br />
metadata:<br />
  name: redis-cluster-config<br />
  labels:<br />
    app: redis-cluster<br />
data:<br />
  redis.conf: |+<br />
    cluster-enabled yes<br />
    cluster-require-full-coverage no<br />
    cluster-node-timeout 15000<br />
    cluster-config-file nodes.conf<br />
    cluster-migration-barrier 1<br />
    appendonly yes<br />
    # Other cluster members need to be able to connect<br />
    protected-mode no<br />
    requirepass "xxxxxx"<br />
    masterauth "xxxxxx"<br />
#<br />
# A script to bootstrap Stateful Set members as they initialize<br />
#<br />
  bootstrap-pod.sh: |+<br />
    #!/bin/sh<br />
    set -ex</p>
<p>    # Find which member of the Stateful Set this pod is running<br />
    # e.g. "redis-cluster-0" -> "0"<br />
    PET_ORDINAL=$(cat /etc/podinfo/pod_name | rev | cut -d- -f1)<br />
    MY_SHARD=$(($PET_ORDINAL % $NUM_SHARDS))</p>
<p>    redis-server /conf/redis.conf &#038;</p>
<p>    # TODO: Wait until redis-server process is ready<br />
    sleep 1</p>
<p>    if [ $PET_ORDINAL -lt $NUM_SHARDS ]; then<br />
      # Set up primary nodes. Divide slots into equal(ish) contiguous blocks<br />
      NUM_SLOTS=$(( 16384 / $NUM_SHARDS ))<br />
      REMAINDER=$(( 16384 % $NUM_SHARDS ))<br />
      START_SLOT=$(( $NUM_SLOTS * $MY_SHARD + ($MY_SHARD < $REMAINDER ? $MY_SHARD : $REMAINDER) ))<br />
      END_SLOT=$(( $NUM_SLOTS * ($MY_SHARD+1) + ($MY_SHARD+1 < $REMAINDER ? $MY_SHARD+1 : $REMAINDER) - 1 ))</p>
<p>      PEER_IP=$(perl -MSocket -e "print inet_ntoa(scalar(gethostbyname(\"redis-cluster-0.redis-cluster.$POD_NAMESPACE.svc.cluster.local\")))")<br />
      redis-cli  --pass "xxxxxx" cluster meet $PEER_IP 6379<br />
      redis-cli  --pass "xxxxxx"cluster addslots $(seq $START_SLOT $END_SLOT)<br />
    else<br />
      # Set up a replica<br />
      PEER_IP=$(perl -MSocket -e "print inet_ntoa(scalar(gethostbyname(\"redis-cluster-$MY_SHARD.redis-cluster.$POD_NAMESPACE.svc.cluster.local\")))")<br />
      redis-cli --pass "xxxxxx" --cluster add-node localhost:6379 $PEER_IP:6379 --cluster-slave<br />
    fi</p>
<p>    wait<br />
---<br />
apiVersion: apps/v1<br />
kind: StatefulSet<br />
metadata:<br />
  name: redis-cluster<br />
spec:<br />
  podManagementPolicy: OrderedReady # default<br />
  serviceName: redis-cluster<br />
  replicas: 6<br />
  selector:<br />
    matchLabels:<br />
      app: redis-cluster # has to match .spec.template.metadata.labels<br />
  template:<br />
    metadata:<br />
      labels:<br />
        app: redis-cluster<br />
        name: redis-cluster<br />
    spec:<br />
#      affinity:  # Ensure that each Redis instance is provisioned on a different k8s node<br />
#        podAntiAffinity:<br />
#          requiredDuringSchedulingIgnoredDuringExecution:<br />
#            - labelSelector:<br />
#                matchExpressions:<br />
#                  - key: "app"<br />
#                    operator: In<br />
#                    values:<br />
#                      - redis-cluster<br />
#              topologyKey: "kubernetes.io/hostname"<br />
      terminationGracePeriodSeconds: 10<br />
      containers:<br />
      - name: redis-cluster<br />
        image: redis:6.2.6<br />
        ports:<br />
        - containerPort: 6379<br />
          name: client<br />
        - containerPort: 16379<br />
          name: gossip<br />
        command:<br />
        - sh<br />
        args:<br />
        - /conf/bootstrap-pod.sh<br />
        # Ensure that Redis is online before initializing the next node.<br />
        # TODO: Test that the cluster node is init'd properly.<br />
        readinessProbe:<br />
          exec:<br />
            command:<br />
            - sh<br />
            - -c<br />
            - "redis-cli -h $(hostname) ping"<br />
          initialDelaySeconds: 5<br />
          timeoutSeconds: 5</p>
<p>        securityContext:<br />
            capabilities:<br />
              add:<br />
                - IPC_LOCK<br />
        # Mark a node as down if Redis server stops running<br />
        livenessProbe:<br />
          exec:<br />
            command:<br />
            - sh<br />
            - -c<br />
            - "redis-cli -h $(hostname) ping"<br />
          initialDelaySeconds: 20<br />
          periodSeconds: 3<br />
        env:<br />
        - name: POD_NAMESPACE<br />
          valueFrom:<br />
            fieldRef:<br />
              fieldPath: metadata.namespace<br />
        - name: NODE_NAME<br />
          valueFrom:<br />
            fieldRef:<br />
              fieldPath: spec.nodeName<br />
        - name: NUM_SHARDS<br />
          value: "3"  # If you modify this value, make sure there are at least 2 times the number of replicas<br />
        volumeMounts:<br />
        - name: conf<br />
          mountPath: /conf<br />
          readOnly: false<br />
        - name: podinfo<br />
          mountPath: /etc/podinfo<br />
          readOnly: false<br />
      initContainers:<br />
        # Wait for the redis-cluster service to exist. We need it to resolve the hostnames of our nodes<br />
      - name: init-redis-cluster<br />
        image: busybox:1.28<br />
        command: ['sh', '-c', "until nslookup redis-cluster.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for redis-cluster; sleep 2; done"]<br />
      volumes:<br />
      # Insert our pre-baked Redis configuration file into /conf/redis.conf<br />
      - name: conf<br />
        configMap:<br />
          name: redis-cluster-config<br />
          items:<br />
          - key: redis.conf<br />
            path: redis.conf<br />
          - key: bootstrap-pod.sh  # TODO: Move this or extract it into its own Docker image<br />
            path: bootstrap-pod.sh<br />
      # The init container will use this info to find cluster peers<br />
      - name: podinfo<br />
        downwardAPI:<br />
          items:<br />
            - path: "labels"<br />
              fieldRef:<br />
                fieldPath: metadata.labels<br />
            - path: "annotations"<br />
              fieldRef:<br />
                fieldPath: metadata.annotations<br />
            - path: "pod_name"<br />
              fieldRef:<br />
                fieldPath: metadata.name<br />
            - path: "pod_namespace"<br />
              fieldRef:<br />
                fieldPath: metadata.namespace</p>
<p>---REDISINSIGHT----</p>
<p>apiVersion: v1<br />
kind: Service<br />
metadata:<br />
  name: redisinsight-service       # name should not be 'redisinsight'<br />
                                   # since the service creates<br />
                                   # environment variables that<br />
                                   # conflicts with redisinsight<br />
                                   # application's environment<br />
                                   # variables `RI_APP_HOST` and<br />
                                   # `RI_APP_PORT`<br />
spec:<br />
  type: LoadBalancer<br />
  ports:<br />
    - port: 80<br />
      targetPort: 5540<br />
  selector:<br />
    app: redisinsight<br />
---<br />
# RedisInsight deployment with name 'redisinsight'<br />
apiVersion: apps/v1<br />
kind: Deployment<br />
metadata:<br />
  name: redisinsight #deployment name<br />
  labels:<br />
    app: redisinsight #deployment label<br />
spec:<br />
  replicas: 1 #a single replica pod<br />
  selector:<br />
    matchLabels:<br />
      app: redisinsight #which pods is the deployment managing, as defined by the pod template<br />
  template: #pod template<br />
    metadata:<br />
      labels:<br />
        app: redisinsight #label for pod/s<br />
    spec:<br />
      containers:</p>
<p>      - name:  redisinsight #Container name (DNS_LABEL, unique)<br />
        image: redis/redisinsight:latest #repo/image<br />
        imagePullPolicy: IfNotPresent #Installs the latest RedisInsight version<br />
        volumeMounts:<br />
        - name: redisinsight #Pod volumes to mount into the container's filesystem. Cannot be updated.<br />
          mountPath: /data<br />
        ports:<br />
        - containerPort: 5540 #exposed container port and protocol<br />
          protocol: TCP<br />
      volumes:<br />
      - name: redisinsight<br />
        emptyDir: {}</p>
<p>[root@k8s-ca-master2 k8s_HA_Centos7]# cat redis-fail.sh<br />
#!/bin/bash<br />
echo -n 0<br />
/usr/bin/redis-cli -h redis-cluster -a xxxxxx cluster nodes | grep -E "(disconnected|fail|noaddr)" | wc -l</p>
<p>[root@k8s-ca-master2 k8s_HA_Centos7]# cat redis-nodes.sh<br />
#!/bin/bash<br />
echo -n 0<br />
/usr/bin/redis-cli -h redis-cluster -a xxxxxx cluster nodes |  wc -l</p>
<p>exec redis-nodes /bin/bash /etc/snmp/redis-nodes.sh<br />
exec redis-fail /bin/bash /etc/snmp/redis-fail.sh</p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=990</wfw:commentRss>
		</item>
		<item>
		<title>cacti 0.8.7h timespan fix</title>
		<link>https://haotu.macatung.com/?p=987</link>
		<comments>https://haotu.macatung.com/?p=987#comments</comments>
		<pubDate>Mon, 22 Jan 2024 23:26:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Lăng nhăng lít nhít]]></category>

		<category><![CDATA[Mẹo vặt của hiếu râu]]></category>

		<guid isPermaLink="false">http://haotu.macatung.com/?p=987</guid>
		<description><![CDATA[graph_image.php , replace 1600000 with 2600000
]]></description>
			<content:encoded><![CDATA[<p>graph_image.php , replace 1600000 with 2600000</p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=987</wfw:commentRss>
		</item>
		<item>
		<title>Linux simulate network latency - tc qdisc</title>
		<link>https://haotu.macatung.com/?p=978</link>
		<comments>https://haotu.macatung.com/?p=978#comments</comments>
		<pubDate>Fri, 05 May 2023 01:18:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mẹo vặt của hiếu râu]]></category>

		<guid isPermaLink="false">http://haotu.macatung.com/?p=978</guid>
		<description><![CDATA[tc qdisc add dev ens33 root netem delay 50ms
tc qdisc del dev ens33 root

Examples
Emulating wide area network delays
This is the simplest example, it just adds a fixed amount of delay to all packets going out of the local Ethernet.
# tc qdisc add dev eth0 root netem delay 100ms

Now a simple ping test to host on [...]]]></description>
			<content:encoded><![CDATA[<p>tc qdisc add dev ens33 root netem delay 50ms</p>
<p>tc qdisc del dev ens33 root</p>
<blockquote>
<h2>Examples</h2>
<h3>Emulating wide area network delays</h3>
<p>This is the simplest example, it just adds a fixed amount of delay to all packets going out of the local Ethernet.</p>
<pre><code># tc qdisc add dev eth0 root netem delay 100ms
</code></pre>
<p>Now a simple ping test to host on the local network should show an increase of 100 milliseconds. The delay is limited by the clock resolution of the kernel (Hz). On most 2.4 systems, the system clock runs at 100 Hz which allows delays in increments of 10 ms. On 2.6, the value is a configuration parameter from 1000 to 100 Hz.</p>
<p>Later examples just change parameters without reloading the qdisc</p>
<p>Real wide area networks show variability so it is possible to add random variation.</p>
<pre><code># tc qdisc change dev eth0 root netem delay 100ms 10ms
</code></pre>
<p>This causes the added delay to be 100 ± 10 ms. Network delay variation isn&#8217;t purely random, so to emulate that there is a correlation value as well.</p>
<pre><code># tc qdisc change dev eth0 root netem delay 100ms 10ms 25%
</code></pre>
<p>This causes the added delay to be 100 ± 10 ms with the next random element depending 25% on the last one. This isn&#8217;t true statistical correlation, but an approximation.</p>
<h3>Delay distribution</h3>
<p>Typically, the delay in a network is not uniform. It is more common to use a something like a normal distribution to describe the variation in delay. The netem discipline can take a table to specify a non-uniform distribution.</p>
<pre><code># tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal
</code></pre>
<p>The actual tables (normal, pareto, paretonormal) are generated as part of the iproute2 compilation and placed in /usr/lib/tc; so it is possible with some effort to make your own distribution based on experimental data.</p>
<h3>Packet loss</h3>
<p>Random packet loss is specified in the &#8216;tc&#8217; command in percent. The smallest possible non-zero value is:</p>
<p>2<sup>−32</sup> = 0.0000000232%</p>
<pre><code># tc qdisc change dev eth0 root netem loss 0.1%
</code></pre>
<p>This causes 1/10th of a percent (i.e. 1 out of 1000) packets to be randomly dropped.</p>
<p>An optional correlation may also be added. This causes the random number generator to be less random and can be used to emulate packet burst losses.</p>
<pre><code># tc qdisc change dev eth0 root netem loss 0.3% 25%
</code></pre>
<p>This will cause 0.3% of packets to be lost, and each successive probability depends by a quarter on the last one.</p>
<p>Prob<sub>n</sub> = 0.25 × Prob<sub>n-1</sub> + 0.75 × Random</p></blockquote>
<p><strong>Note</strong> that you should use <code>tc qdisc add</code> if you have no rules for that interface or <code>tc qdisc change</code> if you already have rules for that interface. Attempting to use <code>tc qdisc change</code> on an interface with no rules will give the error <strong><code>RTNETLINK answers: No such file or directory</code>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=978</wfw:commentRss>
		</item>
		<item>
		<title>softEther</title>
		<link>https://haotu.macatung.com/?p=974</link>
		<comments>https://haotu.macatung.com/?p=974#comments</comments>
		<pubDate>Wed, 19 Apr 2023 04:00:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Lăng nhăng lít nhít]]></category>

		<category><![CDATA[Mẹo vặt của hiếu râu]]></category>

		<guid isPermaLink="false">http://haotu.macatung.com/?p=974</guid>
		<description><![CDATA[
==============vpnserver1=============
======= secureNAT 172.16.101.254, static route table 172.16.99.0/255.255.255.0/172.16.101.1,...
======= bridge VPN hub to tap device 'vpn'
ifconfig eth0 100.100.100.101/24 up
/root/vpnserver/vpnserver start
sleep 10
ifconfig tap_vpn 172.16.101.1/24 up
ip tunnel add tun1 mode ipip remote 100.100.100.201 local 100.100.100.101
ip tunnel add tun2 mode ipip remote 100.100.100.216 local 100.100.100.101
ifconfig tun1 172.16.201.3/31 up
ifconfig tun2 172.16.201.5/31 up
ip route add 172.16.99.1 via 172.16.201.2 dev tun1
ip route add [...]]]></description>
			<content:encoded><![CDATA[<p><code><br />
==============vpnserver1=============<br />
======= secureNAT 172.16.101.254, static route table 172.16.99.0/255.255.255.0/172.16.101.1,...<br />
======= bridge VPN hub to tap device 'vpn'<br />
ifconfig eth0 100.100.100.101/24 up<br />
/root/vpnserver/vpnserver start<br />
sleep 10</code></p>
<p><code>ifconfig tap_vpn 172.16.101.1/24 up</code></p>
<p><code>ip tunnel add tun1 mode ipip remote 100.100.100.201 local 100.100.100.101<br />
ip tunnel add tun2 mode ipip remote 100.100.100.216 local 100.100.100.101</code></p>
<p><code>ifconfig tun1 172.16.201.3/31 up<br />
ifconfig tun2 172.16.201.5/31 up</p>
<p>ip route add 172.16.99.1 via 172.16.201.2 dev tun1<br />
ip route add 172.16.99.101 via 172.16.201.4 dev tun2</p>
<p>============vpnserver2=================<br />
=========== secureNAT 172.16.102.254, static route table 172.16.99.0/255.255.255.0/172.16.102.1,...<br />
======= bridge VPN hub to tap device 'vpn'<br />
ifconfig eth0 100.100.100.102/24 up<br />
/root/vpnserver/vpnserver start<br />
sleep 10</p>
<p>ifconfig tap_vpn 172.16.102.1/24 up</p>
<p>ip tunnel add tun1 mode ipip remote 100.100.100.201 local 100.100.100.102<br />
ip tunnel add tun2 mode ipip remote 100.100.100.216 local 100.100.100.102</p>
<p>ifconfig tun1 172.16.202.3/31 up<br />
ifconfig tun2 172.16.202.5/31 up</p>
<p>ip route add 172.16.99.1 via 172.16.202.2 dev tun1<br />
ip route add 172.16.99.101 via 172.16.202.4 dev tun2</p>
<p>echo 1 &gt; /proc/sys/net/ipv4/ip_forward</p>
<p>================ worker6 =========</p>
<p>ifconfig eth0 100.100.100.216/24 up</p>
<p>echo 1 &gt; /proc/sys/net/ipv4/ip_forward</p>
<p>ip tunnel add tun1 mode ipip remote 100.100.100.101 local 100.100.100.216<br />
ip tunnel add tun2 mode ipip remote 100.100.100.102 local 100.100.100.216</p>
<p>ifconfig tun1 172.16.201.4/31 up<br />
ifconfig tun2 172.16.202.4/31 up</p>
<p>ip route add 172.16.101.0/24 via 172.16.201.5 dev tun1<br />
ip route add 172.16.102.0/24 via 172.16.202.5 dev tun2</p>
<p>ip addr add 172.16.99.101/32 dev lo</p>
<p>=============== master 1 ===============</p>
<p>ifconfig eth0 100.100.100.201/24 up</p>
<p>echo 1 &gt; /proc/sys/net/ipv4/ip_forward</p>
<p>ip tunnel add tun1 mode ipip remote 100.100.100.101 local 100.100.100.201<br />
ip tunnel add tun2 mode ipip remote 100.100.100.102 local 100.100.100.201</p>
<p>ifconfig tun1 172.16.201.2/31 up<br />
ifconfig tun2 172.16.202.2/31 up</p>
<p>ip route add 172.16.101.0/24 via 172.16.201.3 dev tun1<br />
ip route add 172.16.102.0/24 via 172.16.202.3 dev tun2</p>
<p>ip addr add 172.16.99.1/32 dev lo</p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=974</wfw:commentRss>
		</item>
		<item>
		<title>linux folder monitoring</title>
		<link>https://haotu.macatung.com/?p=966</link>
		<comments>https://haotu.macatung.com/?p=966#comments</comments>
		<pubDate>Tue, 28 Mar 2023 00:04:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linúc ếch bợt]]></category>

		<guid isPermaLink="false">http://haotu.macatung.com/?p=966</guid>
		<description><![CDATA[
yum -y install inotify-tools
[root@worker-3 ~]# cat watch.sh
#!/bin/bash
TARGET=/var/log/pods/
inotifywait -m -e create -e moved_to --format "%f" $TARGET \
&#124;  while read FILENAME
do
echo Detected path $TARGET file $FILENAME
sleep 5
SUBDIR="`ls ${TARGET}${FILENAME}`"
POD="`echo $FILENAME &#124; cut -d'_' -f 2`"
tail -f ${TARGET}$FILENAME/$SUBDIR/0.log &#124; logger -t "$POD" &#38;
done
[root@worker-3 ~]# cat dwatch.sh
#!/bin/bash
TARGET=/var/log/pods/
inotifywait -m -e delete &#8211;format &#8220;%f&#8221; $TARGET \
&#124;  while read FILENAME
do
echo Deleted [...]]]></description>
			<content:encoded><![CDATA[<p><code><br />
yum -y install inotify-tools</code></p>
<p><code>[root@worker-3 ~]# cat watch.sh</code></p>
<p><code>#!/bin/bash</code></p>
<p><code>TARGET=/var/log/pods/</code></p>
<p><code>inotifywait -m -e create -e moved_to --format "%f" $TARGET \</code></p>
<p><code>|  while read FILENAME</p>
<p>do</p>
<p>echo Detected path $TARGET file $FILENAME</p>
<p>sleep 5</p>
<p>SUBDIR="`ls ${TARGET}${FILENAME}`"</p>
<p>POD="`echo $FILENAME | cut -d'_' -f 2`"</p>
<p>tail -f ${TARGET}$FILENAME/$SUBDIR/0.log | logger -t "$POD" &amp;</p>
<p>done</p>
<p>[root@worker-3 ~]# cat dwatch.sh</p>
<p>#!/bin/bash</p>
<p>TARGET=/var/log/pods/</p>
<p>inotifywait -m -e delete &#8211;format &#8220;%f&#8221; $TARGET \</p>
<p>|  while read FILENAME</p>
<p>do</p>
<p>echo Deleted path $TARGET file $FILENAME</p>
<p>kill `ps ax | grep tail | grep $FILENAME | cut -b 1-6`</p>
<p>done</p>
<p></code></p>
<p><code>[root@worker-3 ~]#<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>https://haotu.macatung.com/?feed=rss2&amp;p=966</wfw:commentRss>
		</item>
	</channel>
</rss>
