题目
分析
创建一个名字为all-port-from-namespace的NetworkPolicy。
这个NetworkPolicy允许internal命名空间下的Pod访问该命名空间下的9000端口。
不允许不是internal命令空间的下的Pod访问
不允许访问没有监听9000端口的Pod。
注意:这里为了验证结果,后续使用了端口80。
命令
环境搭建
创建命名空间internal
kubectl create ns internal
busy-box-for-internal.yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox-demo
spec:
containers:
- name: busybox
image: busybox:latest
imagePullPolicy: IfNotPresent
command: ['sh','-c','sleep 3600']
在命名空间internal创建pod busy-box
kubectl create busy-box-for-internal.yaml -n internal
nginx-demo-for-internal.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
在命名空间internal创建pod nginx-demo
kubectl create nginx-demo-for-internal.yaml -n internal
解题
all-port-from-namespace.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: all-port-from-namespace
namespace: internal
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- podSelector: {}
ports:
- port: 80
protocol: TCP
创建NetworkPolicy all-port-from-namespace
kubectl create -f all-port-from-namespace.yaml
结果
创建NetworkPolicy之前
创建NetworkPolicy之后
可以看到,创建后,internal之外的Pod无法访问
参考
更多k8s相关内容,请看文章:k8s学习-思维导图与学习笔记