|NO.Z.00413|——————————|CloudNative|——|KuberNetes&NetworkPolicy.V05|——|NetworkPolicy.v05|隔离中间件服务.v01|
一、NetworkPolicy隔离中间件服务说明:隔离中间件服务

二、隔离中间件服务
### --- 项目示例概述
~~~ 有一个项目,它有自己数据库MySQL和缓存Redis中间件,
~~~ 我们只希望这个项目的应用能够访问该中间件
~~~ 假如有一个项目需要通过Ingress进行对外发布,我们想要除了Ingress外,
~~~ 其他任何Namespace下的Pod都不能访问该项目。
~~~ 假设有一个项目叫nw-demo,里面部署了三个微服务,分别是MySQL、Redis和Nginx。
~~~ # 现需要对MySQL、Redis、Nginx进行隔离,分别实现如下效果:
~~~ MySQL、Redis只能被该Namespace下的Pod访问;
~~~ Nginx可以被Ingress-nginx命名空间下的Pod和该Namespace下的Pod访问;
三、创建namespace
### --- 创建namespace
~~~ 创建该项目的namespace
[root@k8s-master01 ~]# kubectl create ns nw-demo
namespace/nw-demo created
四、创建mysql服务
### --- 创建mysql服务
[root@k8s-master01 ~]# kubectl create deploy mysql --image=registry.cn-beijing.aliyuncs.com/dotbalo/mysql:5.7.23 -n nw-demo
deployment.apps/mysql created
### --- 查看mysql服务是否启动完成
[root@k8s-master01 ~]# kubectl get po -n nw-demo -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-69d6f69557-6vtqf 1/1 Running 0 2m37s 172.25.244.240 k8s-master01 <none> <none>
五、创建redis服务
### --- 创建redis服务
[root@k8s-master01 ~]# kubectl create deploy redis --image=registry.cn-beijing.aliyuncs.com/dotbalo/redis:5.0.9-alpine3.11 -n nw-demo
deployment.apps/redis created
### --- 查看redis服务是否启动完成
[root@k8s-master01 ~]# kubectl get po -n nw-demo -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-69d6f69557-6vtqf 1/1 Running 0 115m 172.25.244.240 k8s-master01 <none> <none>
redis-c9fdb57d5-4wd78 1/1 Running 0 111m 172.17.125.14 k8s-node01 <none> <none>
六、验证网络连通性——没有配置任何网络策略
### --- 安装mysql端口连通性
~~~ mysql端口是通的
[root@k8s-master01 ~]# kubectl get po -n nw-demo -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-69d6f69557-6vtqf 1/1 Running 0 117m 172.25.244.240 k8s-master01 <none> <none>
[root@k8s-master01 ~]# telnet 172.25.244.240 3306
Trying 172.25.244.240...
Connected to 172.25.244.240.
Escape character is '^]'.
### --- 验证redis端口连通性
~~~ redis端口是通的
~~~ 此时的网络都是可以通信的
~~~ 是非常的不安全的
[root@k8s-master01 ~]# kubectl get po -n nw-demo -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
redis-c9fdb57d5-4wd78 1/1 Running 0 113m 172.17.125.14 k8s-node01 <none> <none>
[root@k8s-master01 ~]# telnet 172.17.125.14 6379
Trying 172.17.125.14...
Connected to 172.17.125.14.
Escape character is '^]'.
附录一:报错处理:
### --- 报错现象:
[root@k8s-master01 ~]# kubectl get po -n nw-demo -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-79658f8b4b-8vk94 0/1 Error 2 4m3s 172.17.125.13 k8s-node01 <none> <none>
### --- 报错分析:
~~~ 创建MySQL服务,MySQL以容器启动时,必须配置root的密码,
~~~ 或者设置密码为空,所以需要设置一个MYSQL_ROOT_PASSWORD的变量:
~~~ 若是不设置环境变量密码,mysql是起不来的
[root@k8s-master01 ~]# kubectl logs -f mysql-79658f8b4b-8vk94 -n nw-demo
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
### --- 解决方案:
[root@k8s-master01 ~]# kubectl set env deploy/mysql MYSQL_ROOT_PASSWORD=mysql -n nw-demo
deployment.apps/mysql env updated
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」