网络策略
网络策略
目录
[toc]
介绍
默认情况下,Kubernetes 集群网络没任何网络限制,Pod 可以与任何其他Pod通信,在某些场景下就需要进行网络控制,减少网络攻击面,提高安全性,这就会用到网络策略。
网络策略(Network Policy):是一个K8s资源,用于限制Pod出入流量,提供Pod级别和Namespace级别网络访问控制。
默认情况,k8集群里,Pod和Pod,Node和Pod之间都是可以随意通信的。
网络策略的应用场景:
- 应用程序间的访问控制,例如项目A不能访问项目B的Pod
- 开发环境命名空间不能访问测试环境命名空间Pod
- 当Pod暴露到外部时,需要做Pod白名单
- 多租户网络环境隔离
网络策略:yaml文件示例
1apiVersion: networking.k8s.io/v1
2kind: NetworkPolicy
3metadata:
4 name: test-network-policy
5 namespace: default
6spec:
7 podSelector:
8 matchLabels:
9 role: db
10 policyTypes:
11 - Ingress
12 - Egress
13 ingress:
14 - from:
15 - ipBlock:
16 cidr: 172.17.0.0/16
17 except:
18 - 172.17.1.0/24
19 - namespaceSelector:
20 matchLabels:
21 project: myproject
22 - podSelector:
23 matchLabels:
24 role: frontend
25 ports:
26 - protocol: TCP
27 port: 6379
28 egress:
29 - to:
30 - ipBlock:
31 cidr: 10.0.0.0/24
32 ports:
33 - protocol: TCP
34 port: 5978

podSelector:目标Pod,根据标签选择。
policyTypes:策略类型,指定策略用于入站、出站流量。
Ingress:from是可以访问的白名单,可以来自于IP段、命名空间、Pod标签等,ports是可以访问的端口。
Egress:这个Pod组可以访问外部的IP段和端口。
注意:
1{} 代表包括所有
2不写ingress或者egress代表默认行为,拒绝所有。
案例1:拒绝命名空间下所有Pod出入站流量
==💘 案例:拒绝命名空间下所有Pod出入站流量-2023.1.6(测试成功)==
次策略实际过程中不会用到。

- 实验环境
1实验环境:
21、win10,vmwrokstation虚机;
32、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
4 k8s version:v1.22.2
5 containerd://1.5.5
- 实验软件
无。
1、创建测试命名空间和相应pod
1(1)创建测试命名空间test
2[root@k8s-master1 ~]#kubectl create ns test
3namespace/test created
4
5(2)创建相应pod
6#在test命名空间下创建2个pod
7[root@k8s-master1 ~]#kubectl run busybox-test --image=busybox -n test -- sleep 12h
8pod/busybox-test created
9[root@k8s-master1 ~]#kubectl run web-test --image=nginx -n test
10pod/web-test created
11[root@k8s-master1 ~]#kubectl get po -owide -ntest
12NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
13busybox-test 1/1 Running 0 13s 10.244.36.74 k8s-node1 <none> <none>
14web-test 1/1 Running 0 8s 10.244.169.138 k8s-node2 <none> <none>
15
16#在default命名空间下创建1个pod
17[root@k8s-master1 ~]#kubectl run busybox-default --image=busybox -- sleep 12h
18pod/busybox-default created
19[root@k8s-master1 ~]#kubectl get po -owide
20NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
21busybox-default 1/1 Running 0 5s 10.244.169.140 k8s-node2 <none> <none>
2、测试k8s默认网络策略
1(1)同命名空间下pod是可以互相访问的
2[root@k8s-master1 ~]#kubectl exec -it busybox-test -ntest -- sh
3/ #
4/ # ping 10.244.169.138
5PING 10.244.169.138 (10.244.169.138): 56 data bytes
664 bytes from 10.244.169.138: seq=0 ttl=62 time=0.601 ms
764 bytes from 10.244.169.138: seq=1 ttl=62 time=0.393 ms
8^C
9--- 10.244.169.138 ping statistics ---
102 packets transmitted, 2 packets received, 0% packet loss
11round-trip min/avg/max = 0.393/0.497/0.601 ms
12
13(2)不同命名空间下pod是可以互相访问的
14[root@k8s-master1 ~]#kubectl exec -it busybox-test -ntest -- sh
15/ #
16/ # ping 10.244.169.140
17PING 10.244.169.140 (10.244.169.140): 56 data bytes
1864 bytes from 10.244.169.140: seq=0 ttl=62 time=0.657 ms
19^C
20--- 10.244.169.140 ping statistics ---
211 packets transmitted, 1 packets received, 0% packet loss
22round-trip min/avg/max = 0.657/0.657/0.657 ms
23
24(3)node是可以访问pod地址的
25[root@k8s-master1 ~]#ping 10.244.36.74
26PING 10.244.36.74 (10.244.36.74) 56(84) bytes of data.
2764 bytes from 10.244.36.74: icmp_seq=1 ttl=63 time=0.485 ms
2864 bytes from 10.244.36.74: icmp_seq=2 ttl=63 time=0.440 ms
29^C
30--- 10.244.36.74 ping statistics ---
312 packets transmitted, 2 received, 0% packet loss, time 1000ms
32rtt min/avg/max/mdev = 0.440/0.462/0.485/0.031 ms
3、为test命名空间配置网络策略
1#deny-all.yaml
2apiVersion: networking.k8s.io/v1
3kind: NetworkPolicy
4metadata:
5 name: deny-all
6 namespace: test
7spec:
8 podSelector: {} # 匹配本命名空间所有pod
9 policyTypes:
10 - Ingress
11 - Egress
12 # ingress和egress没有指定规则,则不允许任何流量进出pod
部署:
1[root@k8s-master1 ~]#kubectl apply -f deny-all.yaml
2networkpolicy.networking.k8s.io/deny-all created
3[root@k8s-master1 ~]#kubectl get networkpolicy -ntest
4NAME POD-SELECTOR AGE
5deny-all <none> 21s
4、测试
1(1)测试访问外部(拒绝访问):
2[root@k8s-master1 ~]#kubectl exec -it busybox-test -n test -- sh
3/ #
4/ # ping 10.244.169.140
5PING 10.244.169.140 (10.244.169.140): 56 data bytes
6^C
7--- 10.244.169.140 ping statistics ---
84 packets transmitted, 0 packets received, 100% packet loss
9
10
11(2)测试外部pod访问(拒绝访问):
12[root@k8s-master1 ~]#kubectl exec -it busybox-default -- sh
13/ #
14/ # ping 10.244.36.74
15PING 10.244.36.74 (10.244.36.74): 56 data bytes
16^C
17--- 10.244.36.74 ping statistics ---
184 packets transmitted, 0 packets received, 100% packet loss
19/ #
20
21
22(3)测试内部pod之间访问(拒绝访问):
23[root@k8s-master1 ~]#kubectl exec -it busybox-test -n test -- sh
24/ #
25/ # ping 10.244.169.138
26PING 10.244.169.138 (10.244.169.138): 56 data bytes
27^C
28--- 10.244.169.138 ping statistics ---
294 packets transmitted, 0 packets received, 100% packet loss
30/ #
测试结束。😘
案例2:拒绝其他命名空间Pod访问
==💘 案例2:拒绝其他命名空间Pod访问-2023.1.6(测试成功)==

1案例2:拒绝其他命名空间Pod访问
2需求:test命名空间下所有pod可以互相访问,也可以访问其他命
3名空间Pod,但其他命名空间不能访问test命名空间Pod。
4
5apiVersion: networking.k8s.io/v1
6kind: NetworkPolicy
7metadata:
8 name: deny-all-namespaces
9 namespace: test
10spec:
11 podSelector: {} # 未配置,匹配本命名空间所有pod
12 policyTypes:
13 - Ingress
14 ingress:
15 - from:
16 - podSelector: {} # 未配置,匹配本命名空间所有pod
17
18#说明
19一般情况,我们配置的ingress规则会多些,而出规则egress很少去配置的;
- 实验环境
1实验环境:
21、win10,vmwrokstation虚机;
32、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
4 k8s version:v1.20.0
5 docker://20.10.7
- 实验软件
无。
准备测试环境:
- 先创建下test命名空间:
1[root@k8s-master ~]#kubectl create ns test
2namespace/test created
- 再创建2个pod:
1[root@k8s-master np]#kubectl run web --image=nginx -n test
2pod/web created
3[root@k8s-master ~]#kubectl run busybox --image=busybox -n test -- sleep 24h
4pod/busybox created
5
6#查看
7[root@k8s-master ~]#kubectl get pod -n test
8NAME READY STATUS RESTARTS AGE
9busybox 1/1 Running 0 9s
10web-96d5df5c8-7r6w6 1/1 Running 0 3m11s
11[root@k8s-master ~]#kubectl get pod -n test -o wide
12NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
13busybox 1/1 Running 0 21h 10.244.169.148 k8s-node2 <none> <none>
14web 1/1 Running 0 7h26m 10.244.169.151 k8s-node2 <none> <none>
15
16#默认情况下,`Kubernetes 集群网络没任何网络限制,Pod 可以与任何其他 Pod 通信`
17[root@k8s-master ~]#kubectl exec busybox -n test -- ping 10.244.169.151
18PING 10.244.169.151 (10.244.169.151): 56 data bytes
1964 bytes from 10.244.169.151: seq=0 ttl=63 time=0.283 ms
2064 bytes from 10.244.169.151: seq=1 ttl=63 time=0.126 ms
21^C
22[root@k8s-master ~]#
- 我们再次在默认命名空间下创建一个pod,并测试不同命名空间下的pod是否可以进行通信:=>是可以通信的。
1[root@k8s-master ~]#kubectl run busybox --image=busybox -- sleep 24h
2
3[root@k8s-master ~]#kubectl get pod -o wide
4[root@k8s-master ~]#kubectl get pod -o wide -n test
5[root@k8s-master ~]#kubectl exec busybox -- ping 10.244.169.157

现在进行按题目需求进行限制:
拒绝其他命名空间Pod访问 需求:test命名空间下所有pod可以互相访问,也可以访问其他命名空间Pod,但其他命名空间不能访问test命名空间Pod。
- 创建np目录:
1[root@k8s-master ~]#mkdir np
2[root@k8s-master ~]#cd np/
3[root@k8s-master np]#vim deny-all-namespaces.yaml #配置yaml,这就是所谓的白名单
4apiVersion: networking.k8s.io/v1
5kind: NetworkPolicy
6metadata:
7 name: deny-all-namespaces
8 namespace: test
9spec:
10 podSelector: {} # 未配置,匹配本命名空间所有pod
11 policyTypes:
12 - Ingress
13 ingress:
14 - from:
15 - podSelector: {} # 未配置,匹配本命名空间所有pod
- apply并测试效果:=>完全符合预期效果。
1 #apply下
2 [root@k8s-master np]#kubectl apply -f deny-all-namespaces.yaml
3networkpolicy.networking.k8s.io/deny-all-namespaces created
4
5#验证效果
6[root@k8s-master np]#kubectl exec busybox -- ping 10.244.169.157 #做了网络策略限制后,从默认命名空间下不能ping通test命名空间下的web pod了。
7^C
8
9#但在test下ping不同命名空间下的pod是依然可以访问的
10[root@k8s-master np]#kubectl exec busybox -n test -- ping 10.244.169.157
11PING 10.244.169.157 (10.244.169.157): 56 data bytes
1264 bytes from 10.244.169.157: seq=0 ttl=63 time=0.245 ms
1364 bytes from 10.244.169.157: seq=1 ttl=63 time=0.307 ms
14^C
15
16#test命名空间下也是可以直接访问外网的;
17[root@k8s-master np]#kubectl exec busybox -n test -- ping www.baidu.com
18PING www.baidu.com (180.101.49.11): 56 data bytes
1964 bytes from 180.101.49.11: seq=0 ttl=127 time=12.591 ms
2064 bytes from 180.101.49.11: seq=1 ttl=127 time=9.736 ms
21^C
22[root@k8s-master np]#
23
24#至此,案例2测试成功!
测试结束。😘
案例3:允许其他命名空间Pod访问指定应用
==💘 案例3:允许其他命名空间Pod访问指定应用-2023.5.21(测试成功)==

- 实验环境
1实验环境:
21、win10,vmwrokstation虚机;
32、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
4 k8s version:v1.20.0
5 docker://20.10.7
- 实验软件
无。
- 先创建下test命名空间:
1[root@k8s-master ~]#kubectl create ns test
2namespace/test created
- 创建网络策略
1[root@k8s-master1 ~]#mkdir np
2[root@k8s-master1 ~]#cd np
1[root@k8s-master1 np]#vim allow-all-namespace.yaml
2apiVersion: networking.k8s.io/v1
3kind: NetworkPolicy
4metadata:
5 name: allow-all-namespaces
6 namespace: test
7spec:
8 podSelector:
9 matchLabels:
10 run: web
11 policyTypes:
12 - Ingress
13 ingress:
14 - from:
15 - namespaceSelector: {} # 匹配所有命名空间的pod
- 部署
1[root@k8s-master1 np]#kubectl apply -f allow-all-namespace.yaml
2networkpolicy.networking.k8s.io/allow-all-namespaces created
3[root@k8s-master1 np]#kubectl get networkpolicy -ntest
4NAME POD-SELECTOR AGE
5allow-all-namespaces app=web 32s
- 创建测试pod
1kubectl run busybox --image=busybox -n test -- sleep 12h
2kubectl run web --image=nginx -n test
3
4kubectl run busybox --image=busybox - sleep 12h
5kubectl run web --image=nginx
6
7[root@k8s-master1 ~]#kubectl get po -owide
8NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
9busybox 1/1 Running 0 84s 10.244.169.155 k8s-node2 <none> <none>
10web 1/1 Running 0 2m50s 10.244.36.90 k8s-node1 <none> <none>
11[root@k8s-master1 np]#kubectl get po -owide -ntest --show-labels
12NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
13busybox 1/1 Running 0 6m23s 10.244.169.153 k8s-node2 <none> <none> run=busybox
14web 1/1 Running 0 6m23s 10.244.36.89 k8s-node1 <none> <none> run=web
- 在default命名空间下ping测test命名空间下的2个pod,观察效果
1[root@k8s-master1 np]#kubectl exec -it busybox -- sh
2/ # ping 10.244.169.153 #ping测buxybox
3PING 10.244.169.153 (10.244.169.153): 56 data bytes
464 bytes from 10.244.169.153: seq=0 ttl=63 time=0.168 ms
5^C
6--- 10.244.169.153 ping statistics ---
71 packets transmitted, 1 packets received, 0% packet loss
8round-trip min/avg/max = 0.168/0.168/0.168 ms
9/ # ping 10.244.36.89 #ping测web
10PING 10.244.36.89 (10.244.36.89): 56 data bytes
1164 bytes from 10.244.36.89: seq=0 ttl=62 time=0.504 ms
1264 bytes from 10.244.36.89: seq=1 ttl=62 time=0.448 ms
13^C
14--- 10.244.36.89 ping statistics ---
152 packets transmitted, 2 packets received, 0% packet loss
16round-trip min/avg/max = 0.448/0.476/0.504 ms
17/ #
- 问题来了:不是已经配置了策略了吗?怎么还能ping通test命名空间下的buxybox pod呢?
这是因为这个策略实际上是没有意义的,因为k8s默认的策略就是各个命名空间下的pod是可以互访的。
网路策略是由网络组件控制的,网络组件是由iptable完成的,iptables是从上到下匹配的。
因此,可以看到,在default命名空间下都是可以ping通test命名空间下2个pod的。

但是,该如何解决呢?
此时就需要配合案例1的网络策略进行使用。
把案例1的网络策略当做一个安全基础,然后在此基础上做白名单限制。
1[root@k8s-master1 np]#vim deny-all.yaml
2#deny-all.yaml
3apiVersion: networking.k8s.io/v1
4kind: NetworkPolicy
5metadata:
6 name: deny-all
7 namespace: test
8spec:
9 podSelector: {} # 匹配本命名空间所有pod
10 policyTypes:
11 - Ingress
12 - Egress
13 # ingress和egress没有指定规则,则不允许任何流量进出pod
14
15
16#部署
17#注意:此时需要先删除刚才创建的那条策略,然后先部署deny-all.yaml,再部署allow-all-namespace.yaml
18kubectl delete -f allow-all-namespace.yaml
19[root@k8s-master1 np]#kubectl apply -f deny-all.yaml
20networkpolicy.networking.k8s.io/deny-all created
21[root@k8s-master1 np]#kubectl apply -f allow-all-namespace.yaml
22networkpolicy.networking.k8s.io/allow-all-namespaces created
- 再次测试
1[root@k8s-master1 np]#kubectl exec -it busybox -- sh
2/ # ping 10.244.36.89 #ping测web
3PING 10.244.36.89 (10.244.36.89): 56 data bytes
464 bytes from 10.244.36.89: seq=0 ttl=62 time=0.470 ms
5^C
6--- 10.244.36.89 ping statistics ---
71 packets transmitted, 1 packets received, 0% packet loss
8round-trip min/avg/max = 0.470/0.470/0.470 ms
9/ # ping 10.244.169.153 #ping测buxybox
10PING 10.244.169.153 (10.244.169.153): 56 data bytes
11^C
12--- 10.244.169.153 ping statistics ---
133 packets transmitted, 0 packets received, 100% packet loss
14/ #
测试结束。😘
案例4:同一个命名空间下应用之间限制访
==💘 案例4:同一个命名空间下应用之间限制访-2023.5.21(测试成功)==

1案例4:同一个命名空间下应用之间限制访问
2
3需求:将test命名空间携带run=web标签的Pod隔离,只允许test
4命名空间携带run=client1标签的Pod访问80端口。
5
6apiVersion: networking.k8s.io/v1
7kind: NetworkPolicy
8metadata:
9 name: app-to-app
10 namespace: test
11spec:
12 podSelector:
13 matchLabels:
14 run: web
15 policyTypes:
16 - Ingress
17 ingress:
18 - from:
19 - podSelector:
20 matchLabels:
21 run: client1
22 ports:
23 - protocol: TCP
24 port: 80
- 实验环境
1实验环境:
21、win10,vmwrokstation虚机;
32、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
4 k8s version:v1.20.0
5 docker://20.10.7
- 实验软件
无。
- 我们这边做测试时,先把上面的网络策略规则给删除掉:
1[root@k8s-master1 np]#kubectl delete -f .
2networkpolicy.networking.k8s.io "allow-all-namespaces" deleted
3networkpolicy.networking.k8s.io "deny-all" deleted
- 创建2个test命名空间下的不同label的测试pod:
1[root@k8s-master np]#kubectl get pod -n test --show-labels
2NAME READY STATUS RESTARTS AGE LABELS
3busybox 1/1 Running 1 22h run=busybox
4web 1/1 Running 1 8h run=web
5
6[root@k8s-master np]#kubectl run client1 -l run=client1 --image=busybox -n test -- sleep 12h
7pod/client1 created
8[root@k8s-master np]#kubectl run client2 -l run=client2 --image=busybox -n test -- sleep 12h
9pod/client2 created
10
11[root@k8s-master np]#kubectl get pod -n test --show-labels
12NAME READY STATUS RESTARTS AGE LABELS
13busybox 1/1 Running 1 22h run=busybox
14client1 1/1 Running 0 33s run=client1
15client2 1/1 Running 0 20s run=client2
16web 1/1 Running 1 8h run=web
17[root@k8s-master np]#
- 配置前测试:默认同一个命名空间下的pod都是可以直接访问的:

- 现在开始配置网络策略:
1[root@k8s-master np]#vim app-to-app.yaml
2apiVersion: networking.k8s.io/v1
3kind: NetworkPolicy
4metadata:
5 name: app-to-app
6 namespace: test
7spec:
8 podSelector:
9 matchLabels:
10 run: web
11 policyTypes:
12 - Ingress
13 ingress:
14 - from:
15 - podSelector:
16 matchLabels:
17 run: client1
18 ports:
19 - protocol: TCP
20 port: 80
21
22[root@k8s-master np]#kubectl apply -f app-to-app.yaml
23networkpolicy.networking.k8s.io/app-to-app created

- 测试失效效果:=>符合预期。

至此,案例4实验完成。😘
案例5:只允许指定命名空间中的应用访问
==💘 案例5:只允许指定命名空间中的应用访问-2023.5.21(测试成功)==

- 实验环境
1实验环境:
21、win10,vmwrokstation虚机;
32、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
4 k8s version:v1.20.0
5 docker://20.10.7
- 实验软件
无。
根据题目需求进行测试
- 创建ns dev与标签为
env=dev的pod
1[root@k8s-master1 np]#kubectl create ns dev
2namespace/dev created
3
4[root@k8s-master1 np]#kubectl run web --image=nginx -l env=dev -n dev
5pod/web created
6[root@k8s-master1 np]#kubectl get po -ndev --show-labels -owide
7NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
8web 1/1 Running 0 30s 10.244.169.156 k8s-node2 <none> <none> env=dev
- 创建ns prod及网络策略.yaml
1#创建ns prod并打上标签
2[root@k8s-master1 np]#kubectl create ns prod
3namespace/prod created
4[root@k8s-master1 np]#kubectl label ns prod env=prod
5namespace/prod labeled
6[root@k8s-master1 np]#kubectl get ns prod --show-labels
7NAME STATUS AGE LABELS
8prod Active 30s env=prod
9
10#创建网络策略.yaml
11[root@k8s-master1 np]#vim test.yaml
12apiVersion: networking.k8s.io/v1
13kind: NetworkPolicy
14metadata:
15 name: dev-web
16 namespace: dev
17spec:
18 podSelector:
19 matchLabels:
20 env: dev
21 policyTypes:
22 - Ingress
23 ingress:
24 # 满足允许prod命名空间中的pod访问
25 - from:
26 - namespaceSelector:
27 matchLabels:
28 env: prod
29 # 允许pod标签为app=client1的pod访问,所有命名空间
30 - from:
31 - namespaceSelector: {}
32 podSelector:
33 matchLabels:
34 app: client1
35
36#部署
37[root@k8s-master1 np]#kubectl apply -f test.yaml
38networkpolicy.networking.k8s.io/dev-web created
- 测试
1#创建测试pod
2kubectl run busybox --image=busybox -n prod -- sleep 12h #预期:会访问成功
3kubectl run busybox --image=busybox -- sleep 12h #预期:会访问失败
4kubectl run busybox2 --image=busybox -l app=client1 -- sleep 12h #预期:会访问成功
5
6#ping测试
7kubectl run busybox --image=busybox -n prod-- sleep 12h #预期:会访问成功
8kubectl run busybox --image=busybox -- sleep 12h #预期:会访问失败
9kubectl run busybox2 --image=busybox -l app=client1 -- sleep 12h #预期:会访问成功
10
11#测试效果(以下均符合预期效果)
12[root@k8s-master1 np]#kubectl exec busybox -nprod -- ping 10.244.169.156
13PING 10.244.169.156 (10.244.169.156): 56 data bytes
1464 bytes from 10.244.169.156: seq=0 ttl=63 time=0.161 ms
15^C
16[root@k8s-master1 np]#kubectl exec -it busybox -- ping 10.244.169.156
17PING 10.244.169.156 (10.244.169.156): 56 data bytes
18^C
19--- 10.244.169.156 ping statistics ---
202 packets transmitted, 0 packets received, 100% packet loss
21command terminated with exit code 1
22[root@k8s-master1 np]#kubectl exec -it busybox2 -- ping 10.244.169.156
23PING 10.244.169.156 (10.244.169.156): 56 data bytes
2464 bytes from 10.244.169.156: seq=0 ttl=62 time=0.951 ms
2564 bytes from 10.244.169.156: seq=1 ttl=62 time=0.600 ms
26^C
27--- 10.244.169.156 ping statistics ---
282 packets transmitted, 2 packets received, 0% packet loss
29round-trip min/avg/max = 0.600/0.775/0.951 ms
测试结束。😘
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

🍀 微信公众号 《云原生架构师实战》

🍀 个人博客站点
http://47.97.48.237/ (即将上线域名:onedayxyy.cn)

🍀 语雀
https://www.yuque.com/xyy-onlyone

🍀 csdn https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

🍀 知乎 https://www.zhihu.com/people/foryouone

最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

