题目
Task
创建一个名为 pod-restriction 的 NetworkPolicy 来限制对在 namespace dev-team 中运行的 Pod products-service 的访问。
只允许以下 Pod 连接到 Pod products-service:
1.namespace qaqa 中的 Pod
2.位于任何 namespace,带有标签 environment: testing 的 Pod
注意:确保应用 NetworkPolicy。
环境搭建
创建命名空间
命令
kubectl create ns dev-team
kubectl create ns qaqa
截图
创建products-service
命令
kubectl run products-service --image=nginx --dry-run=client -o yaml > products-service.yaml
修改products-service.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: products-service
name: products-service
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: products-service
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
命令
kubectl create -f products-service.yaml -n dev-team
截图
pod打标签(default下的busybox-demo,请读者自行创建)
命令
kubectl label po busybox-demo environment=testing
截图
解题
pod-restriction.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: pod-restriction
namespace: dev-team
spec:
podSelector:
matchLabels:
run: products-service
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: qaqa
- from:
- namespaceSelector: {}
podSelector:
matchLabels:
environment: testing
解释:对于dev-team命名空间下标签打了run=products-service的Pod的如流量进行限制,打了kubernetes.io/metadata.name=qaqa标签的命名空间下的Pod都可以访问,打了environment=testing标签的Pod都可以访问。
namespaceSelector不写时默认为当前命名空间,若任意命名空间,需要写空
模拟题
参考
k8s-网络策略
k8s学习-网络策略NetworkPolicy(概念、模版、创建、删除等)
k8s学习-CKA真题-网络策略NetworkPolicy
更多k8s相关内容,请看文章:k8s学习-思维导图与学习笔记