OpenShift系列(八) 解密Pod互访与网络策略
1 | 作者:李晓辉 |
有时候我们得限制Pod之间的访问,这就得靠配置网络策略啦。Kubernetes的网络策略超有意思,它用标签来控制Pod之间的网络流量,而不是靠IP地址呢,这样就能很方便地管理进出的流量。
我们来试试一个实验吧:
在一个叫zhangsan的项目里,先搞两个Pod,让它们互相访问一下,看看能不能成功。
再整一个叫lixiaohui的项目,也创建两个Pod,互相访问,测试一下。
然后让这两个项目里的Pod互相访问,看看能不能搞定。
最后,我们新建一个网络策略,再验证一下同项目和不同项目里的Pod互访能不能成功。
新建zhangsan project的资源
1 | oc new-project zhangsan |
在zhangsan的namespace中,新建一个名为hello开头的pod
1 | oc new-app --name hello --image registry.ocp4.example.com:8443/redhattraining/hello-world-nginx:v1.0 |
在zhangsan的namespace中,新建一个名为test开头的pod
1 | oc new-app --name test --image registry.ocp4.example.com:8443/redhattraining/hello-world-nginx:v1.0 |
查看一下pod的ip
1 | [root@workstation ~]# oc -n zhangsan get pod -o wide |
测试zhangsan project中的互访
从test的pod中发起对hello的pod访问,发现可以成功,证明同project互访ok
1 | [root@workstation ~]# oc rsh test-54d78b7-gwc8g curl 10.8.0.81:8080 |
新建lixiaohui project的资源
1 | oc new-project lixiaohui |
1 | oc new-app --name sample-app --image registry.ocp4.example.com:8443/redhattraining/hello-world-nginx:v1.0 |
检查是否能运行
1 | [root@workstation ~]# oc get pod -o wide |
验证跨project的访问
在新建网络策略之前,我们先试试他们跨project目前是否能访问
结果显示,跨project访问没问题
1 | [root@workstation ~]# oc rsh sample-app-564fdf8b8c-psjf8 curl 10.8.0.81:8080 |
开启白名单
经过测试,上面不管是否跨project,都能互相访问,我们来试试,让hello这个pod除lixiaohui这个project外,不让所有人访问,开启白名单方式
先看看hello这个pod有什么标签
1 | [root@workstation ~]# oc describe pod -n zhangsan hello-7c5959664f-4mwg7 | grep -A 2 Labels |
在zhangsan的namespace下, 创建除网络策略
1 | cat > only-allow-lixiaohui-project.yml <<-EOF |
1 | [root@workstation ~]# oc create -f only-allow-lixiaohui-project.yml |
测试一下是否只允许lixiaohui的project访问
好的,看上去访问成功
1 | [root@workstation ~]# oc get pod -n lixiaohui -o wide |
不过在新建网络策略之前,它就是成功的,所以我们试试从同一个project中的test这个pod中访问试试
发现卡住不动了,无法访问
1 | [root@workstation ~]# oc -n zhangsan rsh test-54d78b7-gwc8g curl 10.8.0.81:8080 |
但是跨project访问lixiaohui是可以的
1 | [root@workstation ~]# oc -n zhangsan rsh test-54d78b7-gwc8g curl 10.8.0.85:8080 |
本博客中的内容未经允许不得转载和引用,转载和引用需获得作者同意, 作者微信: Lxh_Chat